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

##
# = General note concerning the use of guest agent interfaces
#
# "unsupported" is a higher-level error than the errors that individual
# commands might document. The caller should always be prepared to receive
# QERR_UNSUPPORTED, even if the given command doesn't specify it, or doesn't
# document any failure mode at all.
##

##
# = QEMU guest agent protocol commands and structs
##

{ 'pragma': { 'doc-required': true } }

# Lists with items allowed to permit QAPI rule violations; think twice
# before you add to them!
{ 'pragma': {
    # Types whose member names may use '_'
    'member-name-exceptions': [
        'GuestAgentInfo'
    ],
    # Commands allowed to return a non-dictionary:
    'command-returns-exceptions': [
        'guest-file-open',
        'guest-fsfreeze-freeze',
        'guest-fsfreeze-freeze-list',
        'guest-fsfreeze-status',
        'guest-fsfreeze-thaw',
        'guest-get-time',
        'guest-set-vcpus',
        'guest-sync',
        'guest-sync-delimited' ] } }

##
# @guest-sync-delimited:
#
# Echo back a unique integer value, and prepend to response a
# leading sentinel byte (0xFF) the client can check scan for.
#
# This is used by clients talking to the guest agent over the
# wire to ensure the stream is in sync and doesn't contain stale
# data from previous client. It must be issued upon initial
# connection, and after any client-side timeouts (including
# timeouts on receiving a response to this command).
#
# After issuing this request, all guest agent responses should be
# ignored until the response containing the unique integer value
# the client passed in is returned. Receival of the 0xFF sentinel
# byte must be handled as an indication that the client's
# lexer/tokenizer/parser state should be flushed/reset in
# preparation for reliably receiving the subsequent response. As
# an optimization, clients may opt to ignore all data until a
# sentinel value is receiving to avoid unnecessary processing of
# stale data.
#
# Similarly, clients should also precede this *request*
# with a 0xFF byte to make sure the guest agent flushes any
# partially read JSON data from a previous client connection.
#
# @id: randomly generated 64-bit integer
#
# Returns: The unique integer id passed in by the client
#
# Since: 1.1
##
{ 'command': 'guest-sync-delimited',
  'data':    { 'id': 'int' },
  'returns': 'int' }

##
# @guest-sync:
#
# Echo back a unique integer value
#
# This is used by clients talking to the guest agent over the
# wire to ensure the stream is in sync and doesn't contain stale
# data from previous client. All guest agent responses should be
# ignored until the provided unique integer value is returned,
# and it is up to the client to handle stale whole or
# partially-delivered JSON text in such a way that this response
# can be obtained.
#
# In cases where a partial stale response was previously
# received by the client, this cannot always be done reliably.
# One particular scenario being if qemu-ga responses are fed
# character-by-character into a JSON parser. In these situations,
# using guest-sync-delimited may be optimal.
#
# For clients that fetch responses line by line and convert them
# to JSON objects, guest-sync should be sufficient, but note that
# in cases where the channel is dirty some attempts at parsing the
# response may result in a parser error.
#
# Such clients should also precede this command
# with a 0xFF byte to make sure the guest agent flushes any
# partially read JSON data from a previous session.
#
# @id: randomly generated 64-bit integer
#
# Returns: The unique integer id passed in by the client
#
# Since: 0.15.0
##
{ 'command': 'guest-sync',
  'data':    { 'id': 'int' },
  'returns': 'int' }

##
# @guest-ping:
#
# Ping the guest agent, a non-error return implies success
#
# Since: 0.15.0
##
{ 'command': 'guest-ping' }

##
# @guest-get-time:
#
# Get the information about guest's System Time relative to
# the Epoch of 1970-01-01 in UTC.
#
# Returns: Time in nanoseconds.
#
# Since: 1.5
##
{ 'command': 'guest-get-time',
  'returns': 'int' }

##
# @guest-set-time:
#
# Set guest time.
#
# When a guest is paused or migrated to a file then loaded
# from that file, the guest OS has no idea that there
# was a big gap in the time. Depending on how long the
# gap was, NTP might not be able to resynchronize the
# guest.
#
# This command tries to set guest's System Time to the
# given value, then sets the Hardware Clock (RTC) to the
# current System Time. This will make it easier for a guest
# to resynchronize without waiting for NTP. If no @time is
# specified, then the time to set is read from RTC. However,
# this may not be supported on all platforms (i.e. Windows).
# If that's the case users are advised to always pass a
# value.
#
# @time: time of nanoseconds, relative to the Epoch
#        of 1970-01-01 in UTC.
#
# Returns: Nothing on success.
#
# Since: 1.5
##
{ 'command': 'guest-set-time',
  'data': { '*time': 'int' } }

##
# @GuestAgentCommandInfo:
#
# Information about guest agent commands.
#
# @name: name of the command
#
# @enabled: whether command is currently enabled by guest admin
#
# @success-response: whether command returns a response on success
#                    (since 1.7)
#
# Since: 1.1.0
##
{ 'struct': 'GuestAgentCommandInfo',
  'data': { 'name': 'str', 'enabled': 'bool', 'success-response': 'bool' } }

##
# @GuestAgentInfo:
#
# Information about guest agent.
#
# @version: guest agent version
#
# @supported_commands: Information about guest agent commands
#
# Since: 0.15.0
##
{ 'struct': 'GuestAgentInfo',
  'data': { 'version': 'str',
            'supported_commands': ['GuestAgentCommandInfo'] } }
##
# @guest-info:
#
# Get some information about the guest agent.
#
# Returns: @GuestAgentInfo
#
# Since: 0.15.0
##
{ 'command': 'guest-info',
  'returns': 'GuestAgentInfo' }

##
# @guest-shutdown:
#
# Initiate guest-activated shutdown. Note: this is an asynchronous
# shutdown request, with no guarantee of successful shutdown.
#
# @mode: "halt", "powerdown" (default), or "reboot"
#
# This command does NOT return a response on success. Success condition
# is indicated by the VM exiting with a zero exit status or, when
# running with --no-shutdown, by issuing the query-status QMP command
# to confirm the VM status is "shutdown".
#
# Since: 0.15.0
##
{ 'command': 'guest-shutdown', 'data': { '*mode': 'str' },
  'success-response': false }

