| // Copyright 2020 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; |
| |
| /// An IPv4 socket address, composed of an IPv4 address and a port. |
| /// |
| /// Inspired by the address definition in the [POSIX specification]. |
| /// |
| /// [POSIX specification]: https://pubs.opengroup.org/onlinepubs/9699919799/ |
| struct Ipv4SocketAddress { |
| /// IPv4 Address. |
| Ipv4Address address; |
| /// Transport-layer port. |
| uint16 port; |
| }; |
| |
| /// An IPV6 socket address, composed of an IPv6 address, a port, and a scope identifier. |
| /// |
| /// Inspired by the address definition in the [POSIX specification]. |
| /// |
| /// [POSIX specification]: https://pubs.opengroup.org/onlinepubs/9699919799/ |
| struct Ipv6SocketAddress { |
| /// IPv6 Address. |
| Ipv6Address address; |
| /// Transport-layer port. |
| uint16 port; |
| /// Provides a means to identify to which zone a non-global address belongs. |
| /// |
| /// A node may have interfaces attached to different zones of the same scope, for example |
| /// different link-local zones are disambiguated by the use of a `zone_index` providing the |
| /// interface identifier. |
| /// |
| /// `zone_index` 0 is the default zone. |
| /// |
| /// See [RFC 4007] for terminology and examples. |
| /// |
| /// [RFC 4007]: https://tools.ietf.org/html/rfc4007 |
| uint64 zone_index; |
| }; |
| |
| /// Represents an IP socket address that may be either v4 or v6. |
| union SocketAddress { |
| 1: Ipv4SocketAddress ipv4; |
| 2: Ipv6SocketAddress ipv6; |
| }; |