| // 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.overnet; |
| |
| // Overnet forms a mesh network of peer devices which can proxy some Zircon objects between |
| // said devices. |
| |
| using fuchsia.overnet.protocol; |
| using zx; |
| |
| /// Interfaces applicable to consuming services from other devices |
| @discoverable |
| protocol ServiceConsumer { |
| /// Returns a list of all peers that are connected to this Overnet. |
| /// If this list has not been updated since the last call to this method, it waits until |
| /// new data is available. |
| /// Concurrent calls to ListPeers will result in channel closure. |
| ListPeers() -> (struct { |
| peers vector<Peer>:MAX; |
| }); |
| /// Connect `chan` to some external service on `node` with name `service_name`. |
| ConnectToService(resource struct { |
| node fuchsia.overnet.protocol.NodeId; |
| service_name string:fuchsia.overnet.protocol.MAX_SERVICE_NAME_LENGTH; |
| chan zx.handle:CHANNEL; |
| }); |
| }; |
| |
| /// Interfaces applicable to sharing services with ServiceConsumer's |
| @discoverable |
| protocol ServicePublisher { |
| /// Register a new service to be exported by Overnet. |
| /// If an existing service has the same `service_name`, it's replaced by this service. |
| PublishService(resource struct { |
| service_name string:fuchsia.overnet.protocol.MAX_SERVICE_NAME_LENGTH; |
| provider client_end:ServiceProvider; |
| }); |
| }; |
| |
| /// Interfaces applicable to controlling an Overnet mesh |
| @discoverable |
| protocol MeshController { |
| /// Attach a socket as a new link. |
| AttachSocketLink(resource struct { |
| socket zx.handle:SOCKET; |
| }); |
| }; |
| |
| /// A ServiceProvider is a factory for one service. |
| protocol ServiceProvider { |
| /// Connect `chan` to the service (called in response to Overnet.ConnectToService). |
| /// `info` provides additional data about the connection request. |
| ConnectToService(resource struct { |
| chan zx.handle:CHANNEL; |
| info ConnectionInfo; |
| }); |
| }; |
| |
| /// Protocol spoken by the host implementation to access various sub-interfaces. |
| protocol HostOvernet { |
| ConnectServiceConsumer(resource struct { |
| svc server_end:ServiceConsumer; |
| }); |
| ConnectServicePublisher(resource struct { |
| svc server_end:ServicePublisher; |
| }); |
| ConnectMeshController(resource struct { |
| svc server_end:MeshController; |
| }); |
| }; |
| |
| /// A `Peer` describes one device on the Overnet mesh. |
| type Peer = struct { |
| /// The address of the peer on the Overnet mesh. |
| id fuchsia.overnet.protocol.NodeId; |
| /// A special peer is returned for this device, and is marked with `is_self` true. |
| is_self bool; |
| /// A description of the peer (includes, for example, a service list). |
| description fuchsia.overnet.protocol.PeerDescription; |
| }; |
| |
| /// Information provided to a ServiceProvider about an incoming connection. |
| type ConnectionInfo = table { |
| /// The peer address initiating this connection. |
| 1: peer fuchsia.overnet.protocol.NodeId; |
| }; |