##
# @guest-file-open:
#
# Open a file in the guest and retrieve a file handle for it
#
# @path: Full path to the file in the guest to open.
#
# @mode: open mode, as per fopen(), "r" is the default.
#
# Returns: Guest file handle on success.
#
# Since: 0.15.0
##
{ 'command': 'guest-file-open',
  'data':    { 'path': 'str', '*mode': 'str' },
  'returns': 'int' }

##
# @guest-file-close:
#
# Close an open file in the guest
#
# @handle: filehandle returned by guest-file-open
#
# Returns: Nothing on success.
#
# Since: 0.15.0
##
{ 'command': 'guest-file-close',
  'data': { 'handle': 'int' } }

##
# @GuestFileRead:
#
# Result of guest agent file-read operation
#
# @count: number of bytes read (note: count is *before*
#         base64-encoding is applied)
#
# @buf-b64: base64-encoded bytes read
#
# @eof: whether EOF was encountered during read operation.
#
# Since: 0.15.0
##
{ 'struct': 'GuestFileRead',
  'data': { 'count': 'int', 'buf-b64': 'str', 'eof': 'bool' } }

##
# @guest-file-read:
#
# Read from an open file in the guest. Data will be base64-encoded.
# As this command is just for limited, ad-hoc debugging, such as log
# file access, the number of bytes to read is limited to 48 MB.
#
# @handle: filehandle returned by guest-file-open
#
# @count: maximum number of bytes to read (default is 4KB, maximum is 48MB)
#
# Returns: @GuestFileRead on success.
#
# Since: 0.15.0
##
{ 'command': 'guest-file-read',
  'data':    { 'handle': 'int', '*count': 'int' },
  'returns': 'GuestFileRead' }

##
# @GuestFileWrite:
#
# Result of guest agent file-write operation
#
# @count: number of bytes written (note: count is actual bytes
#         written, after base64-decoding of provided buffer)
#
# @eof: whether EOF was encountered during write operation.
#
# Since: 0.15.0
##
{ 'struct': 'GuestFileWrite',
  'data': { 'count': 'int', 'eof': 'bool' } }

##
# @guest-file-write:
#
# Write to an open file in the guest.
#
# @handle: filehandle returned by guest-file-open
#
# @buf-b64: base64-encoded string representing data to be written
#
# @count: bytes to write (actual bytes, after base64-decode),
#         default is all content in buf-b64 buffer after base64 decoding
#
# Returns: @GuestFileWrite on success.
#
# Since: 0.15.0
##
{ 'command': 'guest-file-write',
  'data':    { 'handle': 'int', 'buf-b64': 'str', '*count': 'int' },
  'returns': 'GuestFileWrite' }


##
# @GuestFileSeek:
#
# Result of guest agent file-seek operation
#
# @position: current file position
#
# @eof: whether EOF was encountered during file seek
#
# Since: 0.15.0
##
{ 'struct': 'GuestFileSeek',
  'data': { 'position': 'int', 'eof': 'bool' } }

##
# @QGASeek:
#
# Symbolic names for use in @guest-file-seek
#
# @set: Set to the specified offset (same effect as 'whence':0)
# @cur: Add offset to the current location (same effect as 'whence':1)
# @end: Add offset to the end of the file (same effect as 'whence':2)
#
# Since: 2.6
##
{ 'enum': 'QGASeek', 'data': [ 'set', 'cur', 'end' ] }

##
# @GuestFileWhence:
#
# Controls the meaning of offset to @guest-file-seek.
#
# @value: Integral value (0 for set, 1 for cur, 2 for end), available
#         for historical reasons, and might differ from the host's or
#         guest's SEEK_* values (since: 0.15)
# @name: Symbolic name, and preferred interface
#
# Since: 2.6
##
{ 'alternate': 'GuestFileWhence',
  'data': { 'value': 'int', 'name': 'QGASeek' } }

##
# @guest-file-seek:
#
# Seek to a position in the file, as with fseek(), and return the
# current file position afterward. Also encapsulates ftell()'s
# functionality, with offset=0 and whence=1.
#
# @handle: filehandle returned by guest-file-open
#
# @offset: bytes to skip over in the file stream
#
# @whence: Symbolic or numeric code for interpreting offset
#
# Returns: @GuestFileSeek on success.
#
# Since: 0.15.0
##
{ 'command': 'guest-file-seek',
  'data':    { 'handle': 'int', 'offset': 'int',
               'whence': 'GuestFileWhence' },
  'returns': 'GuestFileSeek' }

##
# @guest-file-flush:
#
# Write file changes buffered in userspace to disk/kernel buffers
#
# @handle: filehandle returned by guest-file-open
#
# Returns: Nothing on success.
#
# Since: 0.15.0
##
{ 'command': 'guest-file-flush',
  'data': { 'handle': 'int' } }

##
# @GuestFsfreezeStatus:
#
# An enumeration of filesystem freeze states
#
# @thawed: filesystems thawed/unfrozen
#
# @frozen: all non-network guest filesystems frozen
#
# Since: 0.15.0
##
{ 'enum': 'GuestFsfreezeStatus',
  'data': [ 'thawed', 'frozen' ] }

##
# @guest-fsfreeze-status:
#
# Get guest fsfreeze state. error state indicates
#
# Returns: GuestFsfreezeStatus ("thawed", "frozen", etc., as defined below)
#
# Note: This may fail to properly report the current state as a result of
#       some other guest processes having issued an fs freeze/thaw.
#
# Since: 0.15.0
##
{ 'command': 'guest-fsfreeze-status',
  'returns': 'GuestFsfreezeStatus' }

