| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.virtualization; |
| |
| using fuchsia.io; |
| using fuchsia.sys; |
| |
| /// Mode of the file backing a block device. |
| enum BlockMode { |
| /// Reads and writes are allowed. |
| READ_WRITE = 0; |
| /// Only reads are allowed. |
| READ_ONLY = 1; |
| /// Writes are allowed, but are stored in memory, not to disk. |
| VOLATILE_WRITE = 2; |
| }; |
| |
| /// Data format of the file backing a block device. |
| enum BlockFormat { |
| /// Raw IO. All reads and writes go directly to disk as a flat file. |
| RAW = 0; |
| /// QCOW image. All reads and writes go to a QCOW image. |
| QCOW = 1; |
| }; |
| |
| const uint64 MAX_BLOCK_DEVICE_ID_SIZE = 20; |
| |
| /// Properties describing a single block device in the system. |
| struct BlockDevice { |
| /// A label used to identify the block device. |
| string:MAX_BLOCK_DEVICE_ID_SIZE id; |
| /// The access mode for the block backing file. |
| BlockMode mode; |
| /// The data format of the backing file. |
| BlockFormat format; |
| /// The underlying file that stores the drive contents. |
| fuchsia.io.File file; |
| }; |
| |
| /// An interface that will receive channels for Wayland connections. |
| [Discoverable] |
| protocol WaylandDispatcher { |
| /// Inform dispatcher of new connection. |
| /// |
| /// When a client opens a new connection to the virtio_wl device, a new |
| /// zx::channel will be created for that connection. The virtio_wl device |
| /// will retain one endpoint of that channel and the other endpoint will be |
| /// provided to this method. The messages on the channel will be Wayland |
| /// protocol messages as sent by the client. Each channel datagram will |
| /// contain 1 or more complete Wayland messages. |
| OnNewConnection(handle<channel> channel); |
| }; |
| |
| /// Properties describing a virtio_wl device. |
| struct WaylandDevice { |
| /// The amount of guest-physical address space to allocate for virtio_wl |
| /// buffers. |
| /// |
| /// Default to a 1GiB allocation. |
| uint64 memory = 1073741824; |
| |
| /// The dispatcher for new virtio_wl connections. |
| WaylandDispatcher dispatcher; |
| }; |
| |
| /// Properties describing a virtio_magma device. |
| struct MagmaDevice { |
| /// The amount of guest-physical address space to allocate for virtio_magma |
| /// buffers. |
| /// |
| /// Default to a 16GiB allocation. |
| uint64 memory = 17179869184; |
| }; |
| |
| struct LaunchInfo { |
| /// The URL of the package to launch. |
| string url; |
| |
| /// Arguments that will be passed to the VMM binary when launching this guest. |
| /// |
| /// See ///src/virtualization/bin/vmm/guest_config.cc for valid options. |
| vector<string>? args; |
| |
| /// A diagnostic string to associate with this instance. |
| string? label; |
| |
| /// A flat namespace to be appended to the default namespace for the VMM |
| /// process. |
| fuchsia.sys.FlatNamespace? flat_namespace; |
| |
| /// A set of block devices to add to the virtual machine. |
| vector<BlockDevice>? block_devices; |
| |
| /// An optional virtio_wl device. |
| /// |
| /// If not provided, no virtio_wl device will be created by the VMM. |
| WaylandDevice? wayland_device; |
| |
| /// An optional virtio_magma device. |
| /// |
| /// If not provided, no virtio_magma device will be created by the VMM. |
| MagmaDevice? magma_device; |
| }; |
| |
| protocol Realm { |
| /// Launch a new guest instance into this environment. The `cid` of the |
| /// instance is returned so that it can be uniquely identified. |
| LaunchInstance(LaunchInfo launch_info, |
| request<Guest> controller) |
| -> (uint32 cid); |
| |
| /// Query for guests running in this environment. |
| ListInstances() -> (vector<InstanceInfo> instances); |
| |
| /// Connect to a currently running guest instance identified by `cid`. The |
| /// `cid` can be found via the return value of `LaunchInstance` or a call to |
| /// `ListInstances`. |
| ConnectToInstance(uint32 cid, request<Guest> controller); |
| |
| /// Connect to the memory balloon of a currently running guest instance |
| /// identified by `cid`. |
| ConnectToBalloon(uint32 cid, request<BalloonController> controller); |
| |
| /// Returns an interface that can be used to access the host vsock endpoint. |
| GetHostVsockEndpoint(request<HostVsockEndpoint> endpoint); |
| }; |