blob: a47f8c79b9d37b9a1649b2908ae115aeaf6598eb [file] [log] [blame]
// 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;
/// 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;
};
/// Endpoint describes an IP address and port. The network protocol associated
/// with the Endpoint will be known from context or communicated through
/// additional structures.
struct Endpoint {
/// The IP address of the endpoint.
IpAddress addr;
/// The port number of the endpoint.
uint16 port;
};
/// Subnet describes an IP subnetwork, where all host IP addresses share the same most significant
/// bits.
struct Subnet {
/// The Ipv4 or Ipv6 address. Only the `prefix_len` most significant bits may be set in `addr`;
/// all bits in the host portion of the address must be zero.
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;
};