blob: b50fd211c41d1caae9cc45600796a975febf0966 [file] [log] [blame]
// Copyright 2022 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.mdns;
using fuchsia.net;
/// Identifies a host. Host names consist of one or more labels separated by
/// '.'s. A host name must not end with a '.'. Labels must each be 63 characters
/// or less (not including the separator) and are UTF-8-encoded. A complete host
/// name, including separators, must be 255 characters or less.
alias host_name = string:255;
/// Identifies a (type of) service being published. Service names consist of
/// two labels, both terminated with a '.'. The first label must start with an
/// underscore and be 16 characters or less, including the underscore. The
/// second label must be either '_tcp' or '_udp'. Labels do not contain '.'s.
/// With underscores and terminators, that makes for a maximum of 22 characters.
/// Service names are UTF-8-encoded.
alias service_name = string:22;
/// Identifies a specific instance of a service being published. Instance names
/// consist of a single label, which is at most 63 characters long and which
/// contains no '.'s. Instance names are UTF-8-encoded.
alias instance_name = string:63;
/// Identifies a subtype of a service. Subtype names consist of a single label,
/// which is at most 63 characters long and which contains no '.'s. Subtype
/// names are UTF-8-encoded.
alias subtype_name = string:63;
/// Provides description relating to a service instance. In typical use, TXT
/// strings consist of a key and value separated by '='. TXT strings must be
/// at most 255 characters long and are UTF-8-encoded.
@available(added=9)
alias txt_character_string = vector<uint8>:255;
/// Specifies network media on which a service instance should be published.
type Media = strict bits : uint32 {
/// Specifies wired interfaces.
WIRED = 1;
/// Specifies wireless interfaces.
WIRELESS = 2;
};
/// Specifies IP versions on which a service instance should be published.
type IpVersions = strict bits : uint32 {
/// Specifies IPv4.
V4 = 1;
/// Specifies IPv6.
V6 = 2;
};
/// Describes a service instance.
type ServiceInstance = table {
/// The name of the service.
1: service service_name;
/// The name of the service instance.
2: instance instance_name;
/// IPv4 socket address for the service. May be empty. Deprecated: use `addresses`.
@available(deprecated=9)
@deprecated
3: ipv4_endpoint fuchsia.net.Ipv4SocketAddress;
/// IPv6 socket address for the service. May be empty. Deprecated: use `addresses`.
@available(deprecated=9)
@deprecated
4: ipv6_endpoint fuchsia.net.Ipv6SocketAddress;
/// Text strings describing the instance. Deprecated: use `text_strings`.
@available(deprecated=9)
@deprecated
5: text vector<txt_string>:MAX_TEXT_STRINGS;
/// The priority of the SRV resource record for this publication. See
/// [RFC6763](https://tools.ietf.org/html/rfc6763) for details.
6: srv_priority uint16;
/// The weight of the SRV resource record for this publication. See
/// [RFC6763](https://tools.ietf.org/html/rfc6763) for details.
7: srv_weight uint16;
/// The domain name of the target host.
8: target host_name;
/// The socket addresses for the service instance.
@available(added=9)
9: addresses vector<fuchsia.net.SocketAddress>:MAX_ADDRESSES;
/// Text strings describing the instance.
@available(added=9)
10: text_strings vector<txt_character_string>:MAX_TEXT_STRINGS;
};
const MAX_TEXT_STRINGS uint32 = 256;
const MAX_ADDRESSES uint32 = 64;
const MAX_SUBTYPES uint32 = 256;