##
# @guest-fsfreeze-freeze:
#
# Sync and freeze all freezable, local guest filesystems. If this
# command succeeded, you may call @guest-fsfreeze-thaw later to
# unfreeze.
#
# Note: On Windows, the command is implemented with the help of a
#       Volume Shadow-copy Service DLL helper. The frozen state is limited
#       for up to 10 seconds by VSS.
#
# Returns: Number of file systems currently frozen. On error, all filesystems
#          will be thawed. If no filesystems are frozen as a result of this call,
#          then @guest-fsfreeze-status will remain "thawed" and calling
#          @guest-fsfreeze-thaw is not necessary.
#
# Since: 0.15.0
##
{ 'command': 'guest-fsfreeze-freeze',
  'returns': 'int' }

##
# @guest-fsfreeze-freeze-list:
#
# Sync and freeze specified guest filesystems.
# See also @guest-fsfreeze-freeze.
#
# @mountpoints: an array of mountpoints of filesystems to be frozen.
#               If omitted, every mounted filesystem is frozen.
#               Invalid mount points are ignored.
#
# Returns: Number of file systems currently frozen. On error, all filesystems
#          will be thawed.
#
# Since: 2.2
##
{ 'command': 'guest-fsfreeze-freeze-list',
  'data':    { '*mountpoints': ['str'] },
  'returns': 'int' }

##
# @guest-fsfreeze-thaw:
#
# Unfreeze all frozen guest filesystems
#
# Returns: Number of file systems thawed by this call
#
# Note: if return value does not match the previous call to
#       guest-fsfreeze-freeze, this likely means some freezable
#       filesystems were unfrozen before this call, and that the
#       filesystem state may have changed before issuing this
#       command.
#
# Since: 0.15.0
##
{ 'command': 'guest-fsfreeze-thaw',
  'returns': 'int' }

##
# @GuestFilesystemTrimResult:
#
# @path: path that was trimmed
# @error: an error message when trim failed
# @trimmed: bytes trimmed for this path
# @minimum: reported effective minimum for this path
#
# Since: 2.4
##
{ 'struct': 'GuestFilesystemTrimResult',
  'data': {'path': 'str',
           '*trimmed': 'int', '*minimum': 'int', '*error': 'str'} }

##
# @GuestFilesystemTrimResponse:
#
# @paths: list of @GuestFilesystemTrimResult per path that was trimmed
#
# Since: 2.4
##
{ 'struct': 'GuestFilesystemTrimResponse',
  'data': {'paths': ['GuestFilesystemTrimResult']} }

##
# @guest-fstrim:
#
# Discard (or "trim") blocks which are not in use by the filesystem.
#
# @minimum: Minimum contiguous free range to discard, in bytes. Free ranges
#           smaller than this may be ignored (this is a hint and the guest
#           may not respect it).  By increasing this value, the fstrim
#           operation will complete more quickly for filesystems with badly
#           fragmented free space, although not all blocks will be discarded.
#           The default value is zero, meaning "discard every free block".
#
# Returns: A @GuestFilesystemTrimResponse which contains the
#          status of all trimmed paths. (since 2.4)
#
# Since: 1.2
##
{ 'command': 'guest-fstrim',
  'data': { '*minimum': 'int' },
  'returns': 'GuestFilesystemTrimResponse' }

##
# @guest-suspend-disk:
#
# Suspend guest to disk.
#
# This command attempts to suspend the guest using three strategies, in this
# order:
#
# - systemd hibernate
# - pm-utils (via pm-hibernate)
# - manual write into sysfs
#
# This command does NOT return a response on success. There is a high chance
# the command succeeded if the VM exits with a zero exit status or, when
# running with --no-shutdown, by issuing the query-status QMP command to
# to confirm the VM status is "shutdown". However, the VM could also exit
# (or set its status to "shutdown") due to other reasons.
#
# The following errors may be returned:
#
# - If suspend to disk is not supported, Unsupported
#
# Notes: It's strongly recommended to issue the guest-sync command before
#        sending commands when the guest resumes
#
# Since: 1.1
##
{ 'command': 'guest-suspend-disk', 'success-response': false }

##
# @guest-suspend-ram:
#
# Suspend guest to ram.
#
# This command attempts to suspend the guest using three strategies, in this
# order:
#
# - systemd suspend
# - pm-utils (via pm-suspend)
# - manual write into sysfs
#
# IMPORTANT: guest-suspend-ram requires working wakeup support in
# QEMU. You should check QMP command query-current-machine returns
# wakeup-suspend-support: true before issuing this command. Failure in
# doing so can result in a suspended guest that QEMU will not be able to
# awaken, forcing the user to power cycle the guest to bring it back.
#
# This command does NOT return a response on success. There are two options
# to check for success:
#
# 1. Wait for the SUSPEND QMP event from QEMU
# 2. Issue the query-status QMP command to confirm the VM status is
#    "suspended"
#
# The following errors may be returned:
#
# - If suspend to ram is not supported, Unsupported
#
# Notes: It's strongly recommended to issue the guest-sync command before
#        sending commands when the guest resumes
#
# Since: 1.1
##
{ 'command': 'guest-suspend-ram', 'success-response': false }

##
# @guest-suspend-hybrid:
#
# Save guest state to disk and suspend to ram.
#
# This command attempts to suspend the guest by executing, in this order:
#
# - systemd hybrid-sleep
# - pm-utils (via pm-suspend-hybrid)
#
# IMPORTANT: guest-suspend-hybrid requires working wakeup support in
# QEMU. You should check QMP command query-current-machine returns
# wakeup-suspend-support: true before issuing this command. Failure in
# doing so can result in a suspended guest that QEMU will not be able to
# awaken, forcing the user to power cycle the guest to bring it back.
#
# This command does NOT return a response on success. There are two options
# to check for success:
#
# 1. Wait for the SUSPEND QMP event from QEMU
# 2. Issue the query-status QMP command to confirm the VM status is
#    "suspended"
#
# The following errors may be returned:
#
# - If hybrid suspend is not supported, Unsupported
#
# Notes: It's strongly recommended to issue the guest-sync command before
#        sending commands when the guest resumes
#
# Since: 1.1
##
{ 'command': 'guest-suspend-hybrid', 'success-response': false }

