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

using fuchsia.net;

const LQI_UNSPECIFIED uint8 = 0;
const RSSI_UNSPECIFIED int8 = -128;
const CHANNEL_UNSPECIFIED uint16 = 65535;

const MAX_CHANNELS uint16 = 100;
const MAX_NET_TYPE_LEN uint16 = 64;

const NET_TYPE_THREAD_1_X string = "org.threadgroup.std.thread.1";
const NET_TYPE_ZIGBEE_IP_1_X string = "org.zigbee.std.zigbee-ip.1";
const NET_TYPE_UNKNOWN_802_15_4_PID string = "fuchsia.lowpan.net_type.802.15.4.pid";
const NET_TYPE_RAW_6LOWPAN string = "fuchsia.lowpan.net_type.6lowpan";

alias NetworkType = string:MAX_NET_TYPE_LEN;

alias ChannelIndex = uint16;

alias Ipv6Prefix = fuchsia.net.Ipv6Address;

type Ipv6Subnet = struct {
    /// The IPv6 address of the subnet.
    addr fuchsia.net.Ipv6Address;

    /// The length of the IPv6 prefix for the subnet.
    /// Must be between 0 and 128, inclusive.
    prefix_len uint8;
};

/// Type describing the name of the network interface.
///
/// Interface names must satisfy the following regular expression:
///
///     ^[a-z_][-_.+0-9a-z]{1,31}$
///
alias InterfaceName = string:32;
