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

table Identity {
    /// The raw bytes for the network name.
    /// This is typically a [StringPrep'd][1] UTF8 encoding.
    ///
    /// Note that extra care must be taken when displaying
    /// this value to users, since there are many ways
    /// to make visually similar UTF8 strings that
    /// have differing bytecode representations.
    ///
    /// [1]: https://tools.ietf.org/html/rfc3454
    1: bytes:63 raw_name;

    /// Extended PANID.
    2: bytes:8 xpanid;

    /// String identifying the type of network.
    ///
    /// Well-known protocol ids are associated with
    /// specific string values (like "org.threadgroup.std.thread"
    /// or "org.zigbee.std.zigbee-ip"). For unknown protocol ids,
    /// the string will map to something like
    /// `fuchsia.lowpan.net_type.802.15.4.pid.XX`, where `XX` is
    /// the value of the protocol id from a 802.14.5 beacon.
    /// This field is optional when joining, forming, or provisioning.
    3: string:MAX_NET_TYPE_LEN net_type;

    /// Channel Index.
    4: ChannelIndex channel;

    /// PANID for 802.14.5-based networks (or the equivalent).
    5: uint16 panid;

    /// IPv6 Mesh-local prefix.
    ///
    /// This parameter allows you to determine the mesh-local
    /// IPv6 prefix for the current network, or to specify one
    /// when provisioning the interface for a network or forming
    /// a new network.
    ///
    /// The prefix length is always 64 bits, so only the upper
    /// 64 bits of the value are used: the least significant bits
    /// must be ignored when read and zero when set.
    ///
    /// This field is ignored when supplied to `JoinNetwork()`.
    6: Ipv6Prefix mesh_local_prefix;
};
