// Copyright 2018 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.dns;

using fuchsia.net;

enum Status {
    OK = 0;
    UNKNOWN_ERROR = 1;
    PARSE_ERROR = 2;
};

struct NetError {
    Status status;
};

/// Settings for the system-wide DNS behavior.
struct DNSConfig {
    vector<fuchsia.net.IpAddress> dns_servers;
};

/// This interface is used to interact with the policy layer of the fuchsia
/// netstack implementation that is hosted in netcfg.  This interface is
/// for use solely by privileged system components such as a 'system setting'
/// user interface, and can be used to change system-wide DNS settings.
[Discoverable]
protocol DnsPolicy {

    /// Set the DNS servers' IP addresses.
    SetDNSConfig(DNSConfig config) -> (NetError result);

    /// Get the DNS servers' IP addresses.
    GetDNSConfig() -> (DNSConfig current);
};