##
# @GuestIpAddressType:
#
# An enumeration of supported IP address types
#
# @ipv4: IP version 4
#
# @ipv6: IP version 6
#
# Since: 1.1
##
{ 'enum': 'GuestIpAddressType',
  'data': [ 'ipv4', 'ipv6' ] }

##
# @GuestIpAddress:
#
# @ip-address: IP address
#
# @ip-address-type: Type of @ip-address (e.g. ipv4, ipv6)
#
# @prefix: Network prefix length of @ip-address
#
# Since: 1.1
##
{ 'struct': 'GuestIpAddress',
  'data': {'ip-address': 'str',
           'ip-address-type': 'GuestIpAddressType',
           'prefix': 'int'} }

##
# @GuestNetworkInterfaceStat:
#
# @rx-bytes: total bytes received
#
# @rx-packets: total packets received
#
# @rx-errs: bad packets received
#
# @rx-dropped: receiver dropped packets
#
# @tx-bytes: total bytes transmitted
#
# @tx-packets: total packets transmitted
#
# @tx-errs: packet transmit problems
#
# @tx-dropped: dropped packets transmitted
#
# Since: 2.11
##
{ 'struct': 'GuestNetworkInterfaceStat',
  'data': {'rx-bytes': 'uint64',
            'rx-packets': 'uint64',
            'rx-errs': 'uint64',
            'rx-dropped': 'uint64',
            'tx-bytes': 'uint64',
            'tx-packets': 'uint64',
            'tx-errs': 'uint64',
            'tx-dropped': 'uint64'
           } }

##
# @GuestNetworkInterface:
#
# @name: The name of interface for which info are being delivered
#
# @hardware-address: Hardware address of @name
#
# @ip-addresses: List of addresses assigned to @name
#
# @statistics: various statistic counters related to @name
#              (since 2.11)
#
# Since: 1.1
##
{ 'struct': 'GuestNetworkInterface',
  'data': {'name': 'str',
           '*hardware-address': 'str',
           '*ip-addresses': ['GuestIpAddress'],
           '*statistics': 'GuestNetworkInterfaceStat' } }

##
# @guest-network-get-interfaces:
#
# Get list of guest IP addresses, MAC addresses
# and netmasks.
#
# Returns: List of GuestNetworkInfo on success.
#
# Since: 1.1
##
{ 'command': 'guest-network-get-interfaces',
  'returns': ['GuestNetworkInterface'] }

##
# @GuestLogicalProcessor:
#
# @logical-id: Arbitrary guest-specific unique identifier of the VCPU.
#
# @online: Whether the VCPU is enabled.
#
# @can-offline: Whether offlining the VCPU is possible. This member
#               is always filled in by the guest agent when the structure is
#               returned, and always ignored on input (hence it can be omitted
#               then).
#
# Since: 1.5
##
{ 'struct': 'GuestLogicalProcessor',
  'data': {'logical-id': 'int',
           'online': 'bool',
           '*can-offline': 'bool'} }

##
# @guest-get-vcpus:
#
# Retrieve the list of the guest's logical processors.
#
# This is a read-only operation.
#
# Returns: The list of all VCPUs the guest knows about. Each VCPU is put on the
#          list exactly once, but their order is unspecified.
#
# Since: 1.5
##
{ 'command': 'guest-get-vcpus',
  'returns': ['GuestLogicalProcessor'] }

##
# @guest-set-vcpus:
#
# Attempt to reconfigure (currently: enable/disable) logical processors inside
# the guest.
#
# The input list is processed node by node in order. In each node @logical-id
# is used to look up the guest VCPU, for which @online specifies the requested
# state. The set of distinct @logical-id's is only required to be a subset of
# the guest-supported identifiers. There's no restriction on list length or on
# repeating the same @logical-id (with possibly different @online field).
# Preferably the input list should describe a modified subset of
# @guest-get-vcpus' return value.
#
# Returns: The length of the initial sublist that has been successfully
#          processed. The guest agent maximizes this value. Possible cases:
#
#          - 0:
#            if the @vcpus list was empty on input. Guest state
#            has not been changed. Otherwise,
#          - Error:
#            processing the first node of @vcpus failed for the
#            reason returned. Guest state has not been changed.
#            Otherwise,
#          - < length(@vcpus):
#            more than zero initial nodes have been processed,
#            but not the entire @vcpus list. Guest state has
#            changed accordingly. To retrieve the error
#            (assuming it persists), repeat the call with the
#            successfully processed initial sublist removed.
#            Otherwise,
#          - length(@vcpus):
#            call successful.
#
# Since: 1.5
##
{ 'command': 'guest-set-vcpus',
  'data':    {'vcpus': ['GuestLogicalProcessor'] },
  'returns': 'int' }

##
# @GuestDiskBusType:
#
# An enumeration of bus type of disks
#
# @ide: IDE disks
# @fdc: floppy disks
# @scsi: SCSI disks
# @virtio: virtio disks
# @xen: Xen disks
# @usb: USB disks
# @uml: UML disks
# @sata: SATA disks
# @sd: SD cards
# @unknown: Unknown bus type
# @ieee1394: Win IEEE 1394 bus type
# @ssa: Win SSA bus type
# @fibre: Win fiber channel bus type
# @raid: Win RAID bus type
# @iscsi: Win iScsi bus type
# @sas: Win serial-attaches SCSI bus type
# @mmc: Win multimedia card (MMC) bus type
# @virtual: Win virtual bus type
# @file-backed-virtual: Win file-backed bus type
# @nvme: NVMe disks (since 7.1)
#
# Since: 2.2; 'Unknown' and all entries below since 2.4
##
{ 'enum': 'GuestDiskBusType',
  'data': [ 'ide', 'fdc', 'scsi', 'virtio', 'xen', 'usb', 'uml', 'sata',
            'sd', 'unknown', 'ieee1394', 'ssa', 'fibre', 'raid', 'iscsi',
            'sas', 'mmc', 'virtual', 'file-backed-virtual', 'nvme' ] }


