# -*- Mode: Python -*-
# vim: filetype=python
#
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.

##
# = Dump guest memory
##

##
# @DumpGuestMemoryFormat:
#
# An enumeration of guest-memory-dump's format.
#
# @elf: elf format
#
# @kdump-zlib: makedumpfile flattened, kdump-compressed format with
#     zlib compression
#
# @kdump-lzo: makedumpfile flattened, kdump-compressed format with lzo
#     compression
#
# @kdump-snappy: makedumpfile flattened, kdump-compressed format with
#     snappy compression
#
# @kdump-raw-zlib: raw assembled kdump-compressed format with zlib
#     compression (since 8.2)
#
# @kdump-raw-lzo: raw assembled kdump-compressed format with lzo
#     compression (since 8.2)
#
# @kdump-raw-snappy: raw assembled kdump-compressed format with snappy
#     compression (since 8.2)
#
# @win-dmp: Windows full crashdump format, can be used instead of ELF
#     converting (since 2.13)
#
# Since: 2.0
##
{ 'enum': 'DumpGuestMemoryFormat',
  'data': [
      'elf',
      'kdump-zlib', 'kdump-lzo', 'kdump-snappy',
      'kdump-raw-zlib', 'kdump-raw-lzo', 'kdump-raw-snappy',
      'win-dmp' ] }

##
# @dump-guest-memory:
#
# Dump guest's memory to vmcore.  It is a synchronous operation that
# can take very long depending on the amount of guest memory.
#
# @paging: if true, do paging to get guest's memory mapping.  This
#     allows using gdb to process the core file.
#
#     IMPORTANT: this option can make QEMU allocate several gigabytes
#     of RAM.  This can happen for a large guest, or a malicious guest
#     pretending to be large.
#
#     Also, paging=true has the following limitations:
#
#     1. The guest may be in a catastrophic state or can have
#        corrupted memory, which cannot be trusted
#     2. The guest can be in real-mode even if paging is enabled.  For
#        example, the guest uses ACPI to sleep, and ACPI sleep state
#        goes in real-mode
#     3. Currently only supported on i386 and x86_64.
#
# @protocol: the filename or file descriptor of the vmcore.  The
#     supported protocols are:
#
#     1. file: the protocol starts with "file:", and the following
#        string is the file's path.
#     2. fd: the protocol starts with "fd:", and the following string
#        is the fd's name.
#
# @detach: if true, QMP will return immediately rather than waiting
#     for the dump to finish.  The user can track progress using
#     "query-dump".  (since 2.6).
#
# @begin: if specified, the starting physical address.
#
# @length: if specified, the memory size, in bytes.  If you don't want
#     to dump all guest's memory, please specify the start @begin and
#     @length
#
# @format: if specified, the format of guest memory dump.  But non-elf
#     format is conflict with paging and filter, ie.  @paging, @begin
#     and @length is not allowed to be specified with non-elf @format
#     at the same time (since 2.0)
#
# .. note:: All boolean arguments default to false.
#
# Since: 1.2
#
# .. qmp-example::
#
#     -> { "execute": "dump-guest-memory",
#          "arguments": { "paging": false, "protocol": "fd:dump" } }
#     <- { "return": {} }
##
{ 'command': 'dump-guest-memory',
  'data': { 'paging': 'bool', 'protocol': 'str', '*detach': 'bool',
            '*begin': 'int', '*length': 'int',
            '*format': 'DumpGuestMemoryFormat'} }

##
# @DumpStatus:
#
# Describe the status of a long-running background guest memory dump.
#
# @none: no dump-guest-memory has started yet.
#
# @active: there is one dump running in background.
#
# @completed: the last dump has finished successfully.
#
# @failed: the last dump has failed.
#
# Since: 2.6
##
{ 'enum': 'DumpStatus',
  'data': [ 'none', 'active', 'completed', 'failed' ] }

##
# @DumpQueryResult:
#
# The result format for 'query-dump'.
#
# @status: enum of @DumpStatus, which shows current dump status
#
# @completed: bytes written in latest dump (uncompressed)
#
# @total: total bytes to be written in latest dump (uncompressed)
#
# Since: 2.6
##
{ 'struct': 'DumpQueryResult',
  'data': { 'status': 'DumpStatus',
            'completed': 'int',
            'total': 'int' } }

##
# @query-dump:
#
# Query latest dump status.
#
# Returns: A @DumpStatus object showing the dump status.
#
# Since: 2.6
#
# .. qmp-example::
#
#     -> { "execute": "query-dump" }
#     <- { "return": { "status": "active", "completed": 1024000,
#                      "total": 2048000 } }
##
{ 'command': 'query-dump', 'returns': 'DumpQueryResult' }

##
# @DUMP_COMPLETED:
#
# Emitted when background dump has completed
#
# @result: final dump status
#
# @error: human-readable error string that provides hint on why dump
#     failed.  Only presents on failure.  The user should not try to
#     interpret the error string.
#
# Since: 2.6
#
# .. qmp-example::
#
#     <- { "event": "DUMP_COMPLETED",
#          "data": { "result": { "total": 1090650112, "status": "completed",
#                                "completed": 1090650112 } },
#          "timestamp": { "seconds": 1648244171, "microseconds": 950316 } }
##
{ 'event': 'DUMP_COMPLETED' ,
  'data': { 'result': 'DumpQueryResult', '*error': 'str' } }

##
# @DumpGuestMemoryCapability:
#
# @formats: the available formats for dump-guest-memory
#
# Since: 2.0
##
{ 'struct': 'DumpGuestMemoryCapability',
  'data': {
      'formats': ['DumpGuestMemoryFormat'] } }

##
# @query-dump-guest-memory-capability:
#
# Returns the available formats for dump-guest-memory
#
# Returns: A @DumpGuestMemoryCapability object listing available
#     formats for dump-guest-memory
#
# Since: 2.0
#
# .. qmp-example::
#
#     -> { "execute": "query-dump-guest-memory-capability" }
#     <- { "return": { "formats":
#                      ["elf", "kdump-zlib", "kdump-lzo", "kdump-snappy"] } }
##
{ 'command': 'query-dump-guest-memory-capability',
  'returns': 'DumpGuestMemoryCapability' }
