blob: ec7a08664edc8988f579caee8f58d6536b8833f1 [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.net.dhcpv6;
using fuchsia.net.name;
using fuchsia.net;
/// Default port a DHCPv6 client should listen to according to [RFC 8415,
/// Section 7.2](https://tools.ietf.org/html/rfc8415#section-7.2).
const uint16 DEFAULT_CLIENT_PORT = 546;
/// Supported DHCPv6 option codes that can be included in the client's
/// [Option Request Option](https://tools.ietf.org/html/rfc8415#section-21.7).
///
/// See the full list of option codes
/// [here](https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#dhcpv6-parameters-2).
enum RequestableOptionCode {
DNS_SERVERS = 23;
};
/// A DHCPv6 operational model where the client only sends information
/// requests and handles corresponding replies, as defined in
/// [RFC 8415, Section 6.1](https://tools.ietf.org/html/rfc8415#section-6.1).
table Stateless {
/// A list of option codes to include in
/// [Option Request Option](https://tools.ietf.org/html/rfc8415#section-21.7).
1: vector<RequestableOptionCode>:1 options_to_request;
};
/// Operational models for a client.
///
/// The client will run all the provided models in parallel.
///
/// See the full list of operational models in
/// [RFC 8415, Section 6](https://tools.ietf.org/html/rfc8415#section-6).
table OperationalModels {
1: Stateless stateless;
};
/// Parameters for calling [`fuchsia.net.dhcpv6/ClientProvider.NewClient`].
table NewClientParams {
/// The ID of the interface the client will run on.
///
/// Required.
1: uint64 interface_id;
/// The socket address to use when communicating with servers.
///
/// DHCPv6 servers listen for link-local multicasts, so not using a
/// link-local address here may cause interoperability issues.
///
/// Client creation will fail with `INVALID_ARGS` if:
///
/// * a multicast address is provided;
/// * or a link-local address is provided, and its zone index doesn't match
/// `interface_id` (Fuchsia has a 1:1 mapping from zone index to interface
/// ID).
///
/// Client creation will fail if it fails to bind a socket to this address.
///
/// Required.
2: fuchsia.net.Ipv6SocketAddress address;
/// The [`fuchsia.net.dhcpv6/OperationalModels`] the client will start in.
///
/// Client creation will fail if `models` is empty or unsupported.
///
/// Required.
3: OperationalModels models;
};
/// Provides a method to create new clients.
[Discoverable]
protocol ClientProvider {
/// Provides a DHCPv6 client.
///
/// + request `params` the parameters to create the client with.
/// + request `request` the channel handle that can be used to control the
/// newly created client. Will be closed if a client cannot be created,
/// with an epitaph explaining the reason.
NewClient(NewClientParams params, request<Client> request);
};
/// Provides methods to watch for discovered network configurations.
protocol Client {
compose fuchsia.net.name.DnsServerWatcher;
};