##
# @GuestPCIAddress:
#
# @domain: domain id
# @bus: bus id
# @slot: slot id
# @function: function id
#
# Since: 2.2
##
{ 'struct': 'GuestPCIAddress',
  'data': {'domain': 'int', 'bus': 'int',
           'slot': 'int', 'function': 'int'} }

##
# @GuestCCWAddress:
#
# @cssid: channel subsystem image id
# @ssid: subchannel set id
# @subchno: subchannel number
# @devno: device number
#
# Since: 6.0
##
{ 'struct': 'GuestCCWAddress',
  'data': {'cssid': 'int',
           'ssid': 'int',
           'subchno': 'int',
           'devno': 'int'} }

##
# @GuestDiskAddress:
#
# @pci-controller: controller's PCI address (fields are set to -1 if invalid)
# @bus-type: bus type
# @bus: bus id
# @target: target id
# @unit: unit id
# @serial: serial number (since: 3.1)
# @dev: device node (POSIX) or device UNC (Windows) (since: 3.1)
# @ccw-address: CCW address on s390x (since: 6.0)
#
# Since: 2.2
##
{ 'struct': 'GuestDiskAddress',
  'data': {'pci-controller': 'GuestPCIAddress',
           'bus-type': 'GuestDiskBusType',
           'bus': 'int', 'target': 'int', 'unit': 'int',
           '*serial': 'str', '*dev': 'str',
           '*ccw-address': 'GuestCCWAddress'} }

##
# @GuestNVMeSmart:
#
# NVMe smart informations, based on NVMe specification,
# section <SMART / Health Information (Log Identifier 02h)>
#
# Since: 7.1
##
{ 'struct': 'GuestNVMeSmart',
  'data': {'critical-warning': 'int',
           'temperature': 'int',
           'available-spare': 'int',
           'available-spare-threshold': 'int',
           'percentage-used': 'int',
           'data-units-read-lo': 'uint64',
           'data-units-read-hi': 'uint64',
           'data-units-written-lo': 'uint64',
           'data-units-written-hi': 'uint64',
           'host-read-commands-lo': 'uint64',
           'host-read-commands-hi': 'uint64',
           'host-write-commands-lo': 'uint64',
           'host-write-commands-hi': 'uint64',
           'controller-busy-time-lo': 'uint64',
           'controller-busy-time-hi': 'uint64',
           'power-cycles-lo': 'uint64',
           'power-cycles-hi': 'uint64',
           'power-on-hours-lo': 'uint64',
           'power-on-hours-hi': 'uint64',
           'unsafe-shutdowns-lo': 'uint64',
           'unsafe-shutdowns-hi': 'uint64',
           'media-errors-lo': 'uint64',
           'media-errors-hi': 'uint64',
           'number-of-error-log-entries-lo': 'uint64',
           'number-of-error-log-entries-hi': 'uint64' } }

##
# @GuestDiskSmart:
#
# Disk type related smart information.
#
# - @nvme: NVMe disk smart
#
# Since: 7.1
##
{ 'union': 'GuestDiskSmart',
  'base': { 'type': 'GuestDiskBusType' },
  'discriminator': 'type',
  'data': { 'nvme': 'GuestNVMeSmart' } }

##
# @GuestDiskInfo:
#
# @name: device node (Linux) or device UNC (Windows)
# @partition: whether this is a partition or disk
# @dependencies: list of device dependencies; e.g. for LVs of the LVM this will
#                hold the list of PVs, for LUKS encrypted volume this will
#                contain the disk where the volume is placed.     (Linux)
# @address: disk address information (only for non-virtual devices)
# @alias: optional alias assigned to the disk, on Linux this is a name assigned
#         by device mapper
# @smart: disk smart information (Since 7.1)
#
# Since: 5.2
##
{ 'struct': 'GuestDiskInfo',
  'data': {'name': 'str', 'partition': 'bool', '*dependencies': ['str'],
           '*address': 'GuestDiskAddress', '*alias': 'str',
           '*smart': 'GuestDiskSmart'} }

##
# @guest-get-disks:
#
# Returns: The list of disks in the guest. For Windows these are only the
#          physical disks. On Linux these are all root block devices of
#          non-zero size including e.g. removable devices, loop devices,
#          NBD, etc.
#
# Since: 5.2
##
{ 'command': 'guest-get-disks',
  'returns': ['GuestDiskInfo'] }

##
# @GuestFilesystemInfo:
#
# @name: disk name
# @mountpoint: mount point path
# @type: file system type string
# @used-bytes: file system used bytes (since 3.0)
# @total-bytes: non-root file system total bytes (since 3.0)
# @disk: an array of disk hardware information that the volume lies on,
#        which may be empty if the disk type is not supported
#
# Since: 2.2
##
{ 'struct': 'GuestFilesystemInfo',
  'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str',
           '*used-bytes': 'uint64', '*total-bytes': 'uint64',
           'disk': ['GuestDiskAddress']} }

##
# @guest-get-fsinfo:
#
# Returns: The list of filesystems information mounted in the guest.
#          The returned mountpoints may be specified to
#          @guest-fsfreeze-freeze-list.
#          Network filesystems (such as CIFS and NFS) are not listed.
#
# Since: 2.2
##
{ 'command': 'guest-get-fsinfo',
  'returns': ['GuestFilesystemInfo'] }

##
# @guest-set-user-password:
#
# @username: the user account whose password to change
# @password: the new password entry string, base64 encoded
# @crypted: true if password is already crypt()d, false if raw
#
# If the @crypted flag is true, it is the caller's responsibility
# to ensure the correct crypt() encryption scheme is used. This
# command does not attempt to interpret or report on the encryption
# scheme. Refer to the documentation of the guest operating system
# in question to determine what is supported.
#
# Not all guest operating systems will support use of the
# @crypted flag, as they may require the clear-text password
#
# The @password parameter must always be base64 encoded before
# transmission, even if already crypt()d, to ensure it is 8-bit
# safe when passed as JSON.
#
# Returns: Nothing on success.
#
# Since: 2.3
##
{ 'command': 'guest-set-user-password',
  'data': { 'username': 'str', 'password': 'str', 'crypted': 'bool' } }

