// Copyright 2019 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.dhcp;

using zx;

/// Client provides control operations on a DHCP client.
///
/// The server end of the protocol is closed when the underlying object ceases
/// to exist.
protocol Client {
    /// Start runs the DHCP client represented by this protocol.
    ///
    /// # Errors
    ///
    /// Start returns no other errors currently, but callers should check the error
    /// value in case new errors are returned in the future.
    Start() -> (struct {}) error zx.status;

    /// Stops the DHCP client (if it is running).
    ///
    /// # Errors
    ///
    /// Stop returns no other errors currently, but callers should check the error
    /// value in case new errors are returned in the future.
    Stop() -> (struct {}) error zx.status;
};
