// Copyright 2023 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 containing protocols that provide root-level access over netstack
/// resources.
///
/// This library should be rarely used and applications looking to use this
/// library should strongly consider the non-root libraries first:
///  - `fuchsia.net.interfaces`
///  - `fuchsia.net.interfaces.admin`
///  - `fuchsia.net.routes`
///  - `fuchsia.net.routes.admin`
///
/// If you believe the non-root libraries do not support your use case, please
/// reach out to the Netstack team to explore alternative options.
library fuchsia.net.root;
