| // Copyright 2019 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.hardware.ethertap; |
| |
| using zx; |
| using fuchsia.hardware.ethernet; |
| |
| /// Enables tracing of the ethertap device itself. |
| const OPT_TRACE uint32 = 0x00000001; |
| /// Enables tracing of individual packets. |
| const OPT_TRACE_PACKETS uint32 = 0x00000002; |
| /// Report EthernetImplSetParam() over EthertapController, and return success from |
| /// EthernetImplSetParam(). If this option is not set, EthernetImplSetParam() will return |
| /// `ZX_ERR_NOT_SUPPORTED`. |
| const OPT_REPORT_PARAM uint32 = 0x00000004; |
| /// Starts ethertap device with link online. |
| const OPT_ONLINE uint32 = 0x00000008; |
| |
| /// Maximum MTU supported by ethertap driver. |
| const MAX_MTU uint32 = 2000; |
| /// Maximum size of trailing data on params report. |
| const MAX_PARAM_DATA uint32 = 64; |
| /// Maximum length of tap device name. |
| const MAX_NAME_LENGTH uint32 = 30; |
| |
| /// Configuration of an ethertap device. |
| @for_deprecated_c_bindings |
| type Config = struct { |
| /// Ethertap options, a bit mask of OPT_* constants. |
| options uint32; |
| /// Features that will be reported to Ethernet protocol. |
| features uint32; |
| /// Ethertap device mtu. If a value greater than `MAX_MTU` is provided, creating an ethertap |
| /// device will fail. |
| mtu uint32; |
| /// MAC address to report. |
| mac fuchsia.hardware.ethernet.MacAddress; |
| }; |
| |
| /// Provides control over the created tap device. The lifetime of the device itself is tied to the |
| /// channel over which this protocol is served, closing a `TapDevice` channel will trigger the |
| /// destruction and deallocation of the underlying tap device. |
| @for_deprecated_c_bindings |
| protocol TapDevice { |
| /// Writes data to the tap device. If device is offline, data will just be discarded. |
| WriteFrame(struct { |
| data vector<uint8>:MAX_MTU; |
| }); |
| /// Triggered when data is sent on this tap device. |
| // TODO(brunodalbo) consider adding flow control mechanisms for the data passing. |
| -> OnFrame(struct { |
| data vector<uint8>:MAX_MTU; |
| }); |
| /// Sets online status of ethertap device. |
| SetOnline(struct { |
| online bool; |
| }); |
| /// If `OPT_REPORT_PARAM` is set on `options`, calls to EthernetImplcSetParam will be routed to |
| /// this event, containing the set parameters request arguments. |
| -> OnReportParams(struct { |
| param uint32; |
| value int32; |
| data vector<uint8>:<MAX_PARAM_DATA, optional>; |
| }); |
| }; |
| |
| /// Ethertap driver interface. |
| @for_deprecated_c_bindings |
| protocol TapControl { |
| /// Opens a named device with given `name` and `config`. |
| /// `name` is only used for debugging purposes. |
| /// If `config` is not valid or the tap device could not be created, an error status is returned |
| /// and no `device` is created. |
| OpenDevice(resource struct { |
| name string:MAX_NAME_LENGTH; |
| config Config; |
| device server_end:TapDevice; |
| }) -> (struct { |
| s zx.status; |
| }); |
| }; |