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