##
# @GuestMemoryBlock:
#
# @phys-index: Arbitrary guest-specific unique identifier of the MEMORY BLOCK.
#
# @online: Whether the MEMORY BLOCK is enabled in guest.
#
# @can-offline: Whether offlining the MEMORY BLOCK is possible.
#               This member is always filled in by the guest agent when the
#               structure is returned, and always ignored on input (hence it
#               can be omitted then).
#
# Since: 2.3
##
{ 'struct': 'GuestMemoryBlock',
  'data': {'phys-index': 'uint64',
           'online': 'bool',
           '*can-offline': 'bool'} }

##
# @guest-get-memory-blocks:
#
# Retrieve the list of the guest's memory blocks.
#
# This is a read-only operation.
#
# Returns: The list of all memory blocks the guest knows about.
#          Each memory block is put on the list exactly once, but their order
#          is unspecified.
#
# Since: 2.3
##
{ 'command': 'guest-get-memory-blocks',
  'returns': ['GuestMemoryBlock'] }

##
# @GuestMemoryBlockResponseType:
#
# An enumeration of memory block operation result.
#
# @success: the operation of online/offline memory block is successful.
# @not-found: can't find the corresponding memoryXXX directory in sysfs.
# @operation-not-supported: for some old kernels, it does not support
#                           online or offline memory block.
# @operation-failed: the operation of online/offline memory block fails,
#                    because of some errors happen.
#
# Since: 2.3
##
{ 'enum': 'GuestMemoryBlockResponseType',
  'data': ['success', 'not-found', 'operation-not-supported',
           'operation-failed'] }

##
# @GuestMemoryBlockResponse:
#
# @phys-index: same with the 'phys-index' member of @GuestMemoryBlock.
#
# @response: the result of memory block operation.
#
# @error-code: the error number.
#              When memory block operation fails, we assign the value of
#              'errno' to this member, it indicates what goes wrong.
#              When the operation succeeds, it will be omitted.
#
# Since: 2.3
##
{ 'struct': 'GuestMemoryBlockResponse',
  'data': { 'phys-index': 'uint64',
            'response': 'GuestMemoryBlockResponseType',
            '*error-code': 'int' }}

##
# @guest-set-memory-blocks:
#
# Attempt to reconfigure (currently: enable/disable) state of memory blocks
# inside the guest.
#
# The input list is processed node by node in order. In each node @phys-index
# is used to look up the guest MEMORY BLOCK, for which @online specifies the
# requested state. The set of distinct @phys-index's is only required to be a
# subset of the guest-supported identifiers. There's no restriction on list
# length or on repeating the same @phys-index (with possibly different @online
# field).
# Preferably the input list should describe a modified subset of
# @guest-get-memory-blocks' return value.
#
# Returns: The operation results, it is a list of @GuestMemoryBlockResponse,
#          which is corresponding to the input list.
#
#          Note: it will return NULL if the @mem-blks list was empty on input,
#          or there is an error, and in this case, guest state will not be
#          changed.
#
# Since: 2.3
##
{ 'command': 'guest-set-memory-blocks',
  'data':    {'mem-blks': ['GuestMemoryBlock'] },
  'returns': ['GuestMemoryBlockResponse'] }

##
# @GuestMemoryBlockInfo:
#
# @size: the size (in bytes) of the guest memory blocks,
#        which are the minimal units of memory block online/offline
#        operations (also called Logical Memory Hotplug).
#
# Since: 2.3
##
{ 'struct': 'GuestMemoryBlockInfo',
  'data': {'size': 'uint64'} }

##
# @guest-get-memory-block-info:
#
# Get information relating to guest memory blocks.
#
# Returns: @GuestMemoryBlockInfo
#
# Since: 2.3
##
{ 'command': 'guest-get-memory-block-info',
  'returns': 'GuestMemoryBlockInfo' }

##
# @GuestExecStatus:
#
# @exited: true if process has already terminated.
# @exitcode: process exit code if it was normally terminated.
# @signal: signal number (linux) or unhandled exception code
#          (windows) if the process was abnormally terminated.
# @out-data: base64-encoded stdout of the process
# @err-data: base64-encoded stderr of the process
#            Note: @out-data and @err-data are present only
#            if 'capture-output' was specified for 'guest-exec'
# @out-truncated: true if stdout was not fully captured
#                 due to size limitation.
# @err-truncated: true if stderr was not fully captured
#                 due to size limitation.
#
# Since: 2.5
##
{ 'struct': 'GuestExecStatus',
  'data': { 'exited': 'bool', '*exitcode': 'int', '*signal': 'int',
            '*out-data': 'str', '*err-data': 'str',
            '*out-truncated': 'bool', '*err-truncated': 'bool' }}
##
# @guest-exec-status:
#
# Check status of process associated with PID retrieved via guest-exec.
# Reap the process and associated metadata if it has exited.
#
# @pid: pid returned from guest-exec
#
# Returns: GuestExecStatus on success.
#
# Since: 2.5
##
{ 'command': 'guest-exec-status',
  'data':    { 'pid': 'int' },
  'returns': 'GuestExecStatus' }

##
# @GuestExec:
#
# @pid: pid of child process in guest OS
#
# Since: 2.5
##
{ 'struct': 'GuestExec',
  'data': { 'pid': 'int'} }

##
# @guest-exec:
#
# Execute a command in the guest
#
# @path: path or executable name to execute
# @arg: argument list to pass to executable
# @env: environment variables to pass to executable
# @input-data: data to be passed to process stdin (base64 encoded)
# @capture-output: bool flag to enable capture of
#                  stdout/stderr of running process. defaults to false.
#
# Returns: PID on success.
#
# Since: 2.5
##
{ 'command': 'guest-exec',
  'data':    { 'path': 'str', '*arg': ['str'], '*env': ['str'],
               '*input-data': 'str', '*capture-output': 'bool' },
  'returns': 'GuestExec' }


