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

/// A unique non-zero interface identifier.
alias interface_id = uint64;

/// Ipv4Address is expressed in network byte order, so the most significant byte
/// ("127" in the address "127.0.0.1") will be at index 0.
struct Ipv4Address {
    array<uint8>:4 addr;
};

/// Ipv6Address is expressed in network byte order, so the most significant byte
/// ("ff" in the address "ff02::1") will be at index 0.
struct Ipv6Address {
    array<uint8>:16 addr;
};

/// Represents an IP address that may be either v4 or v6.
union IpAddress {
    1: Ipv4Address ipv4;
    2: Ipv6Address ipv6;
};

// TODO(https://fxbug.dev/54163): rename Subnet to AddressWithPrefix when
// binding support is ready, so we don't have to recursively fix all users.
/// An IP address with its subnet prefix length.
struct Subnet {
    /// The Ipv4 or Ipv6 address.
    IpAddress addr;

    /// The prefix length of the netmask. E.g. for 192.168.1.0/24, the prefix
    /// length is 24, corresponding to a netmask of 255.255.255.0.
    /// For Ipv4, prefix_len must be in the range [0, 32].
    /// For Ipv6, prefix_len must be in the range [0, 128].
    uint8 prefix_len;
};

/// A MAC address used to identify a network interface on the data link layer within the network.
struct MacAddress {
    array<uint8>:6 octets;
};
