blob: bc6420913a0e00f18609a0374b8e1b0ef3129f07 [file] [log] [blame]
// Copyright 2020 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.network;
using zx;
using fuchsia.net;
/// The address filtering mode supported by MAC devices.
// LINT.IfChange
@available(added=HEAD)
type MacFilterMode = strict enum {
/// Device accepts only unicast frames addressed to its own unicast address,
/// or multicast frames that are part of the multicast address filter list.
MULTICAST_FILTER = 0;
/// Device accepts unicast frames addressed to its own unicast address, or
/// any multicast frames.
MULTICAST_PROMISCUOUS = 1;
/// Device accepts all frames.
PROMISCUOUS = 2;
};
// LINT.ThenChange(/sdk/fidl/fuchsia.hardware.network.driver/network-mac.fidl)
@available(added=HEAD)
closed protocol MacAddressing {
/// Gets the Device's current unicast MAC address.
///
/// Implementers of this API do not need to return a uniquely identifiable
/// MAC; the unicast address returned is the one that is *currently* in use
/// to filter unicast frames, or that identifies the device on a link it's
/// *currently* on. Users of this API must not rely on the stability or
/// uniqueness of the returned value to identify or disambiguate device
/// instances.
///
/// - response `address` device's unicast MAC address.
strict GetUnicastAddress() -> (struct {
address fuchsia.net.MacAddress;
});
// TODO(https://fxbug.dev/42120438) enable an API like the one below to be
// notified of changes to the Unicast MAC once plumbed through the banjo
// protocol as well. WatchUnicastAddress() -> (Mac address);
/// Sets requested operating mode of this device to `mode`.
///
/// The requested mode is attached to the current client connection to the
/// device. Because multiple clients can be attached to the same device at
/// once, the mode with the least restrictions is the one actively put into
/// effect into the underlying device implementation.
///
/// If the device does not support the requested mode, but supports a mode
/// that is more open than the requested one, `SetMode` succeeds regardless.
/// Otherwise, if the device only supports *more restrictive* modes than the
/// one requested, `SetMode` returns `ZX_ERR_NOT_SUPPORTED`.
///
/// Clients must be aware that the resource being accessed is shared, and
/// that the device may be effectively operating at a more open level than
/// the one that was requested (although never at one more restrictive).
///
/// + request `mode` request mode to attach to.
/// - response `status` `ZX_ERR_NOT_SUPPORTED` it the device only supports
/// mode more restrictive than the one requested.
strict SetMode(struct {
mode MacFilterMode;
}) -> (struct {
status zx.Status;
});
/// Adds multicast address to the list of multicast groups.
///
/// The list of multicast addresses kept is untouched by calls to `SetMode`.
/// If the device's mode is not `MULTICAST_FILTER`, the list of multicast
/// addresses is ignored.
///
/// + request `address` multicast address to add to the list.
/// - response `status` `ZX_ERR_INVALID_ARGS` if `address` is not a
/// multicast address.
strict AddMulticastAddress(struct {
address fuchsia.net.MacAddress;
}) -> (struct {
status zx.Status;
});
/// Removes multicast address from the list of multicast groups.
///
/// + request `address` multicast address to remove from the list.
/// - response `status` `ZX_ERR_INVALID_ARGS` if `address` is not a
/// multicast address.
strict RemoveMulticastAddress(struct {
address fuchsia.net.MacAddress;
}) -> (struct {
status zx.Status;
});
};