| // 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); |
| }; |