blob: 07f216420ded4c1b936730800b2a4746e75ecbcc [file] [log] [blame]
// 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 zx;
/// `HOST_CID` is the reserved context ID (CID) of the host.
///
/// CIDs for guests are assigned by the Manager and can be found in the
/// corresponding `InstanceInfo` structure.
const uint32 HOST_CID = 2;
/// Exposed by guests capable of listening via vsocks. On a request to establish
/// a connection, the `Accept` method will be called. If the port is open and
/// accepting connections, the implementation should return `ZX_OK`.
///
/// Also see `GuestVsockEndpoint`.
protocol GuestVsockAcceptor {
Accept(uint32 src_cid, uint32 src_port, uint32 port, handle? handle)
-> (zx.status status);
};
/// Exposed by a host capable of listening via vsocks. A variant of a
/// `GuestVsockAcceptor` that is responsible for creating the `handle` with which
/// to communicate. The `handle` will be either a socket or a channel, depending
/// on the current configuration.
protocol HostVsockAcceptor {
Accept(uint32 src_cid, uint32 src_port, uint32 port)
-> (zx.status status, handle? handle);
};
/// Exposed by a host capable of connecting via vsocks. This allows a guest to
/// identify itself via {src_cid, src_port}, and request to connect to
/// {cid, port}. The host should return `ZX_OK`, and create a handle with which
/// to communicate. The `handle` will be either a socket or a channel, depending
/// on the current configuration.
protocol HostVsockConnector {
Connect(uint32 src_cid, uint32 src_port, uint32 cid, uint32 port)
-> (zx.status status, handle? handle);
};
/// Exposed by guests capable of handling vsock traffic. During
/// initialization the Manager will assign a unique CID to this endpoint and
/// provide a `HostVsockConnector` that can be used to establish outbound
/// connections. The implementation should provide a `GuestVsockAcceptor`
/// implementation that can handle any inbound connection requests.
[Discoverable]
protocol GuestVsockEndpoint {
SetContextId(uint32 cid, HostVsockConnector connector,
request<GuestVsockAcceptor> acceptor);
-> OnShutdown(uint32 src_cid, uint32 src_port, uint32 dst_cid, uint32 dst_port);
};
/// Exposed by a host to provide the ability for listeners to be multiplexed by
/// port and to manage dynamic port allocation for outbound connections.
protocol HostVsockEndpoint {
/// Register `acceptor` to be invoked for any connection requests to `port`.
Listen(uint32 port, HostVsockAcceptor acceptor)
-> (zx.status status);
/// Similar to `HostVsockConnector.Connect` except the `src_cid` is
/// `HOST_CID` and `src_port` is generated automatically.
Connect(uint32 cid, uint32 port, handle? handle)
-> (zx.status status);
};