// 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.name;

using fuchsia.net;

/// A DNS server configuration.
type DnsServer = table {
    /// The server's address, must be provided.
    1: address fuchsia.net.SocketAddress;
    /// The configuration source for this server. Defaults to
    /// [`fuchsia.net.name/DnsServerSource.static_source`].
    2: source @generated_name("DnsServerSource") strict union {
        /// The server is statically configured through
        /// [`fuchsia.net.name/LookupAdmin.SetDefaultServers`].
        1: static_source @generated_name("StaticDnsServerSource") table {};
        /// The server was discovered through DHCPv4.
        2: dhcp @generated_name("DhcpDnsServerSource") table {
            /// The interface index over which this server was discovered.
            1: source_interface uint64;
        };
        /// The server was discovered through an NDP Router Advertisement.
        3: ndp @generated_name("NdpDnsServerSource") table {
            /// The interface index over which this server was discovered.
            1: source_interface uint64;
        };
        /// The server was discovered through DHCPv6.
        4: dhcpv6 @generated_name("Dhcpv6DnsServerSource") table {
            /// The interface index over which this server was discovered.
            1: source_interface uint64;
        };
    };
};