##
# @GuestHostName:
#
# @host-name: Fully qualified domain name of the guest OS
#
# Since: 2.10
##
{ 'struct': 'GuestHostName',
  'data':   { 'host-name': 'str' } }

##
# @guest-get-host-name:
#
# Return a name for the machine.
#
# The returned name is not necessarily a fully-qualified domain name, or even
# present in DNS or some other name service at all. It need not even be unique
# on your local network or site, but usually it is.
#
# Returns: the host name of the machine on success
#
# Since: 2.10
##
{ 'command': 'guest-get-host-name',
  'returns': 'GuestHostName' }


##
# @GuestUser:
#
# @user: Username
# @domain: Logon domain (windows only)
# @login-time: Time of login of this user on the computer. If multiple
#              instances of the user are logged in, the earliest login time is
#              reported. The value is in fractional seconds since epoch time.
#
# Since: 2.10
##
{ 'struct': 'GuestUser',
  'data': { 'user': 'str', 'login-time': 'number', '*domain': 'str' } }

##
# @guest-get-users:
# Retrieves a list of currently active users on the VM.
#
# Returns: A unique list of users.
#
# Since: 2.10
##
{ 'command': 'guest-get-users',
  'returns': ['GuestUser'] }

##
# @GuestTimezone:
#
# @zone: Timezone name. These values may differ depending on guest/OS and
#        should only be used for informational purposes.
# @offset: Offset to UTC in seconds, negative numbers for time zones west of
#          GMT, positive numbers for east
#
# Since: 2.10
##
{ 'struct': 'GuestTimezone',
  'data':   { '*zone': 'str', 'offset': 'int' } }

##
# @guest-get-timezone:
#
# Retrieves the timezone information from the guest.
#
# Returns: A GuestTimezone dictionary.
#
# Since: 2.10
##
{ 'command': 'guest-get-timezone',
  'returns': 'GuestTimezone' }

##
# @GuestOSInfo:
#
# @kernel-release:
# * POSIX: release field returned by uname(2)
# * Windows: build number of the OS
# @kernel-version:
# * POSIX: version field returned by uname(2)
# * Windows: version number of the OS
# @machine:
# * POSIX: machine field returned by uname(2)
# * Windows: one of x86, x86_64, arm, ia64
# @id:
# * POSIX: as defined by os-release(5)
# * Windows: contains string "mswindows"
# @name:
# * POSIX: as defined by os-release(5)
# * Windows: contains string "Microsoft Windows"
# @pretty-name:
# * POSIX: as defined by os-release(5)
# * Windows: product name, e.g. "Microsoft Windows 10 Enterprise"
# @version:
# * POSIX: as defined by os-release(5)
# * Windows: long version string, e.g. "Microsoft Windows Server 2008"
# @version-id:
# * POSIX: as defined by os-release(5)
# * Windows: short version identifier, e.g. "7" or "20012r2"
# @variant:
# * POSIX: as defined by os-release(5)
# * Windows: contains string "server" or "client"
# @variant-id:
# * POSIX: as defined by os-release(5)
# * Windows: contains string "server" or "client"
#
# Notes:
#
# On POSIX systems the fields @id, @name, @pretty-name, @version, @version-id,
# @variant and @variant-id follow the definition specified in os-release(5).
# Refer to the manual page for exact description of the fields. Their values
# are taken from the os-release file. If the file is not present in the system,
# or the values are not present in the file, the fields are not included.
#
# On Windows the values are filled from information gathered from the system.
#
# Since: 2.10
##
{ 'struct': 'GuestOSInfo',
  'data': {
      '*kernel-release': 'str', '*kernel-version': 'str',
      '*machine': 'str', '*id': 'str', '*name': 'str',
      '*pretty-name': 'str', '*version': 'str', '*version-id': 'str',
      '*variant': 'str', '*variant-id': 'str' } }

##
# @guest-get-osinfo:
#
# Retrieve guest operating system information
#
# Returns: @GuestOSInfo
#
# Since: 2.10
##
{ 'command': 'guest-get-osinfo',
  'returns': 'GuestOSInfo' }

##
# @GuestDeviceType:
##
{ 'enum': 'GuestDeviceType',
  'data': [ 'pci' ] }

##
# @GuestDeviceIdPCI:
#
# @vendor-id: vendor ID
# @device-id: device ID
#
# Since: 5.2
##
{ 'struct': 'GuestDeviceIdPCI',
  'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' } }

##
# @GuestDeviceId:
#
# Id of the device
# - @pci: PCI ID, since: 5.2
#
# Since: 5.2
##
{ 'union': 'GuestDeviceId',
  'base': { 'type': 'GuestDeviceType' },
  'discriminator': 'type',
  'data': { 'pci': 'GuestDeviceIdPCI' } }

##
# @GuestDeviceInfo:
#
# @driver-name: name of the associated driver
# @driver-date: driver release date, in nanoseconds since the epoch
# @driver-version: driver version
# @id: device ID
#
# Since: 5.2
##
{ 'struct': 'GuestDeviceInfo',
  'data': {
      'driver-name': 'str',
      '*driver-date': 'int',
      '*driver-version': 'str',
      '*id': 'GuestDeviceId'
  } }

##
# @guest-get-devices:
#
# Retrieve information about device drivers in Windows guest
#
# Returns: @GuestDeviceInfo
#
# Since: 5.2
##
{ 'command': 'guest-get-devices',
  'returns': ['GuestDeviceInfo'] }

##
# @GuestAuthorizedKeys:
#
# @keys: public keys (in OpenSSH/sshd(8) authorized_keys format)
#
# Since: 5.2
##
{ 'struct': 'GuestAuthorizedKeys',
  'data': {
      'keys': ['str']
  },
  'if': 'CONFIG_POSIX' }


