773 lines
25 KiB
V
773 lines
25 KiB
V
// This file is part of qga.
|
|
//
|
|
// qga is free software: you can redistribute it and/or modify it under
|
|
// the terms of the GNU Lesser General Public License as published by the
|
|
// Free Software Foundation, either version 3 of the License, or (at your
|
|
// option) any later version.
|
|
//
|
|
// qga is distributed in the hope that it will be useful, but WITHOUT
|
|
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
|
// License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
// along with qga. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
module qga
|
|
|
|
import encoding.base64
|
|
|
|
// Empty is used for guest-ping and other commands with no arguments or no return.
|
|
struct Empty {}
|
|
|
|
struct GuestExec {
|
|
pid int
|
|
}
|
|
|
|
struct GuestExecRequest {
|
|
mut:
|
|
path string
|
|
arg ?[]string
|
|
env ?[]string
|
|
input_data ?string @[json: 'input-data']
|
|
capture_output ?bool @[json: 'capture-output']
|
|
}
|
|
|
|
@[params]
|
|
pub struct GuestExecParams {
|
|
pub:
|
|
args ?[]string
|
|
env ?[]string
|
|
input_data ?string
|
|
capture_output ?bool
|
|
}
|
|
|
|
// exec executes [guest-exec](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-exec) command.
|
|
pub fn (mut c Client) exec(path string, params GuestExecParams) !int {
|
|
req := GuestExecRequest{
|
|
path: path
|
|
arg: params.args
|
|
env: params.env
|
|
input_data: params.input_data
|
|
capture_output: params.capture_output
|
|
}
|
|
res := c.execute[GuestExecRequest, GuestExec]('guest-exec', req)!
|
|
return res.return.pid
|
|
}
|
|
|
|
pub struct GuestExecStatus {
|
|
pub:
|
|
exited bool
|
|
exitcode ?int
|
|
signal ?int
|
|
out_data ?string @[json: 'out-data']
|
|
err_data ?string @[json: 'err-data']
|
|
out_truncated ?bool @[json: 'out-truncated']
|
|
err_truncated ?bool @[json: 'err-truncated']
|
|
}
|
|
|
|
struct GuestExecStatusRequest {
|
|
pid int
|
|
}
|
|
|
|
// exec_status executes [guest-exec-status](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-exec-status) command.
|
|
pub fn (mut c Client) exec_status(pid int) !GuestExecStatus {
|
|
req := GuestExecStatusRequest{pid}
|
|
return c.execute[GuestExecStatusRequest, GuestExecStatus]('guest-exec-status', req)!.return
|
|
}
|
|
|
|
struct GuestFileCloseRequest {
|
|
handle int
|
|
}
|
|
|
|
// file_close executes [guest-file-close](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-file-close) command.
|
|
pub fn (mut c Client) file_close(handle int) ! {
|
|
req := GuestFileCloseRequest{handle}
|
|
c.execute[GuestFileCloseRequest, Empty]('guest-file-close', req)!
|
|
}
|
|
|
|
struct GuestFileFlushRequest {
|
|
handle int
|
|
}
|
|
|
|
// file_flush executes [guest-file-flush](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-file-flush) command.
|
|
pub fn (mut c Client) file_flush(handle int) ! {
|
|
req := GuestFileFlushRequest{handle}
|
|
c.execute[GuestFileFlushRequest, Empty]('guest-file-flush', req)!
|
|
}
|
|
|
|
struct GuestFileOpenRequest {
|
|
path string
|
|
mode string
|
|
}
|
|
|
|
// file_open executes [guest-file-open](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-file-open) command.
|
|
pub fn (mut c Client) file_open(path string, mode string) !int {
|
|
req := GuestFileOpenRequest{path, mode}
|
|
return c.execute[GuestFileOpenRequest, int]('guest-file-open', req)!.return
|
|
}
|
|
|
|
struct GuestFileReadRequest {
|
|
handle int
|
|
count int
|
|
}
|
|
|
|
pub struct GuestFileRead {
|
|
pub:
|
|
count int
|
|
buf_b64 string @[json: 'buf-b64']
|
|
eof bool
|
|
}
|
|
|
|
// file_read executes [guest-file-read](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-file-read) command.
|
|
pub fn (mut c Client) file_read(handle int, count int) !GuestFileRead {
|
|
req := GuestFileReadRequest{handle, count}
|
|
return c.execute[GuestFileReadRequest, GuestFileRead]('guest-file-read', req)!.return
|
|
}
|
|
|
|
struct GuestFileSeekRequest {
|
|
handle int
|
|
offset int
|
|
whence GuestAgentWhence
|
|
}
|
|
|
|
pub struct GuestFileSeek {
|
|
pub:
|
|
position int
|
|
eof bool
|
|
}
|
|
|
|
pub struct GuestAgentWhence {
|
|
pub:
|
|
value int
|
|
name QGASeek
|
|
}
|
|
|
|
pub enum QGASeek {
|
|
set
|
|
cur
|
|
end
|
|
}
|
|
|
|
// file_seek executes [guest-file-seek](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-file-seek) command.
|
|
pub fn (mut c Client) file_seek(handle int, offset int, whence GuestAgentWhence) !GuestFileSeek {
|
|
req := GuestFileSeekRequest{handle, offset, whence}
|
|
return c.execute[GuestFileSeekRequest, GuestFileSeek]('guest-file-seek', req)!.return
|
|
}
|
|
|
|
struct GuestFileWriteRequest {
|
|
mut:
|
|
handle int
|
|
buf_b64 string
|
|
count int
|
|
}
|
|
|
|
pub struct GuestFileWrite {
|
|
pub:
|
|
count int
|
|
eof bool
|
|
}
|
|
|
|
@[params]
|
|
pub struct GuestFileWriteParams {
|
|
pub:
|
|
is_encoded bool
|
|
count ?int
|
|
}
|
|
|
|
// file_write executes [guest-file-write](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-file-write) command.
|
|
pub fn (mut c Client) file_write(handle int, buf string, params GuestFileWriteParams) !GuestFileWrite {
|
|
mut req := GuestFileWriteRequest{
|
|
handle: handle
|
|
}
|
|
if params.is_encoded {
|
|
req.buf_b64 = buf
|
|
} else {
|
|
req.buf_b64 = base64.encode_str(buf)
|
|
}
|
|
if params.count == none {
|
|
req.count = req.buf_b64.len
|
|
} else {
|
|
req.count = params.count
|
|
}
|
|
return c.execute[GuestFileWriteRequest, GuestFileWrite]('guest-file-write', req)!.return
|
|
}
|
|
|
|
// fsfreeze_freeze executes [guest-fsfreeze-freeze](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-fsfreeze-freeze) command.
|
|
pub fn (mut c Client) fsfreeze_freeze() !int {
|
|
return c.execute[Empty, int]('guest-fsfreeze-freeze', none)!.return
|
|
}
|
|
|
|
struct GuestFsfreezeFsfreezeList {
|
|
mut:
|
|
mountpoints ?[]string
|
|
}
|
|
|
|
// fsfreeze_freeze_list executes [guest-fsfreeze-freeze-list](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-fsfreeze-freeze-list) command.
|
|
// An empty `mountpoints` array will freeze all filesystems.
|
|
pub fn (mut c Client) fsfreeze_freeze_list(mountpoints []string) !int {
|
|
mut req := GuestFsfreezeFsfreezeList{}
|
|
if mountpoints.len > 0 {
|
|
req.mountpoints = mountpoints
|
|
}
|
|
return c.execute[GuestFsfreezeFsfreezeList, int]('guest-fsfreeze-freeze-list', req)!.return
|
|
}
|
|
|
|
pub enum GuestFsfreezeStatus {
|
|
thawed
|
|
frozen
|
|
}
|
|
|
|
// fsfreeze_status executes [guest-fsfreeze-status](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-fsfreeze-status) command.
|
|
pub fn (mut c Client) fsfreeze_status() !GuestFsfreezeStatus {
|
|
return c.execute[Empty, GuestFsfreezeStatus]('guest-fsfreeze-status', none)!.return
|
|
}
|
|
|
|
// fsfreeze_thaw executes [guest-fsfreeze-thaw](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-fsfreeze-thaw) command.
|
|
pub fn (mut c Client) fsfreeze_thaw() !int {
|
|
return c.execute[Empty, int]('guest-fsfreeze-thaw', none)!.return
|
|
}
|
|
|
|
struct GuestFilesystemTrimRequest {
|
|
minimun u64
|
|
}
|
|
|
|
pub struct GuestFilesystemTrimResponse {
|
|
pub:
|
|
paths []GuestFilesystemTrimResult
|
|
}
|
|
|
|
pub struct GuestFilesystemTrimResult {
|
|
path string
|
|
error ?string
|
|
trimmed ?u64
|
|
minimum ?u64
|
|
}
|
|
|
|
// fstrim executes [guest-fstrim](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-fstrim) command.
|
|
// Set `minimum` to zero to discard every free block.
|
|
pub fn (mut c Client) fstrim(minimum u64) !GuestFilesystemTrimResponse {
|
|
req := GuestFilesystemTrimRequest{minimum}
|
|
return c.execute[GuestFilesystemTrimRequest, GuestFilesystemTrimResponse]('guest-fstrim',
|
|
req)!.return
|
|
}
|
|
|
|
pub struct GuestCpuStats {
|
|
GuestLinuxCpuStats
|
|
pub:
|
|
type GuestCpuStatsType
|
|
}
|
|
|
|
pub enum GuestCpuStatsType {
|
|
linux
|
|
}
|
|
|
|
pub struct GuestLinuxCpuStats {
|
|
pub:
|
|
cpu int
|
|
user int
|
|
nice int
|
|
system int
|
|
idle int
|
|
iowait ?int
|
|
irq ?int
|
|
sofirq ?int
|
|
steal ?int
|
|
guest ?int
|
|
guestnice ?int
|
|
}
|
|
|
|
// get_cpustats executes [guest-get-cpustats](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-cpustats) command.
|
|
pub fn (mut c Client) get_cpustats() ![]GuestCpuStats {
|
|
return c.execute[Empty, []GuestCpuStats]('guest-get-cpustats', none)!.return
|
|
}
|
|
|
|
pub struct GuestDeviceInfo {
|
|
driver_name string @[json: 'driver-name']
|
|
driver_data ?string @[json: 'driver-data']
|
|
driver_version ?string @[json: 'driver-version']
|
|
id ?GuestDeviceId
|
|
}
|
|
|
|
pub struct GuestDeviceId {
|
|
pub:
|
|
type GuestDeviceType
|
|
vendor_id int @[json: 'vendor-id']
|
|
device_id int @[json: 'device-id']
|
|
}
|
|
|
|
pub enum GuestDeviceType {
|
|
pci
|
|
}
|
|
|
|
// get_devices executes [guest-get-devices](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-devices) command.
|
|
pub fn (mut c Client) get_devices() ![]GuestDeviceInfo {
|
|
return c.execute[Empty, []GuestDeviceInfo]('guest-get-devices', none)!.return
|
|
}
|
|
|
|
pub struct GuestDiskInfo {
|
|
pub:
|
|
name string
|
|
partition bool
|
|
dependencies ?[]string
|
|
address ?GuestDiskAddress
|
|
alias ?string
|
|
smart ?GuestDiskSmart
|
|
}
|
|
|
|
pub struct GuestDiskAddress {
|
|
pub:
|
|
pci_controller GuestPCIAddress @[json: 'pci-controller']
|
|
bus_type GuestDiskBusType @[json: 'bus-type']
|
|
bus int
|
|
target int
|
|
unit int
|
|
serial ?string
|
|
dev ?string
|
|
ccw_address ?GuestCCWAddress @[json: 'ccw-address']
|
|
}
|
|
|
|
pub struct GuestPCIAddress {
|
|
pub:
|
|
domain int
|
|
bus int
|
|
slot int
|
|
function int
|
|
}
|
|
|
|
pub enum GuestDiskBusType {
|
|
ide
|
|
fdc
|
|
scsi
|
|
virtio
|
|
xen
|
|
usb
|
|
uml
|
|
sata
|
|
sd
|
|
unknown
|
|
ieee1394
|
|
ssa
|
|
fibre
|
|
raid
|
|
iscsi
|
|
sas
|
|
mmc
|
|
virtual
|
|
file_backed_virtual @[json: 'file-backed-virtual']
|
|
nvme
|
|
}
|
|
|
|
pub struct GuestCCWAddress {
|
|
pub:
|
|
cssid int
|
|
ssid int
|
|
subchno int
|
|
devno int
|
|
}
|
|
|
|
pub struct GuestDiskSmart {
|
|
pub:
|
|
critical_warning int @[json: 'critical-warning']
|
|
temperature int @[json: 'temperature']
|
|
available_spare int @[json: 'available-spare']
|
|
available_spare_threshold int @[json: 'available-spare-threshold']
|
|
percentage_used int @[json: 'percentage-used']
|
|
data_units_read_lo int @[json: 'data-units-read-lo']
|
|
data_units_read_hi int @[json: 'data-units-read-hi']
|
|
data_units_written_lo int @[json: 'data-units-written-lo']
|
|
data_units_written_hi int @[json: 'data-units-written-hi']
|
|
host_read_commands_lo int @[json: 'host-read-commands-lo']
|
|
host_read_commands_hi int @[json: 'host-read-commands-hi']
|
|
host_write_commands_lo int @[json: 'host-write-commands-lo']
|
|
host_write_commands_hi int @[json: 'host-write-commands-hi']
|
|
controller_busy_time_lo int @[json: 'controller-busy-time-lo']
|
|
controller_busy_time_hi int @[json: 'controller-busy-time-hi']
|
|
power_cycles_lo int @[json: 'power-cycles-lo']
|
|
power_cycles_hi int @[json: 'power-cycles-hi']
|
|
power_on_hours_lo int @[json: 'power-on-hours-lo']
|
|
power_on_hours_hi int @[json: 'power-on-hours-hi']
|
|
unsafe_shutdowns_lo int @[json: 'unsafe-shutdowns-lo']
|
|
unsafe_shutdowns_hi int @[json: 'unsafe-shutdowns-hi']
|
|
media_errors_lo int @[json: 'media-errors-lo']
|
|
media_errors_hi int @[json: 'media-errors-hi']
|
|
number_of_error_log_entries_lo int @[json: 'number-of-error-log-entries-lo']
|
|
number_of_error_log_entries_hi int @[json: 'number-of-error-log-entries-hi']
|
|
}
|
|
|
|
// get_disks executes [guest-get-disks](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-disks) command.
|
|
pub fn (mut c Client) get_disks() ![]GuestDiskInfo {
|
|
return c.execute[Empty, []GuestDiskInfo]('guest-get-disks', none)!.return
|
|
}
|
|
|
|
pub struct GuestDiskStatsInfo {
|
|
pub:
|
|
name string
|
|
major int
|
|
minor int
|
|
stats GuestDiskStats
|
|
}
|
|
|
|
pub struct GuestDiskStats {
|
|
read_sectors ?int @[json: 'read-sectors']
|
|
read_ios ?int @[json: 'read-ios']
|
|
read_merges ?int @[json: 'read-merges']
|
|
write_sectors ?int @[json: 'write-sectors']
|
|
write_ios ?int @[json: 'write-ios']
|
|
write_merges ?int @[json: 'write-merges']
|
|
discard_sectors ?int @[json: 'discard-sectors']
|
|
discard_ios ?int @[json: 'discard-ios']
|
|
discard_merges ?int @[json: 'discard-merges']
|
|
flush_ios ?int @[json: 'flush-ios']
|
|
read_ticks ?int @[json: 'read-ticks']
|
|
write_ticks ?int @[json: 'write-ticks']
|
|
discard_ticks ?int @[json: 'discard-ticks']
|
|
flush_ticks ?int @[json: 'flush-ticks']
|
|
ios_pgr ?int @[json: 'ios-pgr']
|
|
total_ticks ?int @[json: 'total-ticks']
|
|
weight_ticks ?int @[json: 'weight-ticks']
|
|
}
|
|
|
|
// get_diskstats executes [guest-get-diskstats](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-diskstats) command.
|
|
pub fn (mut c Client) get_diskstats() ![]GuestDiskStatsInfo {
|
|
return c.execute[Empty, []GuestDiskStatsInfo]('guest-get-diskstats', none)!.return
|
|
}
|
|
|
|
pub struct GuestFilesystemInfo {
|
|
pub:
|
|
name string
|
|
mountpoint string
|
|
type string
|
|
used_bytes ?u64 @[json: 'used-bytes']
|
|
total_bytes ?u64 @[json: 'total-bytes']
|
|
total_bytes_privileged ?u64 @[json: 'total-bytes-privileged']
|
|
disk []GuestDiskAddress
|
|
}
|
|
|
|
// get_fsinfo executes [guest-get-fsinfo](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-fsinfo) command.
|
|
pub fn (mut c Client) get_fsinfo() ![]GuestFilesystemInfo {
|
|
return c.execute[Empty, []GuestFilesystemInfo]('guest-get-fsinfo', none)!.return
|
|
}
|
|
|
|
struct GuestHostName {
|
|
host_name string @[json: 'host-name']
|
|
}
|
|
|
|
// get_host_name executes [guest-get-host-name](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-host-name) command.
|
|
pub fn (mut c Client) get_host_name() !string {
|
|
return c.execute[Empty, GuestHostName]('guest-get-host-name', none)!.return.host_name
|
|
}
|
|
|
|
pub struct GuestLoadAverage {
|
|
load1m f64
|
|
load5m f64
|
|
load15m f64
|
|
}
|
|
|
|
// get_load executes [guest-get-load](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-load) command.
|
|
pub fn (mut c Client) get_load() !GuestLoadAverage {
|
|
return c.execute[Empty, GuestLoadAverage]('guest-get-load', none)!.return
|
|
}
|
|
|
|
pub struct GuestMemoryBlockInfo {
|
|
size int
|
|
}
|
|
|
|
// get_memory_block_info executes [guest-get-memory-block-info](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-memory-block-info) command.
|
|
pub fn (mut c Client) get_memory_block_info() !GuestMemoryBlockInfo {
|
|
return c.execute[Empty, GuestMemoryBlockInfo]('guest-get-memory-block-info', none)!.return
|
|
}
|
|
|
|
pub struct GuestMemoryBlock {
|
|
pub:
|
|
phys_index int @[json: 'phys-index']
|
|
online bool
|
|
can_offline ?bool @[json: 'can-offline']
|
|
}
|
|
|
|
// get_memory_blocks executes [guest-get-memory-blocks](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-memory-blocks) command.
|
|
pub fn (mut c Client) get_memory_blocks() ![]GuestMemoryBlock {
|
|
return c.execute[Empty, []GuestMemoryBlock]('guest-get-memory-blocks', none)!.return
|
|
}
|
|
|
|
pub struct GuestOSInfo {
|
|
pub:
|
|
kernel_release ?string @[json: 'kernel-release']
|
|
kernel_version ?string @[json: 'kernel-version']
|
|
machine ?string
|
|
id ?string
|
|
name ?string
|
|
pretty_name ?string @[json: 'pretty-name']
|
|
version ?string
|
|
version_id ?string @[json: 'version-id']
|
|
variant ?string
|
|
variant_id ?string @[json: 'variant-id']
|
|
}
|
|
|
|
// get_osinfo executes [guest-get-osinfo](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-osinfo) command.
|
|
pub fn (mut c Client) get_osinfo() !GuestOSInfo {
|
|
return c.execute[Empty, GuestOSInfo]('guest-get-osinfo', none)!.return
|
|
}
|
|
|
|
// get_time executes [guest-get-time](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-time) command.
|
|
pub fn (mut c Client) get_time() !i64 {
|
|
return c.execute[Empty, i64]('guest-get-time', none)!.return
|
|
}
|
|
|
|
pub struct GuestTimezone {
|
|
zone ?string
|
|
offset int
|
|
}
|
|
|
|
// get_timezone executes [guest-get-timezone](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-timezone) command.
|
|
pub fn (mut c Client) get_timezone() !GuestTimezone {
|
|
return c.execute[Empty, GuestTimezone]('guest-get-timezone', none)!.return
|
|
}
|
|
|
|
pub struct GuestUser {
|
|
pub:
|
|
user string
|
|
domain string
|
|
login_time f64 @[json: 'login-time']
|
|
}
|
|
|
|
// get_users executes [guest-get-users](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-users) command.
|
|
pub fn (mut c Client) get_users() ![]GuestUser {
|
|
return c.execute[Empty, []GuestUser]('guest-get-users', none)!.return
|
|
}
|
|
|
|
pub struct GuestLogicalProcessor {
|
|
pub:
|
|
logical_id int @[json: 'logical-id']
|
|
online bool
|
|
can_offline ?bool @[json: 'can-offline']
|
|
}
|
|
|
|
// get_vcpus executes [guest-get-vcpus](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-get-vcpus) command.
|
|
pub fn (mut c Client) get_vcpus() ![]GuestLogicalProcessor {
|
|
return c.execute[Empty, []GuestLogicalProcessor]('guest-get-vcpus', none)!.return
|
|
}
|
|
|
|
pub struct GuestAgentInfo {
|
|
pub:
|
|
version string
|
|
supported_commands []GuestAgentCommandInfo
|
|
}
|
|
|
|
pub struct GuestAgentCommandInfo {
|
|
pub:
|
|
name string
|
|
enabled bool
|
|
success_response bool @[json: 'success-response']
|
|
}
|
|
|
|
// info executes [guest-info](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-info) command.
|
|
pub fn (mut c Client) info() !GuestAgentInfo {
|
|
return c.execute[Empty, GuestAgentInfo]('guest-info', none)!.return
|
|
}
|
|
|
|
pub struct GuestNetworkInterface {
|
|
pub:
|
|
name string
|
|
hardware_address ?string @[json: 'hardware-address']
|
|
ip_addresses ?[]GuestIpAddress @[json: 'ip-addresses']
|
|
statistics ?GuestNetworkInterfaceStat
|
|
}
|
|
|
|
pub struct GuestIpAddress {
|
|
pub:
|
|
ip_address string @[json: 'ip-address']
|
|
ip_address_type GuestIpAddressType @[json: 'ip-address-type']
|
|
prefix int
|
|
}
|
|
|
|
pub enum GuestIpAddressType {
|
|
ipv4
|
|
ipv6
|
|
}
|
|
|
|
pub struct GuestNetworkInterfaceStat {
|
|
pub:
|
|
rx_bytes int @[json: 'rx-bytes']
|
|
rx_packets int @[json: 'rx-packets']
|
|
rx_errs int @[json: 'rx-errs']
|
|
rx_dropped int @[json: 'rx-dropped']
|
|
tx_bytes int @[json: 'tx-bytes']
|
|
tx_packets int @[json: 'tx-packets']
|
|
tx_errs int @[json: 'tx-errs']
|
|
tx_dropped int @[json: 'tx-dropped']
|
|
}
|
|
|
|
// network_get_interfaces executes [guest-network-get-interfaces](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-network-get-interfaces) command.
|
|
pub fn (mut c Client) network_get_interfaces() ![]GuestNetworkInterface {
|
|
return c.execute[Empty, []GuestNetworkInterface]('guest-network-get-interfaces', none)!.return
|
|
}
|
|
|
|
pub struct GuestNetworkRoute {
|
|
pub:
|
|
iface string
|
|
destination string
|
|
metric int
|
|
gateway ?string
|
|
mask ?string
|
|
irtt ?int
|
|
flags ?int
|
|
refcnt ?int
|
|
use ?int
|
|
window ?int
|
|
mtu ?int
|
|
desprefixlen ?string
|
|
source ?string
|
|
srcprefixlen ?string
|
|
nexthop ?string
|
|
version int
|
|
}
|
|
|
|
// network_get_route executes [guest-network-get-route](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-network-get-route) command.
|
|
pub fn (mut c Client) network_get_route() ![]GuestNetworkRoute {
|
|
return c.execute[Empty, []GuestNetworkRoute]('guest-network-get-route', none)!.return
|
|
}
|
|
|
|
// ping executes [guest-ping](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-ping) command, a non-error return implies success.
|
|
pub fn (mut c Client) ping() ! {
|
|
c.execute[Empty, Empty]('guest-ping', none)!
|
|
}
|
|
|
|
struct GuestSetMemoryBlocksRequest {
|
|
mem_blks []GuestMemoryBlock @[json: 'mem-blks']
|
|
}
|
|
|
|
pub struct GuestMemoryBlockResponse {
|
|
pub:
|
|
phys_index int @[json: 'phys-index']
|
|
response GuestMemoryBlockResponseType
|
|
error_code ?int @[json: 'error-code']
|
|
}
|
|
|
|
pub enum GuestMemoryBlockResponseType {
|
|
success
|
|
not_found @[json: 'not-found']
|
|
operation_not_supported @[json: 'operation-not-supported']
|
|
operation_failed @[json: 'operation-failed']
|
|
}
|
|
|
|
// set_memory_blocks executes [guest-set-memory-blocks](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-set-memory-blocks) command.
|
|
pub fn (mut c Client) set_memory_blocks(blocks []GuestMemoryBlock) ![]GuestMemoryBlockResponse {
|
|
req := GuestSetMemoryBlocksRequest{blocks}
|
|
return c.execute[GuestSetMemoryBlocksRequest, []GuestMemoryBlockResponse]('guest-set-memory-blocks',
|
|
req)!.return
|
|
}
|
|
|
|
struct GuestSetTimeRequest {
|
|
time i64
|
|
}
|
|
|
|
// set_time executes [guest-set-time](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-set-time) command.
|
|
pub fn (mut c Client) set_time(epoch i64) ! {
|
|
req := GuestSetTimeRequest{epoch}
|
|
c.execute[GuestSetTimeRequest, Empty]('guest-set-time', req)!
|
|
}
|
|
|
|
struct GuestSetUserPasswordRequest {
|
|
username string
|
|
password string
|
|
crypted bool
|
|
}
|
|
|
|
// set_user_password executes [guest-set-user-password](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-set-user-password) command.
|
|
pub fn (mut c Client) set_user_password(username string, password string, crypted bool) ! {
|
|
req := GuestSetUserPasswordRequest{username, password, crypted}
|
|
c.execute[GuestSetUserPasswordRequest, Empty]('guest-set-user-password', req)!
|
|
}
|
|
|
|
struct GuestSetVcpusRequest {
|
|
vcpus []GuestLogicalProcessor
|
|
}
|
|
|
|
// set_vcpus executes [guest-set-vcpus](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-set-vcpus) command.
|
|
pub fn (mut c Client) set_vcpus(vcpus []GuestLogicalProcessor) !int {
|
|
req := GuestSetVcpusRequest{vcpus}
|
|
return c.execute[GuestSetVcpusRequest, int]('guest-set-vcpus', req)!.return
|
|
}
|
|
|
|
pub enum GuestShutdownMode {
|
|
halt
|
|
powerdown
|
|
reboot
|
|
}
|
|
|
|
struct GuestShutdownRequest {
|
|
mode GuestShutdownMode
|
|
}
|
|
|
|
// shutdown executes [guest-shutdown](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-shutdown) command.
|
|
pub fn (mut c Client) shutdown(mode GuestShutdownMode) ! {
|
|
req := GuestShutdownRequest{mode}
|
|
c.execute[GuestShutdownRequest, Empty]('guest-shutdown', req, no_return: true)!
|
|
}
|
|
|
|
struct GuestSSHAddAuthorizedKeysRequest {
|
|
username string
|
|
keys []string
|
|
reset ?bool
|
|
}
|
|
|
|
// ssh_add_authorized_keys executes [guest-ssh-add-authorized-keys](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-ssh-add-authorized-keys) command.
|
|
pub fn (mut c Client) ssh_add_authorized_keys(username string, keys []string, reset bool) ! {
|
|
req := GuestSSHAddAuthorizedKeysRequest{username, keys, reset}
|
|
c.execute[GuestSSHAddAuthorizedKeysRequest, Empty]('guest-ssh-add-authorized-keys',
|
|
req)!
|
|
}
|
|
|
|
struct GuestAuthorizedKeys {
|
|
keys []string
|
|
}
|
|
|
|
// ssh_get_authorized_keys executes [guest-ssh-get-authorized-keys](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-ssh-get-authorized-keys) command.
|
|
pub fn (mut c Client) ssh_get_authorized_keys() ![]string {
|
|
return c.execute[Empty, GuestAuthorizedKeys]('guest-ssh-get-authorized-keys', none)!.return.keys
|
|
}
|
|
|
|
// ssh_remove_authorized_keys executes [guest-ssh-remove-authorized-keys](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-ssh-remove-authorized-keys) command.
|
|
pub fn (mut c Client) ssh_remove_authorized_keys(username string, keys []string) ! {
|
|
req := GuestSSHAddAuthorizedKeysRequest{
|
|
username: username
|
|
keys: keys
|
|
}
|
|
c.execute[GuestSSHAddAuthorizedKeysRequest, Empty]('guest-ssh-remove-authorized-keys',
|
|
req)!
|
|
}
|
|
|
|
// suspend_disk executes [guest-suspend-disk](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-suspend-disk) command.
|
|
pub fn (mut c Client) suspend_disk() ! {
|
|
c.execute[Empty, Empty]('guest-suspend-disk', none, no_return: true)!
|
|
}
|
|
|
|
// suspend_hybrid executes [guest-suspend-hybrid](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-suspend-hybrid) command.
|
|
pub fn (mut c Client) suspend_hybrid() ! {
|
|
c.execute[Empty, Empty]('guest-suspend-hybrid', none, no_return: true)!
|
|
}
|
|
|
|
// suspend_ram executes [guest-suspend-ram](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-suspend-ram) command.
|
|
pub fn (mut c Client) suspend_ram() ! {
|
|
c.execute[Empty, Empty]('guest-suspend-ram', none, no_return: true)!
|
|
}
|
|
|
|
struct GuestSyncRequest {
|
|
id u64
|
|
}
|
|
|
|
// sync executes the [guest-sync](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-sync) command.
|
|
pub fn (mut c Client) sync(id u64) !u64 {
|
|
req := GuestSyncRequest{id}
|
|
res := c.execute[GuestSyncRequest, u64]('guest-sync', req)!
|
|
return res.return
|
|
}
|
|
|
|
// sync_delimited executes [guest-sync-delimited](https://qemu-project.gitlab.io/qemu/interop/qemu-ga-ref.html#command-QGA-qapi-schema.guest-sync-delimited) command.
|
|
pub fn (mut c Client) sync_delimited(id u64) !u64 {
|
|
req := GuestSyncRequest{id}
|
|
res := c.execute[GuestSyncRequest, u64]('guest-sync-delimited', req)!
|
|
return res.return
|
|
}
|