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