| // Copyright 2023 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.root; |
| |
| using fuchsia.net; |
| using fuchsia.net.interfaces.admin; |
| |
| /// Provides access to installed network interfaces. |
| /// |
| /// This protocol provides the ability to bypass regular ownership-controls |
| /// which allow only the interface owner (generally the entity installing the |
| /// interface) to perform management operations on an interface. |
| /// |
| /// Circumventing the strong-ownership semantics through use of this protocol |
| /// is highly discouraged and applications considering use of this protocol |
| /// are encouraged to exhaust other options first by working with the Netstack |
| /// team to find an alternative solution. |
| @discoverable |
| closed protocol Interfaces { |
| /// Obtain administrative control over a network interface. |
| /// |
| /// + request `id` identifies the interface to be controlled. |
| /// + request `control` grants the client administrative control over |
| /// the interface. Closed without a terminal event if `id` does not |
| /// match an existing interface. |
| strict GetAdmin(resource struct { |
| id fuchsia.net.InterfaceId; |
| control server_end:fuchsia.net.interfaces.admin.Control; |
| }); |
| |
| /// Return an interface's MAC address. |
| /// |
| /// + request `id` identifies the interface whose MAC is requested. |
| /// - response `mac` is the interface's MAC address, if it has one. |
| // TODO(https://fxbug.dev/42165832): Use an API like `fuchsia.net.interfaces` |
| // for L2 information. |
| strict GetMac(struct { |
| id fuchsia.net.InterfaceId; |
| }) -> (struct { |
| mac box<fuchsia.net.MacAddress>; |
| }) error strict enum { |
| /// `id` does not identify an interface. |
| NOT_FOUND = 1; |
| }; |
| }; |