blob: 8134ba3aae6ffcbc15c277a372afc0acaf9e60d4 [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.
@available(added=7)
library fuchsia.net.routes;
using fuchsia.net;
using zx;
/// Collection of addresses and identifiers describing a network destination.
///
/// A `Destination` is the "next-hop" for a routed packet.
type Destination = table {
/// The IP address of the destination.
1: address fuchsia.net.IpAddress;
/// The MAC address of the destination. Only set if the destination is on a
/// link that requires a MAC address.
2: mac fuchsia.net.MacAddress;
/// The interface identifier over which the destination can be reached.
3: interface_id fuchsia.net.interface_id;
/// The preferred local IP address used to communicate with the destination.
4: source_address fuchsia.net.IpAddress;
};
/// Provides access to the system's routing state.
@discoverable
protocol State {
/// Resolves the route to a destination.
///
/// + request `destination` the IP address to resolve a route to. If the
/// unspecified address (all zeroes) is provided, the default route will
/// be returned. The variant of `destination` determines variant of
/// [`fuchsia.net/IpAddress`] fields in the resolved route.
/// - response `result` contains the resolved route to `destination`.
/// * error `ZX_ERR_ADDRESS_UNREACHABLE` if `destination` can't be resolved.
// TODO(brunodalbo) In the future we may have multiple tables and we may
// want to let the caller specify which table to use. Alternatively, if
// multiple tables are accessed through scoped objects, a `Resolve` call in
// a table would have the same effect.
Resolve(struct {
destination fuchsia.net.IpAddress;
}) -> (struct {
/// A resolved route.
///
/// Contains the information for the "next-hop" or immediate-destination
/// that is the result of a route resolution. A resolved route is only
/// meaningful in the context of a requested destination.
result @generated_name("Resolved") strict union {
/// The requested destination is directly reachable.
1: direct Destination;
/// The requested destination is reachable through a gateway, thus
/// the next hop is the gateway.
2: gateway Destination;
};
}) error zx.status;
};