##
# @guest-ssh-get-authorized-keys:
#
# @username: the user account to add the authorized keys
#
# Return the public keys from user .ssh/authorized_keys on Unix systems (not
# implemented for other systems).
#
# Returns: @GuestAuthorizedKeys
#
# Since: 5.2
##
{ 'command': 'guest-ssh-get-authorized-keys',
  'data': { 'username': 'str' },
  'returns': 'GuestAuthorizedKeys',
  'if': 'CONFIG_POSIX' }

##
# @guest-ssh-add-authorized-keys:
#
# @username: the user account to add the authorized keys
# @keys: the public keys to add (in OpenSSH/sshd(8) authorized_keys format)
# @reset: ignore the existing content, set it with the given keys only
#
# Append public keys to user .ssh/authorized_keys on Unix systems (not
# implemented for other systems).
#
# Returns: Nothing on success.
#
# Since: 5.2
##
{ 'command': 'guest-ssh-add-authorized-keys',
  'data': { 'username': 'str', 'keys': ['str'], '*reset': 'bool' },
  'if': 'CONFIG_POSIX' }

##
# @guest-ssh-remove-authorized-keys:
#
# @username: the user account to remove the authorized keys
# @keys: the public keys to remove (in OpenSSH/sshd(8) authorized_keys format)
#
# Remove public keys from the user .ssh/authorized_keys on Unix systems (not
# implemented for other systems). It's not an error if the key is already
# missing.
#
# Returns: Nothing on success.
#
# Since: 5.2
##
{ 'command': 'guest-ssh-remove-authorized-keys',
  'data': { 'username': 'str', 'keys': ['str'] },
  'if': 'CONFIG_POSIX' }

##
# @GuestDiskStats:
#
# @read-sectors: sectors read
#
# @read-ios: reads completed successfully
#
# @read-merges: read requests merged
#
# @write-sectors: sectors written
#
# @write-ios: writes completed
#
# @write-merges: write requests merged
#
# @discard-sectors: sectors discarded
#
# @discard-ios: discards completed successfully
#
# @discard-merges: discard requests merged
#
# @flush-ios: flush requests completed successfully
#
# @read-ticks: time spent reading(ms)
#
# @write-ticks: time spent writing(ms)
#
# @discard-ticks: time spent discarding(ms)
#
# @flush-ticks: time spent flushing(ms)
#
# @ios-pgr: number of I/Os currently in flight
#
# @total-ticks: time spent doing I/Os (ms)
#
# @weight-ticks: weighted time spent doing I/Os since the last update of this field(ms)
#
# Since: 7.1
##
{ 'struct': 'GuestDiskStats',
  'data': {'*read-sectors': 'uint64',
           '*read-ios': 'uint64',
           '*read-merges': 'uint64',
           '*write-sectors': 'uint64',
           '*write-ios': 'uint64',
           '*write-merges': 'uint64',
           '*discard-sectors': 'uint64',
           '*discard-ios': 'uint64',
           '*discard-merges': 'uint64',
           '*flush-ios': 'uint64',
           '*read-ticks': 'uint64',
           '*write-ticks': 'uint64',
           '*discard-ticks': 'uint64',
           '*flush-ticks': 'uint64',
           '*ios-pgr': 'uint64',
           '*total-ticks': 'uint64',
           '*weight-ticks': 'uint64'
           } }

##
# @GuestDiskStatsInfo:
#
# @name disk name
#
# @major major device number of disk
#
# @minor minor device number of disk
##
{ 'struct': 'GuestDiskStatsInfo',
  'data': {'name': 'str',
           'major': 'uint64',
           'minor': 'uint64',
           'stats': 'GuestDiskStats' } }

##
# @guest-get-diskstats:
#
# Retrieve information about disk stats.
# Returns: List of disk stats of guest.
#
# Since: 7.1
##
{ 'command': 'guest-get-diskstats',
  'returns': ['GuestDiskStatsInfo']
}

##
# @GuestCpuStatsType:
#
# An enumeration of OS type
#
# Since: 7.1
##
{ 'enum': 'GuestCpuStatsType',
  'data': [ 'linux' ] }


##
# @GuestLinuxCpuStats:
#
# CPU statistics of Linux
#
# @cpu: CPU index in guest OS
#
# @user: Time spent in user mode
#
# @nice: Time spent in user mode with low priority (nice)
#
# @system: Time spent in system mode
#
# @idle: Time spent in the idle task
#
# @iowait: Time waiting for I/O to complete (since Linux 2.5.41)
#
# @irq: Time servicing interrupts (since Linux 2.6.0-test4)
#
# @softirq: Time servicing softirqs (since Linux 2.6.0-test4)
#
# @steal: Stolen time by host (since Linux 2.6.11)
#
# @guest: ime spent running a virtual CPU for guest operating systems under
#         the  control of the Linux kernel (since Linux 2.6.24)
#
# @guestnice: Time spent running a niced guest (since Linux 2.6.33)
#
# Since: 7.1
##
{ 'struct': 'GuestLinuxCpuStats',
  'data': {'cpu': 'int',
           'user': 'uint64',
           'nice': 'uint64',
           'system': 'uint64',
           'idle': 'uint64',
           '*iowait': 'uint64',
           '*irq': 'uint64',
           '*softirq': 'uint64',
           '*steal': 'uint64',
           '*guest': 'uint64',
           '*guestnice': 'uint64'
           } }

##
# @GuestCpuStats:
#
# Get statistics of each CPU in millisecond.
#
# - @linux: Linux style CPU statistics
#
# Since: 7.1
##
{ 'union': 'GuestCpuStats',
  'base': { 'type': 'GuestCpuStatsType' },
  'discriminator': 'type',
  'data': { 'linux': 'GuestLinuxCpuStats' } }

##
# @guest-get-cpustats:
#
# Retrieve information about CPU stats.
# Returns: List of CPU stats of guest.
#
# Since: 7.1
##
{ 'command': 'guest-get-cpustats',
  'returns': ['GuestCpuStats']
}
