| // Copyright 2021 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.net.virtualization; |
| |
| using fuchsia.hardware.network; |
| |
| /// Provides control over virtualization network configuration. |
| @discoverable |
| protocol Control { |
| /// Create a new network with configurable upstream connectivity. |
| /// |
| /// The network itself is always guaranteed to be created, but upstream |
| /// connectivity may not be established initially and may be lost at |
| /// any time. |
| /// |
| /// + request `config` network configuration. |
| /// + request `network` provides control over the created network. |
| CreateNetwork(resource struct { |
| config flexible union { |
| // TODO(https://fxbug.dev/86068): Currently bridged networks are not |
| // isolated from each other (they are all on the same bridge). Provide |
| // isolation via VLANs. |
| /// Create a bridged network. |
| /// |
| /// The server will attempt to find a suitable interface to |
| /// attach to the bridge for providing upstream connectivity. The |
| /// selection process will be repeated to find a replacement |
| /// iff the interface attached to the bridge with Internet |
| /// connectivity is removed. |
| 1: bridged table {}; |
| }; |
| network server_end:Network; |
| }); |
| }; |
| |
| /// Provides control over a network. |
| /// |
| /// This protocol encodes the lifetime of the underlying network in both |
| /// directions, that is: |
| /// - if the client end is closed: all interfaces added to the network |
| /// (not including any used to provide upstream connectivity) will be |
| /// removed and destroyed, and the network will be removed; |
| /// - if the server end is closed, all interfaces on the network and the |
| /// network itself have been destroyed. |
| protocol Network { |
| /// Adds a port to the network. |
| /// |
| /// + request `port` port to be added. |
| /// + request `interface` provides control over the interface. The protocol |
| /// will be terminated with the epitaph `ZX_ERR_WRONG_TYPE` if the |
| /// port could not be added to the network due to incompatibility, |
| /// e.g. if the network is bridged and the port does not support |
| /// the same L2 protocol as other ports on the bridge. |
| AddPort(resource struct { |
| port client_end:fuchsia.hardware.network.Port; |
| interface server_end:Interface; |
| }); |
| }; |
| |
| /// Provides control over an interface. |
| /// |
| /// This protocol encodes the lifetime of the underlying interface in both |
| /// directions, that is: |
| /// - if the client end is closed, the server will detach the interface |
| /// from the network it belongs to and detach the network device; |
| /// - if the server end is closed, the interface has been detached from |
| /// the network it was attached to and destroyed. |
| protocol Interface {}; |