RFC 9240

An Extension for Application-Layer Traffic Optimization (ALTO): Entity Property Maps

๐Ÿ“… published July 2022, from ietf

An Extension for Application-Layer Traffic Optimization (ALTO): Entity Property Maps โœจ

Title block ๐ŸŽ€

  • Stream: Internet Engineering Task Force (IETF)
  • Request for Comments: 9240
  • Category: Standards Track
  • ISSN: 2070-1721
  • Date: July 2022
  • Authors: W. Roome and S. Randriamasy (Nokia Bell Labs), Y. Yang (Yale University), J. Zhang (Tongji University), K. Gao (Sichuan University)
  • Obsoletes / Updates: This title block doesn't list any RFCs as obsoleted or updated.

Abstract ๐Ÿ’–

Okay bestie, this one is about ALTO, the Application-Layer Traffic Optimization protocol ๐Ÿฆ‹. The base protocol already has "endpoint properties," but those were only ever attached to IP addresses. This document extends the idea so properties can belong to entities, which can be a much wider range of objects ๐ŸŒธ. The properties show up as maps, just like the network and cost maps in base ALTO, so it feels familiar โœจ.

The extension still works with endpoints and the Endpoint Property Service from RFC 7285, so nothing old gets left behind ๐Ÿซถ. The upgrade goes in two big directions. First, endpoints stop being limited to IP addresses and can cover a bigger, extensible set of objects ๐Ÿ”ฅ. Second, you stop asking about properties for one specific endpoint at a time and get entire entity property maps instead ๐Ÿ‘‘. On top of that, entities and property values can be tied to a particular information resource ๐Ÿ’…. All of this is possible because the entity and property types are designed to be generic and flexible ๐ŸŒˆ.

Status of This Memo ๐Ÿ“

This is an Internet Standards Track document ๐Ÿ’œ.

It's a product of the Internet Engineering Task Force (IETF), so it reflects what the IETF community agrees on. It went through public review and was approved for publication by the Internet Engineering Steering Group (IESG) โญ. If you want more detail on Internet Standards, check Section 2 of RFC 7841 ๐Ÿงš.

For the current status, any errata, and how to send feedback, head to https://www.rfc-editor.org/info/rfc9240 ๐ŸŽ€.

Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved ๐Ÿ’–.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents, which you can find at https://trustee.ietf.org/license-info as they stand on the publication date. Please actually read those, bestie, because they spell out your rights and restrictions for this document ๐Ÿ“œ. Code Components pulled out of this document must include the Revised BSD License text described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as the Revised BSD License describes ๐Ÿ”’.

Table of Contents ๐Ÿ—‚๏ธ

1.  Introduction
  1.1.  Terminology and Notation
2.  Requirements Language
3.  Basic Features of the Entity Property Map Extension
  3.1.  Entity
  3.2.  Entity Domain
    3.2.1.  Entity Domain Type
    3.2.2.  Entity Domain Name
  3.3.  Entity Property Type
  3.4.  New Information Resource and Media Type: ALTO Property Map
4.  Advanced Features of the Entity Property Map Extension
  4.1.  Entity Identifier and Entity Domain Name
  4.2.  Resource-Specific Entity Domain Name
  4.3.  Resource-Specific Entity Property Value
  4.4.  Entity Hierarchy and Property Inheritance
    4.4.1.  Entity Hierarchy
    4.4.2.  Property Inheritance
    4.4.3.  Property Value Unicity
  4.5.  Supported Properties for Entity Domains in Property Map
        Capabilities
  4.6.  Defining Information Resource for Resource-Specific Entity
        Domains
    4.6.1.  Defining Information Resource and Its Media Type
    4.6.2.  Examples of Defining Information Resources and Their
            Media Types
  4.7.  Defining Information Resources for Resource-Specific
        Property Values
5.  Protocol Specification: Basic Data Types
  5.1.  Entity Domain
    5.1.1.  Entity Domain Type
    5.1.2.  Entity Domain Name
    5.1.3.  Entity Identifier
    5.1.4.  Hierarchy and Inheritance
  5.2.  Entity Property
    5.2.1.  Entity Property Type
    5.2.2.  Entity Property Name
    5.2.3.  Format for Entity Property Value
6.  Entity Domain Types Defined in This Document
  6.1.  Internet Address Domain Types
    6.1.1.  Entity Domain Type: IPv4
    6.1.2.  Entity Domain Type: IPv6
    6.1.3.  Hierarchy and Inheritance of Internet Address Domains
    6.1.4.  Defining Information Resource Media Type for Domain
            Types IPv4 and IPv6
  6.2.  Entity Domain Type: PID
    6.2.1.  Entity Domain Type Identifier
    6.2.2.  Domain-Specific Entity Identifiers
    6.2.3.  Hierarchy and Inheritance
    6.2.4.  Defining Information Resource Media Type for Domain
            Type PID
    6.2.5.  Relationship To Internet Addresses Domains
  6.3.  Internet Address Properties vs. PID Properties
7.  Property Map
  7.1.  Media Type
  7.2.  HTTP Method
  7.3.  Accept Input Parameters
  7.4.  Capabilities
  7.5.  Uses
  7.6.  Response
8.  Filtered Property Map
  8.1.  Media Type
  8.2.  HTTP Method
  8.3.  Accept Input Parameters
  8.4.  Capabilities
  8.5.  Uses
  8.6.  Filtered Property Map Response
  8.7.  Entity Property Type Defined in This Document
    8.7.1.  Entity Property Type: pid
9.  Impact on Legacy ALTO Servers and ALTO Clients
  9.1.  Impact on Endpoint Property Service
  9.2.  Impact on Resource-Specific Properties
  9.3.  Impact on Other Properties
10. Examples
  10.1.  Network Map
  10.2.  Property Definitions
  10.3.  Information Resource Directory (IRD)
  10.4.  Full Property Map Example
  10.5.  Filtered Property Map Example #1
  10.6.  Filtered Property Map Example #2
  10.7.  Filtered Property Map Example #3
  10.8.  Filtered Property Map Example #4
  10.9.  Filtered Property Map for ANEs Example #5
11. Security Considerations
12. IANA Considerations
  12.1.  application/alto-propmap+json Media Type
  12.2.  alto-propmapparams+json Media Type
  12.3.  ALTO Entity Domain Types Registry
    12.3.1.  Consistency Procedure between ALTO Address Types
            Registry and ALTO Entity Domain Types Registry
    12.3.2.  ALTO Entity Domain Type Registration Process
  12.4.  ALTO Entity Property Types Registry
13. References
  13.1.  Normative References
  13.2.  Informative References
Appendix A.  Features Introduced with the Entity Property Maps
        Extension
Acknowledgments
Authors' Addresses

Up next is Section 1, the Introduction, plus its 1.1 Terminology and Notation subsection, and then Section 2, Requirements Language ๐Ÿฆ‹โœจ

1. Introduction โœจ

Okay so the ALTO Protocol [RFC7285] brings in this super cute idea of "properties" that get attached to "endpoint addresses" ๐ŸŽ€. It also defines the Endpoint Property Service (EPS), which lets ALTO clients fetch those properties ๐Ÿ’…. Iconic, right? But ngl, the EPS in [RFC7285] has at least three limitations, and we're gonna go through each one ๐Ÿซถ.

First, the EPS only lets properties be associated with endpoints that have individual communication addresses, like IPv4 and IPv6 addresses. Bestie, it's reasonable to think that collections of endpoints identified by Provider-Defined Identifiers (PIDs) could have properties too ๐ŸŒธ. Recent ALTO use cases also show that properties of entities like Abstract Network Elements, as defined in [PATH-VECTOR], are useful ๐Ÿ‘‘. But the current EPS is limited to individual endpoints, so it can't be applied to those entities ๐Ÿ˜ญ.

Second, the EPS only allows endpoints identified by global communication addresses. Hmm, but an endpoint address might be a local IP address or an anycast IP address, and those may not be globally unique ๐Ÿ™ˆ. An entity like a PID can also have an identifier that isn't globally unique. The same PID can show up in multiple network maps, and in each map that PID can point to a totally different set of addresses ๐Ÿฆ‹.

Third, in Section 11.4 of [RFC7285], the EPS is only defined as a POST-mode service. That means ALTO clients have to ask for properties of an explicit set of endpoint addresses ๐Ÿ’€. Meanwhile, Section 11.2.3 of [RFC7285] defines a GET-mode cost map resource that returns all available costs. So an ALTO Client can grab the full set of costs once and then do cost lookups without bugging the ALTO server again ๐Ÿงš. [RFC7285] doesn't define a similar service for endpoint properties. At first, a map of endpoint properties might seem impractical, since it could mean listing the property value for every possible endpoint. The number of endpoint addresses an ALTO server is involved with can be huge ๐Ÿ˜ณ. To avoid enumerating a massive number of addresses inefficiently, the ALTO server might define properties for a big enough subset of endpoints and then use an aggregation representation to reference endpoints, so enumeration stays efficient. This is especially true if blocks of endpoint addresses with a common prefix share the same property value. Entities in other domains may also allow aggregated representation and be enumerable too โœจ.

To fix these three limitations, this document specifies an ALTO Protocol extension for defining and retrieving ALTO properties:

  • The first limitation is addressed by introducing a generic concept called ALTO entity. An entity generalizes an endpoint and may represent a PID, a network element, a cell in a cellular network, an Abstract Network Element [PATH-VECTOR], or other physical or logical objects involved in a network topology ๐ŸŒˆ. Each entity is included in a collection called an ALTO entity domain. Since each ALTO entity domain includes only one type of entity, each entity domain can be classified by the type of enclosed entities ๐Ÿ—‚๏ธ.
  • The second limitation is addressed by using resource-specific entity domains. A resource-specific entity domain contains entities that are defined and identified with respect to a given ALTO information resource, and that resource provides the scoping ๐ŸŽฏ. For example, an entity domain containing PIDs is identified with respect to the network map where those PIDs are defined. Likewise, an entity domain containing local IP addresses may be defined with respect to a local network map ๐Ÿก.
  • The third limitation is addressed by defining two new types of ALTO information resources: property map (Section 7) and filtered property map (Section 8). The property map is requested using the HTTP GET method. It returns the property values for all entities in one or more entity domains, and it's analogous to a network map or a cost map in Section 11.2 of [RFC7285] ๐Ÿ“. The filtered property map is requested using the HTTP POST method. It returns the values for sets of properties and entities that the client asks for, and it's analogous to a filtered network map or a filtered cost map ๐Ÿ’œ.

The entity property maps extension described in this document has a bunch of features, summarized in Appendix A. Table 11 there lists the features and points to the sections of this document that give their high-level and normative descriptions ๐Ÿ“‹.

The protocol extension defined here can be augmented, and that's the best part ๐Ÿ™Œ. New entity domain types can be defined without revising this specification. Similarly, new cost metrics and new endpoint properties can be defined in other documents without revising the protocol specification defined in [RFC7285] ๐Ÿ’–.

1.1. Terminology and Notation ๐Ÿฆ‹

This document uses the following terms and abbreviations, which get further defined later in the document. This document introduces the feature "entity property map," but it uses both the term "property map" and "entity property map" to refer to this feature ๐Ÿ’….

  • Transaction: A request/response exchange between an ALTO client and an ALTO server.
  • Client: When used with a capital "C", this term refers to an ALTO client. The expressions "ALTO client", "ALTO Client", and "Client" are equivalent ๐Ÿซถ.
  • Server: When used with a capital "S", this term refers to an ALTO server. The expressions "ALTO server", "ALTO Server", and "Server" are equivalent ๐Ÿ–ฅ๏ธ.
  • EPS: An abbreviation for Endpoint Property Service ๐ŸŒธ.

This document uses the notation defined in Section 8.2 of [RFC7285] โœ๏ธ.

2. Requirements Language ๐Ÿ“œ

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here ๐Ÿ”ฅ.

3. Basic Features of the Entity Property Map Extension ๐ŸŽ€

This section gives a high-level overview of the basic features involved in ALTO entity property maps. It assumes the reader is already familiar with the ALTO Protocol [RFC7285] ๐Ÿง . The purpose of this extension is to convey properties for objects that extend ALTO endpoints. These objects are called ALTO Entities, or entities for short โœจ.

The features introduced in this section can be used standalone. However, in some cases these features may depend on particular information resources and need to be defined with respect to them. To handle that, Section 4 introduces additional features that extend the ones presented in this section ๐Ÿงฉ.

3.1. Entity ๐ŸŒท

The concept of an ALTO entity generalizes the concept of an ALTO endpoint defined in Section 2.1 of [RFC7285]. An entity can be an endpoint defined by its network address, but it can also be an object that has a defined mapping to one or more network addresses, or an object that isn't related to any network address at all ๐Ÿซง. So whereas all endpoints are entities, not all entities are endpoints. Not me having a whole concept about this ๐Ÿ™ˆ.

Examples of entities are:

  • an ALTO endpoint that represents an application or a host identified by a communication address (for example, an IPv4 or IPv6 address) in a network ๐Ÿ’ป,
  • a PID, defined in [RFC7285], that has a provider-defined, human-readable identifier specified by an ALTO network map. That network map maps a PID to a set of IPv4 and IPv6 addresses ๐Ÿ—บ๏ธ,
  • an Autonomous System (AS) that has an AS number (ASN) as its identifier and maps to a set of IPv4 and IPv6 addresses, which is defined in [RFC9241] ๐ŸŒ,
  • a country with a code specified in [ISO3166-1], to which applications such as content delivery network (CDN) providers associate properties and capabilities, which is defined in [RFC9241] ๐Ÿ‡บ๐Ÿ‡ณ,
  • a TCP or UDP network flow that is identified by a 5-tuple specifying its source and destination addresses and port numbers, and the IP protocol (TCP or UDP) ๐Ÿ”€,
  • a routing element, as specified in [RFC7921], that is associated with routing capabilities information, or ๐Ÿ›ฃ๏ธ
  • an Abstract Network Element, as specified in [PATH-VECTOR], that represents an abstraction of a network part such as a router, one or more links, a network domain, or their aggregation ๐Ÿ‘‘.

Some of the example entities listed above have already been documented as ALTO entities. The other examples are provided for illustration as potential entities ๐Ÿ’ญ.

3.2. Entity Domain ๐Ÿ—‚๏ธ

An entity domain defines a set of entities of the same semantic type. An entity domain is characterized by a type and identified by a name ๐Ÿท๏ธ.

In this document, an entity is owned by exactly one entity domain name. An entity identifier points to exactly one entity. If two entities in two different entity domains refer to the same physical or logical object, they are treated as different entities ๐Ÿ™…โ€โ™€๏ธ. For example, if an end host has both an IPv4 and an IPv6 address, those two addresses are treated as two entities, defined respectively in the ipv4 and ipv6 entity domains ๐Ÿ’–.

3.2.1. Entity Domain Type ๐Ÿง

The entity domain type defines the semantics of the type of entity found in an entity domain. Entity domain types can be defined in different documents ๐Ÿ“š. For example, this document defines the entity domain types ipv4 and ipv6 in Section 6.1 and pid in Section 6.2. The entity domain type ane, which defines Abstract Network Elements (ANEs), is introduced in [PATH-VECTOR]. The countrycode entity domain type, which defines country codes, is introduced in [RFC9241]. An entity domain type MUST be registered with IANA, as specified in Section 12.3.2 ๐Ÿซถ. Obviously, no unregistered vibes allowed ๐Ÿ’….

3.2.2. Entity Domain Name ๐ŸŒˆ

In this document, the identifier of an entity domain is mostly called "entity domain name" ๐Ÿท๏ธ. The identifier of an entity domain is scoped to an ALTO server. An entity domain identifier can sometimes be identical to the identifier of its relevant entity domain type. This happens when the entities of a domain have an identifier that points to the same object throughout all the information resources of the Server that provide entity properties for this domain. For example, a domain of type ipv4 containing entities identified by a public IPv4 address can be named ipv4, because its entities are uniquely identified across all the Server resources ๐ŸŽฏ.

In some cases, the name of an entity domain can't simply be its entity domain type. That's because for some domain types, entities are defined relative to a given information resource. This is the case for entities of domain type pid. A PID is defined relative to a network map ๐Ÿ—บ๏ธ. For example, an entity mypid10 of domain type pid may be defined in a given network map and be undefined in other network maps. The entity mypid10 may even be defined in two different network maps, and in each of those maps it may map to a different set of endpoint addresses ๐Ÿ˜ตโ€๐Ÿ’ซ. In this case, naming an entity domain only by its type pid does not guarantee that its set of entities is owned by exactly one entity domain. Big oops energy ๐Ÿ’€.

Sections 4.2 and 5.1.2 describe how a domain is uniquely identified across the ALTO server by a name that associates the domain type and the related information resource ๐Ÿ”‘.

3.3. Entity Property Type ๐Ÿ’…

okay so an entity property is basically a property of an entity ๐Ÿ’– It's similar to the endpoint property from Section 7.1 of [RFC7285], so we're keeping the vibe consistent ๐Ÿซถ An entity property can carry either network-aware or network-agnostic info. Just like an entity domain, it has a type and gets identified by a name. An entity property type MUST be registered with IANA, as specified in Section 12.4. no skipping that step, periodt ๐Ÿ“

Below are some examples with real and fictitious entity domain and property names ๐ŸŒธ

  • an entity in the "ipv4" domain type may have a property whose value is an Autonomous System (AS) number indicating the AS to which this IPv4 address belongs, and another property named "countrycode" indicating a country code mapping to this address, ๐ŸŒ
  • an entity identified by its country code in the entity domain type "countrycode", defined in [RFC9241], may have a property indicating what delivery protocol is used by a CDN, or ๐Ÿ“บ
  • an entity in the "netmap1.pid" domain may have a property that indicates the central geographical location of the endpoints it includes ๐Ÿ“

It should be noted that some identifiers may be used for both an entity domain type and a property type. For example: ๐Ÿ‘€

  • the identifier "countrycode" may point to both the entity domain type "countrycode" and the fictitious property type "countrycode".
  • the identifier "pid" may point to both the entity domain type "pid" and the property type "pid".

Likewise, the same identifier may point to both a domain name and a property name. For example, the identifier "netmap10.pid" may point to either the domain defined by the PIDs of network map "netmap10", or to a property that returns, for an entity defined by its IPv4 address, the PID of "netmap10" that contains this entity. Such cases are further explained in Section 4. ๐Ÿงฉ

3.4. New Information Resource and Media Type: ALTO Property Map ๐ŸŽ€

This document introduces a brand-new ALTO information resource called property map โœจ An ALTO property map provides a set of properties for one or more sets of entities. A property can apply to different entity domain types and names. For example, an ALTO property map may define the "ASN" property for both "ipv4" and "ipv6" entity domains. main character energy ๐Ÿ‘‘

The present extension also introduces a new media type ๐Ÿฆ‹

This document uses the same definition of an information resource as Section 9.1 of [RFC7285]. ALTO uses media types to uniquely indicate the data format used to encode the content transmitted between an ALTO server and an ALTO client in the HTTP entity body. In this case, an ALTO property map resource is defined by the media type application/alto-propmap+json. ๐Ÿ“ฆ

A property map can be queried as a GET-mode resource, which conveys all properties for all entities indicated in its capabilities. It can also be queried as a POST-mode resource, which conveys a selection of properties for a selection of entities. ๐Ÿ”

4. Advanced Features of the Entity Property Map Extension ๐Ÿ”ฅ

This section gives a high-level overview of the advanced features involved in ALTO entity property maps. Most of these features extend the features defined in Section 3. ๐Ÿ’œ

4.1. Entity Identifier and Entity Domain Name ๐ŸŒˆ

In [RFC7285], an endpoint has an identifier that is explicitly associated with the "ipv4" or "ipv6" address domain. Examples are "ipv4:192.0.2.14" and "ipv6:2001:db8::12" ๐Ÿซง

In this document, example IPv4 and IPv6 addresses and prefixes are taken from the address ranges reserved for documentation by [RFC5737] and [RFC3849]. ๐Ÿ“š

In this document, an entity must be owned by exactly one entity domain name, and an entity identifier must point to exactly one entity. To ensure this, an entity identifier is explicitly attached to the name of its entity domain, and an entity domain type characterizes the semantics and identifier format of its entities. This is the kind of rule that keeps everything from getting messy ๐Ÿงผ

The encoding format of an entity identifier is further specified in Section 5.1.3 of this document.

For instance: ๐Ÿ“

  • if an entity is an endpoint with IPv4 address "192.0.2.14", its identifier is associated with entity domain name "ipv4" and is "ipv4:192.0.2.14";
  • if an entity is a PID named "mypid10" in network map resource "netmap2", its identifier is associated with entity domain name "netmap2.pid" and is "netmap2.pid:mypid10".

4.2. Resource-Specific Entity Domain Name ๐Ÿฆ‹

Some entities are defined and identified uniquely and globally in the context of an ALTO server. This is the case, for instance, when entities are endpoints identified by a reachable IPv4 or IPv6 address. The entity domain for such entities can be globally defined and named "ipv4" or "ipv6". Those entity domains are called resource-agnostic entity domains in this document, as they are not associated with any specific ALTO information resources. ๐ŸŒ

Some other entities and entity types are only defined relative to a given information resource. This is the case for entities of domain type "pid", which can only be understood with respect to the network map where they are defined. For example, a PID named "mypid10" may be defined to represent a set S1 of IP addresses in a network map resource named "netmap1". Another network map "netmap2" may use the same name "mypid10" and define it to represent another set S2 of IP addresses. The identifier "pid:mypid10" may thus point to different objects, because the information on the originating information resource is lost. ๐Ÿ˜ตโ€๐Ÿ’ซ

To solve this ambiguity, the present extension introduces the concept of resource-specific entity domain. This concept applies to domain types where entities are defined relative to a given information resource. It can also apply to entity domains that are defined locally, such as local networks of objects identified with a local IPv4 address. ๐Ÿ 

In such cases, an entity domain type is explicitly associated with an identifier of the information resource where these entities are defined. Such an information resource is referred to as the "specific information resource". Using a resource-aware entity domain name, an ALTO property map can unambiguously identify distinct entity domains of the same type, on which entity properties may be queried. Examples of resource-specific entity domain names may look like "netmap1.pid" or "netmap2.pid". So a name association such as "netmap1.pid:mypid10" and "netmap2.pid:mypid10" distinguishes the two abovementioned PIDs that are both named "mypid10" but live in two different resources, "netmap1" and "netmap2". ๐Ÿซถ

An information resource is defined in the scope of an ALTO server, and so is an entity domain name. The format of a resource-specific entity domain name is further specified in Section 5.1.2. ๐Ÿ“

4.3. Resource-Specific Entity Property Value ๐ŸŒธ

Like entity domains, some types of properties are defined relative to an information resource. That is, an entity may have a property of a given type whose values are associated with different information resources. ๐Ÿ’ญ

For example, suppose entity "192.0.2.34" defined in the "ipv4" domain has a property of type "pid" whose value is the PID to which address "192.0.2.34" is attached in a network map. The mapping of network addresses to PIDs is specific to a network map and is probably different from one network map resource to another. Thus, if a property "pid" is defined for entity "192.0.2.34" in two different network maps "netmap1" and "netmap2", the value for this property can be a different value in "netmap1" and "netmap2". ๐Ÿ—บ๏ธ

To support information-resource-dependent property values, this document uses the same approach as in Section 10.8.1 ("Resource-Specific Endpoint Properties") of [RFC7285]. When a property value depends on a given information resource, the name of this property MUST be explicitly associated with the information resource that defines it. ๐Ÿ”‘

For example, the property "pid" queried on entity "ipv4:192.0.2.34" and defined in both "netmap1" and "netmap2" can be named "netmap1.pid" and "netmap2.pid". This allows a Client to get a property of the same type, but defined in different information resources, with a single query. Specifications for the property name format are provided in Section 5.2. โญ

4.4. Entity Hierarchy and Property Inheritance ๐Ÿ‘‘

For some domain types, there is an underlying structure that allows entities to be efficiently grouped into a set and be defined by the identifier of this set. This is the case for domain types "ipv4" and "ipv6", where individual Internet addresses can be grouped in blocks. When the same property value applies to a whole set, a Server can define a property for the identifier of this set instead of enumerating all the entities and their properties. This allows a substantial reduction of transmission payload for both the Server and the Client. For example, all the entities included in the set defined by the address block "ipv6:2001:db8::1/64" share the same properties and values defined for this block. ๐Ÿงฎ

Additionally, entity sets sometimes are related by inclusion, hierarchy, or other relations. This allows defining inheritance rules for entity properties that propagate properties among related entity sets. The Server and the Client can use these inheritance rules for further payload savings. Entity hierarchy and property inheritance rules are specified in the documents that define the applicable domain types. The present document defines these rules for the "ipv4" and "ipv6" domain types. ๐Ÿค“

For applicable domain types, this document introduces entity property inheritance rules with the following concepts: entity hierarchy, property inheritance, and property value unicity. A detailed specification of entity hierarchy and property inheritance rules is provided in Section 5.1.4. ๐Ÿง 

4.4.1. Entity Hierarchy ๐ŸŒณ

An entity domain may allow the use of a single identifier to identify a set of related individual entities. For example, a Classless Inter-Domain Routing (CIDR) block can be used to identify a set of IPv4 or IPv6 entities. A CIDR block is called a hierarchical entity identifier, as it can reflect inclusion relations among entity sets. That is, in an entity hierarchy, "supersets" are defined at upper levels and include "subsets" defined at lower levels. For example, the CIDR "ipv4:192.0.1.0/24" includes all the individual IPv4 entities identified by the CIDR "ipv4:192.0.1.0/26". This document will sometimes use the term "hierarchical address" to refer to a hierarchical entity identifier. ๐Ÿช†

4.4.2. Property Inheritance

okay so a property can be defined for a hierarchical entity identifier ๐ŸŒธ while being undefined for the individual entities covered by that identifier. In that case, those individual entities inherit the property value defined for the identifier that covers them ๐Ÿฆ‹ For example, say a property map defines a property P and assigns it the value V1 only for the hierarchical entity identifier ipv4:192.0.1.0/24, not for the individual entities in that block. Say inheritance rules are also specified for CIDR blocks in the ipv4 domain type โœจ When a Client receives this property map, it can infer that the entity ipv4:192.0.1.1 inherits the property value V1 of the block ipv4:192.0.1.0/24, because the address ipv4:192.0.1.1 is included in the CIDR block ipv4:192.0.1.0/24 ๐Ÿ’…

Property value inheritance rules also apply among entity sets ๐Ÿ’œ A property map may define values for an entity set that belongs to a hierarchy, but not for the "subsets" covered by that set identifier. In this case, inheritance rules must specify how entities in "subsets" inherit property values from their "superset" ๐Ÿซถ For instance, say a property P is defined only for the entity set ipv4:192.0.1.0/24. We know that the entity set ipv4:192.0.1.0/30 is included in ipv4:192.0.1.0/24. So the entities of ipv4:192.0.1.0/30 may inherit the value of property P from the set ipv4:192.0.1.0/24, if an inheritance rule from ipv4 CIDR blocks to included ipv4 CIDR blocks is specified ๐ŸŽ€

4.4.3. Property Value Unicity

ngl this one is so important ๐Ÿงš The inheritance rules must ensure that an entity belonging to a hierarchical set of entities inherits no more than one property value, for the sake of consistency. Like, a property map can define a property for a hierarchy of entity sets that inherits property values from one or more supersets (located at upper levels) ๐Ÿ’€ On the other hand, a property value defined for a subset (located at a lower level) may be different from the value defined for a superset. In that case, subsets may potentially end up with different property values ๐Ÿ™ˆ This may happen with address blocks that have increasing prefix length, where a property value becomes increasingly accurate and may therefore differ. For example, a fictitious property such as "geo-location" or "average transfer volume" may be defined at a progressively finer grain for lower-level subsets of entities defined with progressively longer CIDR prefixes. It seems more interesting to have property values of progressively higher accuracy โœจ A unicity rule applied to the entity domain type must specify an arbitration rule among the different property values for an entity ๐Ÿ‘‘ An example illustrating the need for such rules is provided in Section 6.1.3.

4.5. Supported Properties for Entity Domains in Property Map Capabilities

Bestie, not every property type applies to every domain type ๐ŸŒˆ A property type is not necessarily applicable to any domain type, or an ALTO Server may choose not to provide a property for all applicable domains. For instance, a property type reflecting link bandwidth is likely not defined for entities of a domain of type countrycode. So an ALTO Server providing property maps needs to specify the properties that can be queried on the different entity domains it supports ๐Ÿ“

This document explains how the Information Resource Directory (IRD) capabilities of a property map resource unambiguously expose which properties a Client can query on a given entity domain:

  • a field named mappings lists the names of the entity domains supported by the property map, and
  • for each listed entity domain, a list of the names of the applicable properties is provided.

An example is provided in Section 10.3. The mappings field associates entity domains and properties that can be resource-agnostic or resource-specific. This lets a Client formulate compact and unambiguous entity property queries, possibly relating to one or more information resources. In particular:

  • it prevents a Client from querying a property for entity domains for which it is not defined;
  • it allows a Client to query, for an entity E, values for a property P that are defined in several information resources; and
  • it allows a Client to query a property P on entities that are defined in several information resources.

Further details are provided in Section 7.4. ๐Ÿฆ‹

4.6. Defining Information Resource for Resource-Specific Entity Domains

Here's the thing ๐Ÿ“ A Client that wants to query entity properties belonging to a domain needs to know how to retrieve those entities. To do this, the Client can look up the mappings field exposed in the IRD capabilities of a property map; see Section 4.5. This field, in its keys, exposes all the entity domains supported by the property map. The syntax of the entity domain identifier specified in Section 5.1.2 lets the Client infer whether the entity domain is resource-specific or not. The Client can extract, if applicable, the identifier of the specific resource, query the resource, and retrieve the entities. For example:

  • an entity domain named netmap1.ipv4 includes the IPv4 addresses that appear in the ipv4 field of the endpoint address group of each PID in the network map netmap1, and that have no meaning outside netmap1 because, for instance, these are local addresses not reachable outside some private network;
  • an entity domain named netmap1.pid includes the PIDs listed in network map netmap1; and
  • an entity domain named ipv4 is resource-agnostic and covers all the reachable IPv4 addresses.

Besides, it is not possible to prevent a Server from mistakenly exposing inappropriate associations of information resources and entity domain types ๐Ÿ˜ญ To prevent failures due to invalid queries, it is necessary to inform the Client which associations are allowed. An informed Client will just ignore inappropriate associations exposed by a Server and avoid error-prone transactions with the Server ๐Ÿซถ

For example, the association costmap3.pid is not allowed for the following reason: although a cost map exposes PID identifiers, it does not define the set of addresses included in this PID. Neither does a cost map list all the PIDs on which properties can be queried, because a cost map only exposes PID pairs on which a queried cost type is defined. Therefore, the resource costmap3 does not enable a Client to extract information on the existing PID entities or on the addresses they contain ๐Ÿ™…โ€โ™€๏ธ

Instead, the cost map uses a network map where all the PIDs used in a cost map are defined together with the addresses contained by the PIDs. This network map is qualified in this document as the defining information resource for the entity domain of type pid, and this concept is explained in Section 4.6.1 โœจ

4.6.1. Defining Information Resource and Its Media Type

For the reasons explained in Section 4.6, this document introduces the concept of "Defining Information Resource and its Media Type" ๐ŸŽ€

A defining information resource for an entity domain D is the information resource where entities of D are defined. That is, all the information on the entities of D can be retrieved in this resource. A defining information resource is defined for resource-specific entity domains. It does not exist for entity domains that are not resource-specific, such as ipv4 or ipv6. Neither does it exist for entity domains that cover entity identifiers already defined in other standardization documents, as is the case for country code identifiers standardized in [ISO3166-1] or AS numbers allocated by IANA. This is useful for entity domain types that are by essence domain-specific, such as the domain type pid. It is also useful for resource-specific entity domains constructed from resource-agnostic domain types, such as network-map-specific domains of local IPv4 addresses ๐ŸŒˆ

The defining information resource of a resource-specific entity domain D, when it exists, is unique and has the following characteristics:

  • it has an entry in the IRD;
  • it defines the entities of D;
  • it does not use another information resource that defines these entities;
  • it defines and exposes entity identifiers that are all persistent; and
  • its media type is equal to the one that is specified for the defining information resource of an entity domain type.

A fundamental characteristic of a defining information resource is its media type ๐ŸŒธ There is a unique association between an entity domain type and the media type of its defining information resource. When an entity domain type allows associations with defining information resources, the media type of the potential defining information resource MUST be specified:

  • in the document that defines this entity domain type, and
  • in the ALTO Entity Domain Types IANA registry.

When the Client wants to use a resource-specific entity domain, it needs to be cognizant of the media type of its defining information resource. If the Server exposes a resource-specific entity domain with a noncompliant media type for the defining resource, the Client MUST ignore the entities from that entity domain to avoid errors ๐Ÿšซ

4.6.2. Examples of Defining Information Resources and Their Media Types

Here are examples of defining information resource types and their media types, associated with different entity domain types ๐Ÿงš

  • For entity domain type pid, the media type of the specific resource is application/alto-networkmap+json, because PIDs are defined in network map resources.
  • For entity domain types ipv4 and ipv6, the media type of the specific resource is application/alto-networkmap+json, because IPv4 and IPv6 addresses covered by the Server are defined in network map resources.
  • For entities of domain type ane, [PATH-VECTOR] defines entities named "ANE", where ANE stands for Abstract Network Element, and the entity domain type ane. An ANE may have a persistent identifier, say entity-4, that is provided by the Server as a value of the persistent-entity-id property of this ANE. Further properties may then be queried on an ANE by using its persistent entity identifier. These properties are available from a persistent property map that defines properties for a specific ane domain. Together with the persistent identifier, the Server also provides the property map resource identifier where the ane domain containing entity-4 is defined. The definition of the ane entity domain containing entity-4 is thus specific to the property map. Therefore, for entities of domain type ane that have a persistent identifier, the media type of the defining information resource is application/alto-propmap+json ๐Ÿ’–
  • Last, the entity domain types asn and countrycode, defined in [RFC9241], do not have a defining information resource. Indeed, the entity identifiers in these two entity domain types are already standardized in documents that the Client can use ๐ŸŒŸ

4.7. Defining Information Resources for Resource-Specific Property Values โœจ

okay so remember in Section 4.3 when we said a property type can have values that depend on the resource? ๐Ÿง  The big example is pid. Its values are basically defined relative to one specific network map ๐Ÿ—บ๏ธ. So the PID returned for an IPv4 address belongs to the network map that defines it, and it can be totally different in another network map. ๐ŸŒธ

Another example is in [RFC9241], which defines property type cdni-capabilities ๐Ÿฆ‹. Its value is specific to a Content Delivery Network Interconnection (CDNI) Advertisement resource, which gives a list of CDNI capabilities. The property shows up for entity domain types ipv4, ipv6, asn, and countrycode. Ngl, though, a CDNI Advertisement resource doesn't define PID values for IPv4 addresses, and a network map doesn't define CDNI capabilities for IPv4 addresses either ๐Ÿ’€.

Just like with resource-specific entity domains, the Client needs to be cognizant of appropriate associations of information resource and property types ๐Ÿ‘‘. So when you specify and register a property type whose values are resource-specific, the media type of its defining information resource needs to be specified. For example:

  • The media type of the defining information resource for property type pid is application/alto-networkmap+json. ๐Ÿ’–
  • The media type of the defining information resource for property type cdni-capabilities defined in [RFC9241] is application/alto-cdni+json. ๐Ÿซถ

5. Protocol Specification: Basic Data Types ๐ŸŽ€

5.1. Entity Domain ๐ŸŒˆ

5.1.1. Entity Domain Type ๐Ÿฆ‹

An entity domain has a type, which is uniquely identified by a string that MUST be no more than 64 characters, and MUST NOT contain characters other than US-ASCII alphanumeric characters (U+0030-U+0039, U+0041-U+005A, and U+0061-U+007A), the hyphen-minus ('-', U+002D), the colon (':', U+003A), or the low line ('_', U+005F). ๐Ÿ’…

The usage of colon (':', U+003A) MUST obey the rules below:

  • The colon (':', U+003A) character MUST NOT appear more than once;
  • The colon character MUST NOT be used unless within the string "priv:";
  • The string "priv:" MUST NOT be used unless it starts the string that identifies an entity domain type; and
  • For an entity domain type identifier with the "priv:" prefix, an additional string (e.g., company identifier or random string) MUST follow "priv:" to reduce potential collisions. ๐Ÿ”’

For example, the strings "ipv4", "ipv6", "pid", and "priv:example-test-edt", are valid entity domain types. "ipv4.anycast", "pid.local", and "priv:" are invalid. ๐Ÿ™ˆ

Although "_", "-", "__--" are valid entity domain types, it is desirable to add characters, such as alphanumeric ones, for better intelligibility. Fr fr, make it readable, bestie โœจ.

The type EntityDomainType is used in this document to denote a JSON string meeting the preceding requirements.

An entity domain type defines the semantics of a type of entity, independently of any specifying resource. All entity domain types that are not prefixed with "priv:" MUST be registered with IANA in the "ALTO Entity Domain Types" registry, defined in Section 12.3, following the procedure specified in Section 12.3.2 of this document. The format of the entity identifiers (see Section 5.1.3) in that entity domain type, as well as any hierarchical or inheritance rules (see Section 5.1.4) for those entities, MUST be specified in the IANA registration. ๐Ÿ“‹

Entity domain type identifiers prefixed with "priv:" are reserved for Private Use (see [RFC8126]) without a need to register with IANA. The definition of a private-use entity domain type MUST apply the same way in all property maps of an IRD where it is present. ๐Ÿงš

5.1.2. Entity Domain Name ๐Ÿ’œ

As discussed in Section 3.2, an entity domain is characterized by a type and identified by a name.

This document distinguishes three categories of entity domains: resource-specific entity domains, resource-agnostic entity domains, and self-defined entity domains. Their entity domain names are constructed as specified in the following subsections. It's giving organized ๐Ÿ“š.

Each entity domain is identified by a unique entity domain name. Borrowing the symbol "::=" from the Backus-Naur Form notation [RFC5511], the format of an entity domain name is defined as follows:

EntityDomainName ::= [ [ ResourceID ] '.' ] EntityDomainType

The presence and construction of the component

"[ [ ResourceID ] '.' ]"

depends on the category of entity domain.

Note that the '.' separator is not allowed in EntityDomainType, and hence there is no ambiguity on whether an entity domain name refers to a resource-agnostic entity domain or a resource-specific entity domain. No confusion, no drama ๐Ÿซถ.

Note also that Section 10.1 of [RFC7285] specifies the format of the PID name, which is the format of the resource identifier including the following specification:

The '.' separator is reserved for future use and MUST NOT be used unless specifically indicated in this document, or an extension document.

The present extension keeps the format specification of [RFC7285], hence the '.' separator MUST NOT be used in an information resource identifier. โš ๏ธ

5.1.2.1. Resource-Specific Entity Domain ๐ŸŒธ

A resource-specific entity domain is identified by an entity domain name constructed as follows. It MUST start with a resource identifier using the ResourceID type defined in Section 10.2 of [RFC7285], followed by the '.' separator (U+002E), followed by a string of the type EntityDomainType specified in Section 5.1.1.

For example, if an ALTO server provides two network maps "netmap-1" and "netmap-2", these network maps can define two resource-specific domains of type "pid", respectively identified by "netmap-1.pid" and "netmap-2.pid". ๐Ÿ—บ๏ธโœจ

5.1.2.2. Resource-Agnostic Entity Domain ๐ŸŒท

A resource-agnostic entity domain contains entities that are identified independently of any information resource. The identifier of a resource-agnostic entity domain is simply the identifier of its entity domain type. For example, "ipv4" and "ipv6" identify the two resource-agnostic Internet address entity domains defined in Section 6.1. ๐ŸŒ

5.1.2.3. Self-Defined Entity Domain ๐Ÿ“

A property map can define properties for entities that are specific to a unique information resource, which is the property map itself. This may be the case when an ALTO Server provides properties for a set of entities that are defined only in this property map, are not relevant to another one, and do not depend on another specific resource.

For example: a specialized property map may define a domain of type "ane", defined in [PATH-VECTOR], that contains a set of ANEs representing data centers that each have a persistent identifier and are relevant only to this property map. Main character energy for those data centers ๐Ÿ‘‘.

In this case, the entity domain is qualified as "self-defined". The identifier of a self-defined entity domain can be of the format:

    EntityDomainName ::= '.' EntityDomainType

where '.' indicates that the entity domain only exists within the property map resource using it.

A self-defined entity domain can be viewed as a particular case of resource-specific entity domain, where the specific resource is the current resource that uses this entity domain. In that case, for the sake of simplification, the component ResourceID MUST be omitted in its entity domain name. Simple and iconic ๐Ÿ’…๐ŸŽ€.

5.1.3. Entity Identifier ๐Ÿฆ‹

Entities in an entity domain are identified by entity identifiers (EntityID) of the following format:

EntityID ::= EntityDomainName ':' DomainTypeSpecificEntityID

Examples from the Internet address entity domains include individual IP addresses such as "net1.ipv4:192.0.2.14" and "net1.ipv6:2001:db8::12", as well as address blocks such as "net1.ipv4:192.0.2.0/26" and "net1.ipv6:2001:db8::/48". ๐ŸŒˆ

The format of the second part of an entity identifier, DomainTypeSpecificEntityID, depends on the entity domain type and MUST be specified when defining a new entity domain type and registering it with IANA. Identifiers MAY be hierarchical, and properties MAY be inherited based on that hierarchy. The rules defining any hierarchy or inheritance MUST be defined when the entity domain type is registered. ๐Ÿงฉ

The type EntityID is used in this document to denote a JSON string representing an entity identifier in this format.

Note that two entity identifiers with different, valid textual representations may refer to the same entity, for a given entity domain. For example, the strings "net1.ipv6:2001:db8::1" and "net1.ipv6:2001:db8:0:0:0:0:0:1" refer to the same entity in the "ipv6" entity domain. Such equivalences should be established by the object represented by DomainTypeSpecificEntityID. For example, [RFC5952] establishes equivalence for IPv6 addresses, while [RFC4632] does so for IPv4 addresses. Same address, different outfit ๐Ÿงฅโœจ.

5.1.4. Hierarchy and Inheritance ๐Ÿ‘‘

To simplify the representation, some types of entity domains allow the ALTO Client and Server to use a hierarchical entity identifier format to represent a block of individual entities. For instance, in an IPv4 domain "net1.ipv4", a CIDR "net1.ipv4:192.0.2.0/26" covers 64 individual IPv4 entities. In this case, the corresponding property inheritance rule MUST be defined for the entity domain type. The hierarchy and inheritance rule MUST have no ambiguity. Zero vibes of confusion, periodt ๐Ÿ’ฏ.

5.2. Entity Property ๐Ÿ’–

Each entity property has a type to indicate the encoding and the semantics of the value of this entity property, and has a name to identify it. ๐Ÿซถ

5.2.1. Entity Property Type ๐Ÿ’…

Okay bestie, so EntityPropertyType is the name this doc gives to a string that says "this is an entity property type" ๐ŸŽ€. That string MUST be no more than 32 characters, and it MUST NOT contain anything except US-ASCII alphanumerics (U+0030-U+0039, U+0041-U+005A, and U+0061-U+007A), the hyphen-minus ('-', U+002D), the colon (':', U+003A), or the low line ('_', U+005F). The '.' separator is not allowed, and the reason is super important ๐Ÿฆ‹: it's reserved for splitting an entity property type from an information resource identifier when the property is resource-specific.

Now the colon. Section 5.1.1 lets you use ":" with some restrictions on entity domain identifiers, but for entity property type identifiers it's totally fine with no restrictions at all ๐ŸŒˆ. This connects to [RFC7285], where a Server can define properties for the endpoints "ipv4" and "ipv6". In this extension, the ALTO entity domain types "ipv4" and "ipv6" map to the ALTO address types "ipv4" and "ipv6". So properties defined for "ipv4" and "ipv6" endpoints should be reusable on "ipv4" and "ipv6" entities โœจ. If we banned ":" in a non-private entity property type identifier, those old properties would have invalid identifiers and couldn't be reused. Not us breaking the group chat ๐Ÿ™…โ€โ™€๏ธ.

Also, ":" or "_::-" are technically valid entity domain types, but it's way more desirable to use other characters, like alphanumeric ones, so people can actually read them ๐Ÿ“.

Identifiers prefixed with "priv:" are reserved for Private Use [RFC8126], and you don't need to register them with IANA ๐Ÿงš. Every other identifier for entity property types MUST be registered in the "ALTO Entity Property Types" registry, which is defined in Section 12.4. The intended semantics of the entity property type MUST be specified in the IANA registration ๐Ÿ“.

For a "priv:" entity property identifier, you MUST add an extra string after the prefix (like a company identifier or a random string) to cut down on collisions. Basically, "priv:" by itself is not a valid entity property identifier ๐Ÿ™ˆ. A private-use entity property type must apply the same way in all property maps of an IRD where it is present.

Next, how entity property types are different from endpoint property types ๐Ÿ‘‘:

  • Some entity property types only apply to entities in particular entity domain types. For example, the property type "pid" applies to entities in the entity domain types "ipv4" or "ipv6", but it does not apply to entities in an entity domain of type "pid".
  • The intended semantics of a property's value can also depend on the entity domain type. For example, say a property named "geo-location" is defined as the coordinates of a point and is encoded as "latitude longitude [altitude].". When it's applied to an entity that represents a specific host computer, identified by an address in an entity domain of type "ipv4" or "ipv6", the "geo-location" property defines that host's location ๐ŸŒธ. But when it's applied to an entity in a domain of type "pid", the property indicates a location that represents all hosts in that "pid" entity ๐Ÿ˜ญ.

5.2.2. Entity Property Name ๐ŸŽ€

Every entity property is identified by an entity property name, which is a string in this format:

EntityPropertyName ::= [ [ ResourceID ] '.' ] EntityPropertyType

Kind of like the endpoint property type from Section 10.8 of [RFC7285], each entity property can be defined either by the property map itself (self-defined) or by some other specific information resource (resource-specific) ๐Ÿฆ‹.

A resource-specific entity property name starts with a ResourceID string (defined in [RFC7285]), then the '.' separator (U+002E), then an EntityDomainType-typed string. For example, the "pid" properties of an "ipv4" entity defined by two different maps, "net-map-1" and "net-map-2", are identified as "net-map-1.pid" and "net-map-2.pid" respectively ๐Ÿ’œ.

The specific information resource of an entity property can also be the current information resource itself, meaning the property map that defines the property. In that case, the ResourceID in the property name SHOULD be omitted ๐Ÿ’…. For example, the property name ".ASN" applied to an entity identified by its IPv4 address tells you the AS number of the AS that "owns" that entity, and the returned AS number is defined by the property map itself ๐ŸŒˆ.

5.2.3. Format for Entity Property Value โœจ

Section 11.4.1.6 of [RFC7285] says that an implementation of the Endpoint Property Service specified in [RFC7285] SHOULD assume the property value is a JSONString, and it should fail to parse if it isn't ๐Ÿ™ƒ. This document extends the format so a property value can be a JSONValue, not just a JSONString ๐Ÿซถ.

6. Entity Domain Types Defined in This Document ๐Ÿ‘‘

Every entity domain type definition MUST include the entity domain type name and the domain-specific entity identifiers. A definition of an entity domain type MAY include hierarchy and inheritance semantics too ๐Ÿงš. This document defines three initial entity domain types, as follows ๐Ÿ’–.

6.1. Internet Address Domain Types ๐ŸŒ

This document defines two entity domain types, IPv4 and IPv6, for Internet addresses. Both are resource-agnostic entity domain types, so they also define corresponding resource-agnostic entity domains. Since the two domains use the same hierarchy and inheritance semantics, we define those semantics together instead of repeating them for each one ๐Ÿฆ‹.

6.1.1. Entity Domain Type: IPv4 ๐ŸŒธ

6.1.1.1. Entity Domain Type Identifier ๐Ÿ“

The identifier for this entity domain type is "ipv4".

6.1.1.2. Domain-Specific Entity Identifiers ๐ŸŽ€

Individual addresses are strings as specified by the IPv4address rule in Section 3.2.2 of [RFC3986]. Hierarchical addresses are strings as specified by the prefix notation in Section 3.1 of [RFC4632]. An individual Internet address and its corresponding full-length prefix are considered aliases for the same entity, the one you define properties on ๐Ÿ™Œ. So "ipv4:192.0.2.0" and "ipv4:192.0.2.0/32" are equivalent ๐Ÿ’….

6.1.2. Entity Domain Type: IPv6 ๐ŸŒˆ

6.1.2.1. Entity Domain Type Identifier ๐Ÿ’œ

The identifier for this Entity Domain Type is "ipv6".

6.1.2.2. Domain-Specific Entity Identifiers โœจ

Individual addresses are strings as specified by Section 4 of [RFC5952]. Hierarchical addresses are strings as specified by the IPv6 address prefixes notation in Section 2.3 of [RFC4291]. To define properties, an individual Internet address and the corresponding 128-bit prefix are considered aliases for the same entity ๐Ÿฆ‹. That means "ipv6:2001:db8::1" and "ipv6:2001:db8::1/128" are equivalent and have the same set of properties ๐Ÿซถ.

6.1.3. Hierarchy and Inheritance of Internet Address Domains ๐ŸŒŠ

Both Internet address domains let property values be inherited ๐Ÿ’–. Here's the deal: if a property P isn't defined for a specific Internet address I, but P is defined for a hierarchical Internet address C that represents a set of addresses containing I, then I inherits the value of P defined for C ๐ŸŒธ. If more than one hierarchical address defines a value for P, I inherits the value from the hierarchical address with the longest prefix ๐Ÿ‘‘. Note that this longest prefix rule means no multiple value inheritances, and therefore no ambiguity ๐Ÿ™…โ€โ™€๏ธ.

Hierarchical addresses can inherit properties too. For instance, if a property P:

  • is not defined for the hierarchical address C,
  • but is defined for a set of hierarchical addresses where:
    • each address C' in the set contains all IP addresses in C, and
    • C' has a shorter prefix length than C,

then C MUST inherit the property P from the C' having the longest prefix length ๐Ÿ”ฅ.

As an example, say a server defines a property P for the following entities ๐Ÿงš:

                   +--------------------+------+
                   | ipv4:192.0.2.0/26: | P=v1 |
                   +--------------------+------+
                   | ipv4:192.0.2.0/28: | P=v2 |
                   +--------------------+------+
                   | ipv4:192.0.2.0/30: | P=v3 |
                   +--------------------+------+
                   | ipv4:192.0.2.0:    | P=v4 |
                   +--------------------+------+

                     Table 1: Defined Property
                               Values

Then the following entities have the indicated values ๐Ÿ’…:

              +--------------------+---------------+
              | ipv4:192.0.2.0:    | P=v4          |
              +--------------------+---------------+
              | ipv4:192.0.2.1:    | P=v3          |
              +--------------------+---------------+
              | ipv4:192.0.2.16:   | P=v1          |
              +--------------------+---------------+
              | ipv4:192.0.2.32:   | P=v1          |
              +--------------------+---------------+
              | ipv4:192.0.2.64:   | (not defined) |
              +--------------------+---------------+
              | ipv4:192.0.2.0/32: | P=v4          |
              +--------------------+---------------+
              | ipv4:192.0.2.0/31: | P=v3          |
              +--------------------+---------------+
              | ipv4:192.0.2.0/29: | P=v2          |
              +--------------------+---------------+
              | ipv4:192.0.2.0/27: | P=v1          |
              +--------------------+---------------+
              | ipv4:192.0.2.0/25: | (not defined) |
              +--------------------+---------------+

                Table 2: Inherited Property Values

An ALTO server MAY explicitly indicate that a property has no value for a particular entity ๐Ÿ™ˆ. In other words, a server MAY say that property P of entity X is "defined to have no value" instead of "undefined". To indicate "no value", a server MAY do one of two different things ๐Ÿ’œ:

  • If entity X would inherit a value for property P, and the ALTO server decides to say "X has no value for P", then the ALTO server MUST return a "null" value for that property on X. In this case, the ALTO client MUST recognize the JSON "null" value as "no value" and interpret it as "do not apply the inheritance rules for this property on X" ๐Ÿซถ.
  • If the entity would not inherit a value, then the ALTO server MAY return "null" or just omit the property. In this case, the ALTO client cannot infer the value of this property for this entity from the inheritance rules, so the client MUST interpret that this property has no value ๐Ÿ˜ญ.

If the ALTO server does not define any properties for an entity, the server MAY omit that entity from the response ๐ŸŒธ.

6.1.4. Defining Information Resource Media Type for Domain Types IPv4 and IPv6 ๐Ÿ“„

Entity domain types "ipv4" and "ipv6" both allow resource-specific entity domains to be defined. When resource-specific domains are defined with entities of domain type "ipv4" or "ipv6", the defining information resource for that entity domain MUST be a network map ๐Ÿ—บ๏ธ. So the media type of a defining information resource is:

application/alto-networkmap+json

6.2. Entity Domain Type: PID ๐Ÿ“

The PID entity domain associates property values with the PIDs in a network map โœจ. That's why this entity domain always depends on a network map ๐Ÿ’–.

6.2.1. Entity Domain Type Identifier

okay so the identifier for this Entity Domain Type is pid ๐Ÿงš

6.2.2. Domain-Specific Entity Identifiers

the entity identifiers are the PID names of the associated network map ๐Ÿ—บ๏ธโœจ

6.2.3. Hierarchy and Inheritance

there is no hierarchy or inheritance for properties associated with PIDs ๐Ÿ™…โ€โ™€๏ธ they just sit there on their own, no drama

6.2.4. Defining Information Resource Media Type for Domain Type PID

the entity domain type pid lets you define resource-specific entity domains ๐Ÿ’… when you do that with entities of domain type pid, the defining information resource for that domain type MUST be a network map. so the media type of a defining information resource is:

application/alto-networkmap+json

6.2.5. Relationship To Internet Addresses Domains

the PID domain and the Internet address domains are completely independent ๐Ÿฆ‹ the properties on a PID have no relation to the properties on the prefixes or endpoint addresses inside that PID. an ALTO server MAY choose to assign all the properties of a PID to the prefixes in that PID, or only some of them ๐ŸŒธ

for example, say PID1 consists of the prefix ipv4:192.0.2.0/24 and has the property P with value v1. the Internet address entities ipv4:192.0.2.0 and ipv4:192.0.2.0/24 in the IPv4 domain MAY have a value for the property P, and if they do, it is not necessarily v1 ๐Ÿ™ˆ not me assuming it matches!!

6.3. Internet Address Properties vs. PID Properties

okay so the Internet address and PID domains are for completely different domain types, which means the big question is: which entity domain type is the best home for a property? ๐Ÿค” generally, the Internet address domain types are RECOMMENDED for properties that are closely tied to the Internet address, or that are associated with hierarchical addresses and inherited through them ๐Ÿ’œ

the PID domain type is RECOMMENDED for properties that come from how the PID itself is defined, rather than from the Internet address prefixes sitting inside that PID ๐Ÿ‘‘

for example, Internet addresses get handed out to service providers in blocks of prefixes, so an "ISP" property would fit best under the Internet address domain types ๐ŸŒˆ on the flip side, a property that explains why a PID was formed, or how it relates to a provider's network, would fit best under the PID domain type. iconic sorting, honestly โœจ

7. Property Map

a property map returns the properties defined for all the entities in one or more domains ๐Ÿ“ for example, the "location" property of entities in a domain of type "pid", and the "ASN" property of entities in domains of types "ipv4" and "ipv6". Section 10.4 gives an example of a property map request and its response.

downloading the whole property map is one way for the Client to get the entity identifiers it can use as input for a filtered property map request ๐Ÿซถ but a whole property map can be way too chunky for a Client that only wants the list of applicable entity identifiers ๐Ÿ˜ญ how to get the list of entities from a filtered property map in a simplified response is specified in Section 8.

7.1. Media Type

the media type of a property map is application/alto-propmap+json ๐Ÿ’–

7.2. HTTP Method

the property map is requested using the HTTP GET method ๐ŸŽ€

7.3. Accept Input Parameters

a property map has no Accept Input parameters, so there's nothing extra to send ๐Ÿซง

7.4. Capabilities

the capabilities are defined by an object of type PropertyMapCapabilities:

    object {
      EntityPropertyMapping mappings;
    } PropertyMapCapabilities;

    object-map {
      EntityDomainName -> EntityPropertyName<1..*>;
    } EntityPropertyMapping

with the following fields:

  • mappings: a JSON object whose keys are the names of entity domains, and whose values are the supported entity properties of those entity domains ๐Ÿง

7.5. Uses

the "uses" field of a property map resource in an IRD entry specifies the resources in this same IRD that this property map directly depends on ๐Ÿ”— it's an array of resource identifier(s). this array identifies the defining information resources associated with the resource-specific entity domains and properties indicated in this resource. main character energy for the dependency chain ๐Ÿ‘‘

7.6. Response

if the entity domains in this property map depend on other resources, the "dependent-vtags" field in the "meta" field of the response MUST be an array that includes the version tags of those resources ๐Ÿ’… and the order MUST be consistent with the "uses" field of this property map resource. the data component of a property map response is named "property-map", and it's a JSON object of type PropertyMapData, where:

    object {
      PropertyMapData property-map;
    } InfoResourceProperties : ResponseEntityBase;

    object-map {
      EntityID -> EntityProps;
    } PropertyMapData;

    object {
      EntityPropertyName -> JSONValue;
    } EntityProps;

the ResponseEntityBase type is defined in Section 8.4 of [RFC7285] โœจ

so, specifically, a PropertyMapData object has one member for each entity in the property map ๐Ÿฆ‹ each entity's properties get encoded in its matching EntityProps object. EntityProps encodes one name/value pair per property, and the property names are encoded as strings of type PropertyName. a protocol implementation SHOULD assume the property value is either a JSONString or a JSON "null" value, and fail to parse if it's neither, unless the implementation is using an extension to this document that signals when and how property values of other data types show up ๐Ÿ™ƒ

for each entity in the property map:

  • if the entity is in a resource-specific entity domain, the ALTO server MUST only return self-defined properties and resource-specific properties that depend on the same resource as the entity does ๐ŸŽ€ the ALTO client MUST ignore any resource-specific property for this entity if the mapping between that property and this entity is not indicated in the IRD, in the "mappings" capability of the property map resource.
  • if the entity identifier is resource-agnostic, the ALTO server SHOULD return the self-defined properties and all the resource-specific properties defined in the property-defining information resources that are indicated in the IRD, in the "mappings" capability of the property map resource, unless property values can be left out thanks to inheritance rules ๐ŸŒธ

the ALTO server MAY omit property values that are inherited rather than explicitly defined, to get a more compact encoding ๐Ÿ“ฆ which means the ALTO Client MUST NOT assume inherited property values will all be there ๐Ÿ˜ญ if the Client needs inherited values, it MUST use the entity domain's inheritance rules to work them out. detective mode, activated ๐Ÿ•ต๏ธโ€โ™€๏ธ

8. Filtered Property Map

a filtered property map returns the values of a set of properties for a set of entities that the client picks ๐Ÿ’œ

Sections 10.5, 10.6, 10.7, and 10.8 give examples of filtered property map requests and responses ๐Ÿ“

the IRD lists all the names of the supported properties, but only the names of the supported entity domains, not the entity identifiers ๐Ÿ™ˆ so sometimes a client only wants to know which entity identifiers it can feed into a filtered property map request without downloading the full thing, or it wants to check whether some given entity identifiers are eligible for a query. to cover these cases, the filtered property map supports a lightweight response with empty property values ๐Ÿซถ

8.1. Media Type

the media type of a property map resource is application/alto-propmap+json ๐Ÿ’–

8.2. HTTP Method

the filtered property map is requested using the HTTP POST method ๐ŸŽ€

8.3. Accept Input Parameters

the input parameters for a filtered property map request go in the entity body of the POST request ๐Ÿ“ฎ this document specifies them with a data format indicated by the media type application/alto-propmapparams+json, which is a JSON object of type ReqFilteredPropertyMap. ReqFilteredPropertyMap is designed to support these client requests:

  • the client wants the value of a selected set of properties for a selected set of entities;
  • the client wants all property values on all the entities;
  • the client wants all entities for which a property is defined, but isn't interested in their property values; or
  • the client wants to cross-check whether some entity identifiers are present in the filtered property map, but isn't interested in their property values.

the third case is basically the same as querying the whole unfiltered property map, which you can also do with a GET request ๐ŸŒˆ some Clients, however, may prefer to make filtered property map queries all the time, where the filtering parameters may sometimes be empty. consistency is a whole vibe โœจ

the JSON object ReqFilteredPropertyMap is specified as follows:

                 object {
                   EntityID             entities<0..*>;
                   [EntityPropertyName   properties<0..*>;]
                 } ReqFilteredPropertyMap;

with the following fields:

  • entities: a list of entity identifiers for which the specified properties are to be returned. if the list is empty, the ALTO Server MUST interpret it as if it contained a list of all entities currently defined in the filtered property map. the domain of each entity MUST be included in the list of entity domains in this resource's "capabilities" field (see Section 8.4). the ALTO server MUST interpret entries that appear multiple times as if they appeared only once ๐Ÿงฉ
  • properties: a list of properties to be returned for each entity. if the list is empty, the ALTO Server MUST interpret it as if it contained a list of all properties currently defined in the filtered property map. each specified property MUST be included in the list of properties in this resource's "capabilities" field (see Section 8.4). the ALTO server MUST interpret entries that appear multiple times as if they appeared only once. this field is optional. if it's absent, the Server returns a property value equal to the literal string "{}" for all the entity identifiers of the "entities" field for which at least one property is defined ๐Ÿซง

note that the "properties" field is optional ๐Ÿ’… also, when the "entities" field is an empty list, it's a query for all applicable entity identifiers of the filtered property map, with no particular interest in any property. when the "entities" field is not empty, it lets the Client check whether the listed entity identifiers can be used as input to a filtered property map query ๐Ÿ”

8.4. Capabilities

the capabilities are defined by an object of type PropertyMapCapabilities, as defined in Section 7.4 ๐ŸŽ€

8.5. Uses

this is the same as the "uses" field of the property map resource (see Section 7.5) ๐Ÿ”—

8.6. Filtered Property Map Response ๐Ÿ’…

Okay bestie, so the response absolutely has to flag an error if the request is bad. The response MUST indicate an error, using ALTO Protocol error handling, as defined in Section 8.5 of [RFC7285], if the request is invalid. ๐Ÿ™…โ€โ™€๏ธ

Here's how a filtered property map request can go wrong ๐Ÿ‘€:

  • The input field "entities" is absent from the Client request. Then the Server MUST return an E_MISSING_FIELD error, as defined in Section 8.5.2 of [RFC7285]. ๐Ÿ˜ญ
  • An entity identifier in the "entities" field is invalid. This happens when:
    • The domain of this entity is not defined in the "mappings" capability of this resource in the IRD, or
    • The entity identifier is not valid for the entity domain.

A valid entity identifier never generates an error, even if the filtered property map resource doesn't define any properties for it. Totally fair, right? โœจ

If an entity identifier in the "entities" field is invalid, the ALTO server MUST return an E_INVALID_FIELD_VALUE error, defined in Section 8.5.2 of [RFC7285]. The "value" field of that error message SHOULD indicate the provided invalid entity identifier. ๐ŸŽ€

  • A property name in the "properties" field is invalid. This happens when that property name isn't defined in the "properties" capability of this resource in the IRD.

When a filtered property map resource doesn't have a value for a property requested for a particular entity, that's not an error ๐Ÿซถ. In this case, the ALTO server MUST omit that property from the response for that endpoint.

If a property name in the "properties" field is invalid, the ALTO server MUST return an E_INVALID_FIELD_VALUE error, defined in Section 8.5.2 of [RFC7285]. The "value" field of the error message SHOULD indicate the property name. ๐Ÿ’–

Some identifiers can be read as both an entity name and a property name, like "pid" if someone accidentally used it all by itself ๐Ÿ™ˆ. In that case, the Server SHOULD follow Section 8.5.2 of [RFC7285], which says:

For an E_INVALID_FIELD_VALUE error, the server may include an optional field named "field" in the "meta" field of the response, to indicate the field that contains the wrong value.

The response to a valid request is the same as the property map response (see Section 7.6), except that:

  • If the requested entities include entities with a resource-agnostic identifier, the "dependent-vtags" field in its "meta" field MUST include version tags of all dependent resources appearing in the "uses" field. ๐Ÿงš
  • If the requested entities only include entities in resource-specific entity domains, the "dependent-vtags" field in its "meta" field MUST include the version tags of the resources on which the requested resource-specific entity domains and the requested resource-specific properties are dependent. ๐ŸŒธ
  • The response only includes the entities and properties the client asked for. If an entity in the request is identified by a hierarchical identifier (for example, an "ipv4" or "ipv6" prefix), the response MUST return all properties that are present for any address covered by the prefix, even though some of those properties may not be present for every address covered by the prefix. Wild, but it's how it works โœจ.
  • When the input member "properties" is absent from the client request, the Server returns a property map containing all the requested entity identifiers for which one or more properties are defined. For every entity in the returned map, the returned property value is equal to "{}". ๐Ÿฆ‹

The filtered property map response MUST include all the inherited property values for the requested entities and all the entities that are able to inherit property values from the requested entities. To get there, the ALTO server MAY follow two rules:

  • If a property for a requested entity is inherited from another entity that's not in the request, the response MUST include this property for the requested entity. For example, a full property map might skip a property P for an entity A (e.g., "ipv4:192.0.2.0/31") if P can be derived through inheritance from another entity B (e.g., "ipv4:192.0.2.0/30"). A filtered property map request may include only A and not B. In that case, the property P MUST be included in the response for A. ๐Ÿ’œ
  • If there are entities covered by a requested entity but they have different values for the requested properties, the response MUST include all of those entities and the different property values for them. For example, take a request for property P of entity A (e.g., "ipv4:192.0.2.0/31"). If P has value v1 for "A1=ipv4:192.0.2.0/32" and v2 for "A2=ipv4:192.0.2.1/32", then the response SHOULD include A1 and A2. ๐Ÿ”ฅ

For the sake of response compactness, the ALTO server SHOULD obey the following rule:

  • If an entity identifier in the response is already covered by other entity identifiers in the same response, it SHOULD be removed from the response. In the previous example, the entity "A=ipv4:192.0.2.0/31" SHOULD be removed, because A1 and A2 cover all the addresses in A. Less clutter, more slay ๐Ÿงนโœจ.

An ALTO client should be aware that the entities in the response may be different from the entities in its request. Plan accordingly, babe ๐Ÿ’….


8.7. Entity Property Type Defined in This Document ๐ŸŒˆ

This document defines the entity property type "pid". This property type extends the ALTO endpoint property type "pid" defined in Section 7.1.1 of [RFC7285] as follows: the property has the same semantics and applies to IPv4 and IPv6 addresses. The difference is that IPv4 and IPv6 addresses have evolved from the status of endpoints to the status of entities. Glow-up arc unlocked ๐Ÿฆ‹.

The defining information resource for property type MUST be a network map.

8.7.1. Entity Property Type: pid

Identifier: pid

Semantics: the intended semantics are the same as in [RFC7285] for the ALTO endpoint property type "pid".

Media type of defining information resource: application/alto-networkmap+json

Security considerations: for entity property type "pid" are the same as documented in [RFC7285] for the ALTO endpoint property type "pid". ๐Ÿ”


9. Impact on Legacy ALTO Servers and ALTO Clients ๐Ÿงธ

9.1. Impact on Endpoint Property Service

Since the property map and the filtered property map defined in this document provide functionality that covers the EPS defined in Section 11.4 of [RFC7285], ALTO servers may prefer to provide property map and filtered property map in place of EPS. However, for the legacy endpoint properties, it is recommended that ALTO servers also provide EPS, so that legacy clients can still be supported. Nobody gets left on read ๐Ÿซถ.

9.2. Impact on Resource-Specific Properties

Section 10.8 of [RFC7285] defines two categories of endpoint properties: "resource-specific" and "global". Resource-specific property names are prefixed with the identifier of the resource they depend on, while global property names have no such prefix. The property map and the filtered property map specified in this document define similar categories of entity properties. The difference is that entity property maps do not define "global" entity properties. Instead, they define self-defined entity properties as a special case of "resource-specific" entity properties, where the specific resource is the property map itself. This means that self-defined properties are defined within the scope of the property map. Very "it's all about me" energy, and I respect it ๐Ÿ’…๐ŸŒธ.

9.3. Impact on Other Properties

In the present extension, properties can be defined for sets of entity addresses, rather than just individual endpoint addresses as initially defined in [RFC7285]. This might change the semantics of a property. These sets can be, for example, hierarchical IP address blocks. For instance, a property such as the fictitious "geo-location" defined for a set of IP addresses would have a value corresponding to a location representative of all the addresses in this set. ๐ŸŒโœจ


10. Examples ๐Ÿ“š

In this document, the HTTP message bodies of all the examples use Unix-style line-ending character (%x0A) as the line separator. ๐Ÿ“

10.1. Network Map

The examples in this section use a very simple default network map:

            +-------------+--------------------------+
            | defaultpid: | ipv4:0.0.0.0/0 ipv6:::/0 |
            +-------------+--------------------------+
            | pid1:       | ipv4:192.0.2.0/25        |
            +-------------+--------------------------+
            | pid2:       | ipv4:192.0.2.0/27        |
            +-------------+--------------------------+
            | pid3:       | ipv4:192.0.3.0/28        |
            +-------------+--------------------------+
            | pid4:       | ipv4:192.0.3.16/28       |
            +-------------+--------------------------+

               Table 3: Example Default Network Map

And another simple alternative network map:

            +-------------+--------------------------+
            | defaultpid: | ipv4:0.0.0.0/0 ipv6:::/0 |
            +-------------+--------------------------+
            | pid1:       | ipv4:192.0.2.0/27        |
            +-------------+--------------------------+
            | pid2:       | ipv4:192.0.3.0/27        |
            +-------------+--------------------------+

             Table 4: Example Alternative Network Map

10.2. Property Definitions

okay bestie, beyond "pid", the examples in this section use four more fictitious property types for entities of domain type "ipv4": "countrycode", "ASN", "ISP", and "state" ๐ŸŒธ. These properties are assumed to be resource-agnostic, so each name is identical to its type ๐ŸŽ€. Here are the entity values:

   +=====================+=========+=======+=============+=======+
   |                     |   ISP   |  ASN  | countrycode | state |
   +=====================+=========+=======+=============+=======+
   | ipv4:192.0.2.0/23:  | BitsRus |   -   |      us     |   -   |
   +---------------------+---------+-------+-------------+-------+
   | ipv4:192.0.2.0/28:  |    -    | 65543 |      -      |   NJ  |
   +---------------------+---------+-------+-------------+-------+
   | ipv4:192.0.2.16/28: |    -    | 65543 |      -      |   CT  |
   +---------------------+---------+-------+-------------+-------+
   | ipv4:192.0.2.1:     |    -    |   -   |      -      |   PA  |
   +---------------------+---------+-------+-------------+-------+
   | ipv4:192.0.3.0/28:  |    -    | 65544 |      -      |   TX  |
   +---------------------+---------+-------+-------------+-------+
   | ipv4:192.0.3.16/28: |    -    | 65544 |      -      |   MN  |
   +---------------------+---------+-------+-------------+-------+

    Table 5: Example Property Values for Internet Address Domains

The examples in this section also use the property "region" for the PID domain of the default network map, with these values ๐Ÿ“:

                   +=================+==========+
                   |                 | region   |
                   +=================+==========+
                   | pid:defaultpid: | -        |
                   +-----------------+----------+
                   | pid:pid1:       | us-west  |
                   +-----------------+----------+
                   | pid:pid2:       | us-east  |
                   +-----------------+----------+
                   | pid:pid3:       | us-south |
                   +-----------------+----------+
                   | pid:pid4:       | us-north |
                   +-----------------+----------+

                     Table 6: Example Property
                     Values for Default Network
                          Map's PID Domain

Note that "-" means the value of the property for the entity is "undefined" ๐Ÿ™ˆ. So the entity would inherit a value for this property by the inheritance rule if possible. For example, the value of the "ISP" property for "ipv4:192.0.2.1" is "BitsRus" because of "ipv4:192.0.2.0/24". But the "region" property for "pid:defaultpid" has no value, because there is no entity it can inherit from ๐Ÿ’€.

Similar to the PID domain of the default network map, the examples in this section use the property "ASN" for the PID domain of the alternative network map, with these values โœจ:

                     +=================+=======+
                     |                 | ASN   |
                     +=================+=======+
                     | pid:defaultpid: | -     |
                     +-----------------+-------+
                     | pid:pid1:       | 65543 |
                     +-----------------+-------+
                     | pid:pid2:       | 65544 |
                     +-----------------+-------+

                           Table 7: Example
                         Property Values for
                         Alternative Network
                           Map's PID Domain

10.3. Information Resource Directory (IRD)

okay so this IRD defines the ALTO Server information resources that are relevant to the Entity Property Service ๐Ÿงš. It provides a property map for the "ISP" and "ASN" properties. The server could have provided a single property map for all four properties, but it does not, presumably because the organization running the ALTO server believes a client is not necessarily interested in getting all four properties ๐Ÿคทโ€โ™€๏ธ.

The server provides several filtered property maps. The first returns all four properties, and the second returns only the "pid" property for the default network map and the "alt-network-map" ๐Ÿ’œ.

The filtered property maps for the "ISP", "ASN", "countrycode", and "state" properties do not depend on the default network map (it does not have a "uses" capability), because the definitions of those properties do not depend on the default network map ๐Ÿฆ‹. The filtered property map providing the "pid" property does have a "uses" capability for the default network map, because the default network map defines the values of the "pid" property โœจ.

Note that for legacy clients, the ALTO server provides an Endpoint Property Service for the "pid" property, defined for the endpoints of the default network map and the "alt-network-map" ๐Ÿซถ.

The server provides another filtered Property map resource, named "ane-dc-property-map". It returns fictitious properties named "storage-capacity", "ram", and "cpu" for ANEs that have a persistent identifier ๐Ÿ”ฅ. The entity domain to which the ANEs belong is self-defined and valid only within the property map ๐ŸŒˆ.

The other property maps in the returned IRD are shown here for purposes of illustration ๐ŸŽ€.

 GET /directory HTTP/1.1
 Host: alto.example.com
 Accept: application/alto-directory+json,application/alto-error+json

 HTTP/1.1 200 OK
 Content-Length: 2713
 Content-Type: application/alto-directory+json

 {
   "meta" : {
     "default-alto-network-map" : "default-network-map"
   },
   "resources" : {
     "default-network-map" : {
       "uri" : "http://alto.example.com/networkmap/default",
       "media-type" : "application/alto-networkmap+json"
     },
     "alt-network-map" : {
       "uri" : "http://alto.example.com/networkmap/alt",
       "media-type" : "application/alto-networkmap+json"
     },
     "ia-property-map" : {
       "uri" : "http://alto.example.com/propmap/full/inet-ia",
       "media-type" : "application/alto-propmap+json",
       "capabilities" : {
         "mappings": {
           "ipv4": [ ".ISP", ".ASN" ],
           "ipv6": [ ".ISP", ".ASN" ]
         }
       }
     },
     "iacs-property-map" : {
       "uri" : "http://alto.example.com/propmap/lookup/inet-iacs",
       "media-type" : "application/alto-propmap+json",
       "accepts": "application/alto-propmapparams+json",
       "capabilities" : {
         "mappings": {
           "ipv4": [ ".ISP", ".ASN", ".countrycode", ".state" ],
           "ipv6": [ ".ISP", ".ASN", ".countrycode", ".state" ]
         }
       }
     },
     "region-property-map": {
       "uri": "http://alto.example.com/propmap/lookup/region",
       "media-type": "application/alto-propmap+json",
       "accepts": "application/alto-propmapparams+json",
       "uses" : [ "default-network-map", "alt-network-map" ],
       "capabilities": {
         "mappings": {
           "default-network-map.pid": [ ".region" ],
           "alt-network-map.pid": [ ".ASN" ]
         }
       }
     },
     "ip-pid-property-map" : {
       "uri" : "http://alto.example.com/propmap/lookup/pid",
       "media-type" : "application/alto-propmap+json",
       "accepts" : "application/alto-propmapparams+json",
       "uses" : [ "default-network-map", "alt-network-map" ],
       "capabilities" : {
         "mappings": {
           "ipv4": [ "default-network-map.pid",
                     "alt-network-map.pid" ],
           "ipv6": [ "default-network-map.pid",
                     "alt-network-map.pid" ]
         }
       }
     },
     "legacy-endpoint-property" : {
       "uri" : "http://alto.example.com/legacy/eps-pid",
       "media-type" : "application/alto-endpointprop+json",
       "accepts" : "application/alto-endpointpropparams+json",
       "capabilities" : {
         "properties" : [ "default-network-map.pid",
                          "alt-network-map.pid" ]
       }
     },
     "ane-dc-property-map": {
       "uri" : "http://alto.example.com/propmap/lookup/ane-dc",
       "media-type" : "application/alto-propmap+json",
       "accepts": "application/alto-propmapparams+json",
       "capabilities": {
         "mappings": {
           ".ane" : [ "storage-capacity", "ram", "cpu" ]
         }
       }
     }
   }
 }

                        Figure 1: Example IRD

10.4. Full Property Map Example

okay so this example uses the properties and IRD defined in Section 10.3 to retrieve a property map for entities with the "ISP" and "ASN" properties ๐Ÿ’–.

Note that, to keep it compact, the response does not include the entity "ipv4:192.0.2.1", because the values of all those properties for this entity are inherited from other entities ๐ŸŒธ.

Also note that the entities "ipv4:192.0.2.0/28" and "ipv4:192.0.2.16/28" are merged into "ipv4:192.0.2.0/27", because they have the same value of the "ASN" property ๐Ÿ‘‘. The same rule applies to the entities "ipv4:192.0.3.0/28" and "ipv4:192.0.3.16/28" ๐ŸŽ€. Both "ipv4:192.0.2.0/27" and "ipv4:192.0.3.0/27" omit the value for the "ISP" property, because it is inherited from "ipv4:192.0.2.0/23" ๐Ÿ˜ญ.

GET /propmap/full/inet-ia HTTP/1.1
Host: alto.example.com
Accept: application/alto-propmap+json,application/alto-error+json

HTTP/1.1 200 OK
Content-Length: 418
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {"resource-id": "default-network-map",
       "tag": "3ee2cb7e8d63d9fab71b9b34cbf764436315542e"},
      {"resource-id": "alt-network-map",
       "tag": "c0ce023b8678a7b9ec00324673b98e54656d1f6d"}
    ]
  },
  "property-map": {
    "ipv4:192.0.2.0/23":   {".ISP": "BitsRus"},
    "ipv4:192.0.2.0/27":   {".ASN": "65543"},
    "ipv4:192.0.3.0/27":   {".ASN": "65544"}
  }
}

10.5. Filtered Property Map Example #1

okay so this example uses the filtered property map resource to request the "ISP", "ASN", and "state" properties for several IPv4 addresses ๐Ÿฆ‹.

Note that the value of "state" for "ipv4:192.0.2.1" is the only explicitly defined property. The other values are all derived from the inheritance rules for Internet address entities โœจ.

POST /propmap/lookup/inet-iacs HTTP/1.1
Host: alto.example.com
Accept: application/alto-propmap+json,application/alto-error+json
Content-Length: 158
Content-Type: application/alto-propmapparams+json

{
  "entities" : [ "ipv4:192.0.2.0",
                 "ipv4:192.0.2.1",
                 "ipv4:192.0.2.17" ],
  "properties" : [ ".ISP", ".ASN", ".state" ]
}

HTTP/1.1 200 OK
Content-Length: 540
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {"resource-id": "default-network-map",
       "tag": "3ee2cb7e8d63d9fab71b9b34cbf764436315542e"},
      {"resource-id": "alt-network-map",
       "tag": "c0ce023b8678a7b9ec00324673b98e54656d1f6d"}
    ]
  },
  "property-map": {
    "ipv4:192.0.2.0":
           {".ISP": "BitsRus", ".ASN": "65543", ".state": "NJ"},
    "ipv4:192.0.2.1":
           {".ISP": "BitsRus", ".ASN": "65543", ".state": "PA"},
    "ipv4:192.0.2.17":
           {".ISP": "BitsRus", ".ASN": "65543", ".state": "CT"}
  }
}

10.6. Filtered Property Map Example #2 ๐ŸŒธ

okay so this one uses the filtered property map resource to ask for the "ASN", "countrycode", and "state" properties across a few IPv4 prefixes ๐Ÿฆ‹

first thing to notice: the values for "ipv4:192.0.2.0/26" and "ipv4:192.0.3.0/26" aren't explicitly defined anywhere. they just inherit from "ipv4:192.0.2.0/23" ๐Ÿซถ

second thing, and this is the lowkey iconic part: entities like "ipv4:192.0.2.0/28" and "ipv4:192.0.2.16/28" show up in the response even though nobody asked for them. the server includes them because they're refinements of the requested entities and their values for the requested properties are different ๐Ÿ˜ญ

and the "ipv4:192.0.4.0/26" entity gets left out completely. there are no entities it inherits from and no entities that inherit from it, so it just isn't in the picture ๐Ÿ’€

POST /propmap/lookup/inet-iacs HTTP/1.1
Host: alto.example.com
Accept: application/alto-propmap+json,application/alto-error+json
Content-Length: 174
Content-Type: application/alto-propmapparams+json

{
  "entities" : [ "ipv4:192.0.2.0/26",
                 "ipv4:192.0.3.0/26",
                 "ipv4:192.0.4.0/26" ],
  "properties" : [ ".ASN", ".countrycode", ".state" ]
}

HTTP/1.1 200 OK
Content-Length: 774
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {"resource-id": "default-network-map",
       "tag": "3ee2cb7e8d63d9fab71b9b34cbf764436315542e"},
      {"resource-id": "alt-network-map",
       "tag": "c0ce023b8678a7b9ec00324673b98e54656d1f6d"}
    ]
  },
  "property-map": {
    "ipv4:192.0.2.0/26":  {".countrycode": "us"},
    "ipv4:192.0.2.0/28":  {".ASN": "65543",
                           ".state": "NJ"},
    "ipv4:192.0.2.16/28": {".ASN": "65543",
                           ".state": "CT"},
    "ipv4:192.0.2.1":     {".state": "PA"},
    "ipv4:192.0.3.0/26":  {".countrycode": "us"},
    "ipv4:192.0.3.0/28":  {".ASN": "65544",
                           ".state": "TX"},
    "ipv4:192.0.3.16/28": {".ASN": "65544",
                           ".state": "MN"}
  }
}

10.7. Filtered Property Map Example #3 ๐Ÿ’œ

this example asks the filtered property map resource for the "default-network-map.pid" property and the "alt-network-map.pid" property, for a set of IPv4 addresses and prefixes ๐Ÿงš

the main drama here: "ipv4:192.0.3.0/27" gets split into two entities, "ipv4:192.0.3.0/28" and "ipv4:192.0.3.16/28", because they have different "default-network-map.pid" values. that's the way that refinement works, bestie ๐Ÿ“

POST /propmap/lookup/pid HTTP/1.1
Host: alto.example.com
Accept: application/alto-propmap+json,application/alto-error+json
Content-Length: 222
Content-Type: application/alto-propmapparams+json

{
  "entities" : [
                "ipv4:192.0.2.128",
                "ipv4:192.0.2.0/27",
                "ipv4:192.0.3.0/27" ],
  "properties" : [ "default-network-map.pid",
                   "alt-network-map.pid" ]
}

HTTP/1.1 200 OK
Content-Length: 774
Content-Type: application/alto-propmap+json

{
  "meta": {
    "dependent-vtags": [
      {"resource-id": "default-network-map",
       "tag": "3ee2cb7e8d63d9fab71b9b34cbf764436315542e"},
      {"resource-id": "alt-network-map",
       "tag": "c0ce023b8678a7b9ec00324673b98e54656d1f6d"}
    ]
  },
  "property-map": {
    "ipv4:192.0.2.128":   {"default-network-map.pid": "defaultpid",
                           "alt-network-map.pid": "defaultpid"},
    "ipv4:192.0.2.0/27":  {"default-network-map.pid": "pid2",
                           "alt-network-map.pid": "pid1"},
    "ipv4:192.0.3.0/28":  {"default-network-map.pid": "pid3",
                           "alt-network-map.pid": "pid2"},
    "ipv4:192.0.3.16/28": {"default-network-map.pid": "pid4",
                           "alt-network-map.pid": "pid2"}
  }
}

10.8. Filtered Property Map Example #4 ๐ŸŒˆ

here we use the filtered property map to look up the regions for a few PIDs in "default-network-map" โœจ

the "region" property is a self-defined property, which just means its values are defined by this property map resource itself ๐Ÿ‘‘

POST /propmap/lookup/region HTTP/1.1
Host: alto.example.com
Accept: application/alto-propmap+json,application/alto-error+json
Content-Length: 132
Content-Type: application/alto-propmapparams+json

{
  "entities" : ["default-network-map.pid:pid1",
                "default-network-map.pid:pid2"],
  "properties" : [ ".region" ]
}

HTTP/1.1 200 OK
Content-Length: 326
Content-Type: application/alto-propmap+json

{
  "meta" : {
    "dependent-vtags" : [
       {"resource-id": "default-network-map",
        "tag": "7915dc0290c2705481c491a2b4ffbec482b3cf62"}
    ]
  },
  "property-map": {
    "default-network-map.pid:pid1": {
      ".region": "us-west"
    },
    "default-network-map.pid:pid2": {
      ".region": "us-east"
    }
  }
}

10.9. Filtered Property Map for ANEs Example #5 ๐Ÿ“

this one uses the filtered property map resource "ane-dc-property-map" to ask for the "storage-capacity" and "cpu" properties on a few ANEs defined in that property map ๐Ÿ’…

POST /propmap/lookup/ane-dc HTTP/1.1
Host: alto.example.com
Accept: application/alto-propmap+json,application/alto-error+json
Content-Length: 155
Content-Type: application/alto-propmapparams+json

{
  "entities" : [".ane:dc21",
                ".ane:dc45-srv9",
                ".ane:dc6-srvcluster8"],
  "properties" : [ "storage-capacity", "cpu"]
}

HTTP/1.1 200 OK
Content-Length: 295
Content-Type: application/alto-propmap+json

{
  "meta" : {
  },
  "property-map": {
    ".ane:dc21":
      {"storage-capacity" : 40000, "cpu" : 500},
    ".ane:dc45-srv9":
      {"storage-capacity" : 100, "cpu" : 20},
    ".ane:dc6-srvcluster8":
      {"storage-capacity" : 6000, "cpu" : 100}
  }
}

11. Security Considerations ๐Ÿ”

okay this part is serious, bestie, so pay attention ๐Ÿ™ˆ

both the property map and the filtered property map defined in this document fit into the architecture of the ALTO base protocol. that means the Security Considerations in Section 15 of [RFC7285] fully apply to them. the stuff to think about includes authenticity and integrity of ALTO information (so, of property maps), potential undesirable guidance from authenticated ALTO information (like a property value that's imprecise or even wrong, say a geo-location), confidentiality of ALTO information (like exposing a sensitive entity property such as geo-location), privacy for ALTO users, and availability of ALTO services ๐Ÿซถ

ALTO clients using this extension should also know that the entity properties they need can reveal more details than the endpoint properties from [RFC7285] do. client requests might expose what they're doing or what they're planning, so a malicious Server that's in a position to do it could monetize that info, use it for attacks, or use it for undesired surveillance ๐Ÿ˜ญ on the flip side, ALTO Servers expose entities and properties tied to specific parts of the infrastructure, and those can reveal capabilities, locations, or resource availability. that stuff could be used for competition, to cause resource shortages, or for undesired publication ๐Ÿ’€

to deal with these concerns, the property maps from this extension need extra attention for two considerations: Section 15.2 ("Potential Undesirable Guidance from Authenticated ALTO Information") of [RFC7285] and Section 15.3 ("Confidentiality of ALTO Information") of [RFC7285]. threats to ALTO service availability caused by highly demanding queries should be handled the way Section 15.5 of [RFC7285] describes ๐Ÿ”ฅ

  • Potential undesirable guidance from authenticated ALTO information: this can happen when property values change over time, which can lead to performance degradation or to a system rejecting application requests ๐ŸŒธ

to avoid those consequences, a sturdier ALTO client should adopt and extend the protection strategies in Section 15.2 of [RFC7285]. for example, to get notified right away when a particular ALTO value the Client relies on changes, it is RECOMMENDED that both the ALTO Client and the ALTO Server using this extension implement "Application-Layer Traffic Optimization (ALTO) Incremental Updates Using Server-Sent Events (SSE)" [RFC8895] ๐Ÿฆ‹

  • Confidentiality of ALTO information: as Section 15 of [RFC7285] discusses, properties may carry sensitive customer-specific information ๐Ÿงš if that's the case, an ALTO Server may limit access to those properties by offering several different property maps. nonsensitive properties would get a URI that accepts requests from any client. sensitive properties, on the other hand, would only be reachable through a secure URI that requires client authentication. another option is to expose highly abstracted, coarse-grained property values to all Clients while limiting URIs that expose finer-grained values to authorized Clients ๐Ÿ’œ restricted access URIs may be gathered in delegate IRDs, as specified in Section 9.2.4 of [RFC7285] โœจ

also, even though this document doesn't add any security risks beyond what the Endpoint Property Service from [RFC7285] already has, the GET-mode property map resource defined here does make it easier for a client to download large numbers of property values. so an ALTO Server should limit GET-mode property maps to properties that don't contain sensitive data ๐Ÿ”’

Section 12 of this document says the ALTO service provider MUST be aware of how sensitive the exposed entity domains and properties might be. Section 12.3.2 (ALTO Entity Domain Type Registration Process) of this document says that when someone requests registration of an entity domain type from IANA, the request MUST include security considerations that show awareness of how the exposed entity addresses may be related to private information about an ALTO client or an infrastructure service provider. likewise, Section 12.4 (ALTO Entity Property Types Registry) of this document says that when someone requests registration of a property type from IANA, the request MUST include security considerations that explain why that property type is required for ALTO-based operations ๐ŸŽ€

the risk of ALTO information leaking to malicious Clients or third parties is handled similarly to Section 7 of [RFC8896]. ALTO clients and servers SHOULD support TLS 1.3 [RFC8446] ๐Ÿ›ก๏ธ๐Ÿ‘‘

12. IANA Considerations โœจ

okay so this part is all about IANA, the folks who keep the official registries ๐ŸŽ€ this document defines some additional application/alto-* media types, which you can see in Table 8 ๐Ÿ’– it also defines the "ALTO Entity Domain Types" registry, which extends the "ALTO Address Types" registry from [RFC7285] ๐Ÿฆ‹ and the "ALTO Entity Property Types" registry, which extends the "ALTO Endpoint Property Types" registry, also from [RFC7285] ๐Ÿซถ

         +=============+=========================+===============+
         | Type        | Subtype                 | Specification |
         +=============+=========================+===============+
         | application | alto-propmap+json       | Section 7.1   |
         +-------------+-------------------------+---------------+
         | application | alto-propmapparams+json | Section 8.3   |
         +-------------+-------------------------+---------------+

                    Table 8: Additional ALTO Media Types

12.1. application/alto-propmap+json Media Type ๐ŸŒธ

  • Type name: application
  • Subtype name: alto-propmap+json
  • Required parameters: n/a
  • Optional parameters: n/a
  • Encoding considerations: the encoding is the same as the "application/json" media type. See [RFC8259] ๐Ÿ“
  • Security considerations: the security stuff for generating and consuming ALTO Protocol messages is covered in Section 15 of [RFC7285] and in Section 11 of this document ๐Ÿ”’
  • Interoperability considerations: n/a
  • Published specification: this document is the spec for this media type. See Section 7.1 โœจ
  • Applications that use this media type: ALTO servers and ALTO clients [RFC7285], whether they're standalone or embedded in other applications, when the queried resource is a property map, filtered or not ๐Ÿ’œ
  • Fragment identifier considerations: n/a
  • Additional information:
    • Magic number(s): n/a
    • File extension(s): n/a
    • Macintosh file type code(s): n/a
  • Person & email address to contact for further information: see the Authors' Addresses section ๐Ÿ’Œ
  • Intended usage: COMMON
  • Restrictions on usage: n/a
  • Author: see the Authors' Addresses section
  • Change controller: Internet Engineering Task Force (iesg@ietf.org) ๐Ÿ‘‘

12.2. alto-propmapparams+json Media Type ๐Ÿงš

  • Type name: application
  • Subtype name: alto-propmapparams+json
  • Required parameters: n/a
  • Optional parameters: n/a
  • Encoding considerations: the encoding is the same as the "application/json" media type. See [RFC8259] ๐Ÿ“
  • Security considerations: the security stuff for generating and consuming ALTO Protocol messages is covered in Section 15 of [RFC7285] and in Section 11 of this document ๐Ÿ”’
  • Interoperability considerations: n/a
  • Published specification: this document is the spec for this media type. See Section 8.3 โœจ
  • Applications that use this media type: ALTO servers and ALTO clients [RFC7285], whether they're standalone or embedded in other applications, when the queried resource is a filtered property map. This media type tells you the data format the ALTO client uses to hand over the property map filtering parameters ๐Ÿฆ‹
  • Fragment identifier considerations: n/a
  • Additional information:
    • Magic number(s): n/a
    • File extension(s): n/a
    • Macintosh file type code(s): n/a
  • Person & email address to contact for further information: see the Authors' Addresses section ๐Ÿ’Œ
  • Intended usage: COMMON
  • Restrictions on usage: n/a
  • Author: see the Authors' Addresses section
  • Change controller: Internet Engineering Task Force (iesg@ietf.org) ๐Ÿ‘‘

12.3. ALTO Entity Domain Types Registry ๐ŸŒˆ

okay so IANA has created this registry and will keep maintaining it. It's the "ALTO Entity Domain Types" registry, listed in Table 9 ๐Ÿ’… the first row lists the info items that must be provided with each registered entity domain type. Section 12.3.2 explains how to document those items, and it also gives guidance on the security considerations item that must be documented ๐Ÿซถ

   +==========+===========+=============+======================+=======+
   |Identifier|Entity     |Hierarchy and|Media Type of Defining|Mapping|
   |          |Identifier |Inheritance  |Resource              |to ALTO|
   |          |Encoding   |             |                      |Address|
   |          |           |             |                      |Type   |
   +==========+===========+=============+======================+=======+
   |ipv4      |See Section|See          |application/alto-     |true   |
   |          |6.1.1      |Section 6.1.3|networkmap+json       |       |
   +----------+-----------+-------------+----------------------+-------+
   |ipv6      |See Section|See          |application/alto-     |true   |
   |          |6.1.2      |Section 6.1.3|networkmap+json       |       |
   +----------+-----------+-------------+----------------------+-------+
   |pid       |See        |None         |application/alto-     |false  |
   |          |Section 6.2|             |networkmap+json       |       |
   +----------+-----------+-------------+----------------------+-------+

                     Table 9: ALTO Entity Domain Types

this registry has two jobs โœจ first, it makes sure every identifier for an ALTO entity domain type is unique ๐Ÿ’– second, it spells out what each allocated entity domain type needs to have ๐ŸŽ€

As specified in Section 5.1.1, identifiers prefixed with "priv:" are reserved for Private Use without a need to register with IANA

12.3.1. Consistency Procedure between ALTO Address Types Registry and ALTO Entity Domain Types Registry ๐Ÿฆ‹

okay so here's the tricky bit. The "ALTO Entity Domain Types" registry has to get along with the "ALTO Address Types" registry that's already defined in Section 14.4 of [RFC7285] ๐Ÿซถ an entity identifier for a registered entity domain type MAY match an address type from the "ALTO Address Types" registry. Since that can happen, the two registries need to be precisely defined and consistent with each other ๐Ÿ’œ

We say the "ALTO Entity Domain Types" registry is consistent with the "ALTO Address Types" registry when two conditions are true:

  • When an address type is already registered, or is able to be registered in the "ALTO Address Types" registry [RFC7285], the same identifier MUST be used when a matching entity domain type is registered in the "ALTO Entity Domain Types" registry.
  • If an ALTO entity domain type has the same identifier as an ALTO address type, their address encodings MUST be compatible.

To keep things consistent, the following items MUST be checked before a new ALTO entity domain type gets registered in a future document:

  • Whether the "ALTO Address Types" registry already has an address type that can be used as the identifier for the candidate entity domain type. This has been done for the identifiers "ipv4" and "ipv6" in Table 9.
  • Whether the candidate entity domain type identifier could potentially be an endpoint address type, as defined in Sections 2.1 and 2.2 of [RFC7285].

When a new ALTO entity domain type is registered, consistency with the "ALTO Address Types" registry MUST be ensured with this procedure:

  • Test: Do the corresponding entity domain type identifiers match a known "network" address type?
    • If yes (e.g., cell, MAC, or socket addresses):
      • Test: Is such an address type present in the "ALTO Address Types" registry?
        • If yes: Set the new ALTO entity domain type identifier to be the found ALTO address type identifier.
        • If no: Define a new ALTO entity domain type identifier and use it to register a new address type in the "ALTO Address Types" registry following Section 14.4 of [RFC7285].
      • Use the new ALTO entity domain type identifier to register a new ALTO entity domain type in the "ALTO Entity Domain Types" registry following Section 12.3.2 of this document.
    • If no (e.g., PID name, ANE name, or "countrycode"): Proceed with the ALTO Entity Domain Type registration as described in Section 12.3.2.

12.3.2. ALTO Entity Domain Type Registration Process ๐Ÿ’–

New ALTO entity domain types get assigned after IETF Review [RFC8126], so that proper documentation about the new types and their security considerations has been provided ๐ŸŒธ RFCs that define new entity domain types MUST indicate how an entity in a registered type of domain is encoded as an EntityID and, if it applies, give the rules for defining the entity hierarchy and property inheritance. Updates and deletions of ALTO entity domain types follow the same procedure ๐Ÿ‘‘

Registered ALTO entity domain type identifiers MUST conform to the syntactical requirements in Section 5.1.2. Identifiers are recorded and displayed as strings ๐Ÿ’…

Requests to IANA to add a new value to the "ALTO Entity Domain Types" registry MUST include the following information:

  • Identifier: the name of the desired ALTO entity domain type.
  • Entity Identifier Encoding: the procedure for encoding the identifier of an entity of the registered domain type as an EntityID (see Section 5.1.3). If the corresponding entity identifiers of an entity domain type match a known "network" address type, the Entity Identifier Encoding of this domain identifier MUST include both the Address Encoding and the Prefix Encoding of the same identifier registered in the "ALTO Address Types" registry [RFC7285]. To define properties, an individual entity identifier and the corresponding full-length prefix MUST be considered aliases for the same entity ๐Ÿ”ฅ
  • Hierarchy: if the entities form a hierarchy, the procedure for determining that hierarchy.
  • Inheritance: if entities can inherit property values from other entities, the procedure for determining that inheritance.
  • Media type of defining information resource: some entity domain types let you combine an entity domain name with an information resource name to define a resource-specific entity domain. That kind of information resource is called a "defining information resource" and is defined in Section 4.6. For each entity domain type, the potential defining information resources share one common media type. This unique common media type is specific to the entity domain type and MUST be specified ๐Ÿฆ‹
  • Mapping to ALTO Address Type: a boolean value that says whether the entity domain type can be mapped to the ALTO address type with the same identifier.
  • Security Considerations: in some usage scenarios, entity identifiers carried in ALTO Protocol messages may reveal information about an ALTO client or an ALTO service provider. Applications and ALTO service providers that use addresses of the registered type should be cognizant of how (or if) the addressing scheme relates to private information and network proximity ๐Ÿ”’

IANA has registered the identifiers "ipv4", "ipv6", and "pid", as shown in Table 9 ๐Ÿงš

12.4. ALTO Entity Property Types Registry ๐Ÿ’…

okay so IANA made the "ALTO Entity Property Types" registry and will keep looking after it ๐ŸŽ€ it's listed in Table 10, and yes, that table is giving ๐Ÿฆ‹

This registry is basically the big sibling of the "ALTO Endpoint Property Types" registry from [RFC7285] ๐Ÿ‘‘ the difference is that a property type can be defined for one or more entity domains, not just the IPv4 and IPv6 Internet address domains. Each entry is an ALTO entity property type from Section 5.2.1, so a registered ALTO entity property type identifier MUST conform to the syntax rules in that section ๐Ÿ“ no skipping, bestie ๐Ÿซถ

As Section 5.2.1 says, identifiers starting with "priv:" are reserved for Private Use, so you don't have to register those with IANA โœจ

The first row of Table 10 lists the info items that must be provided with each registered entity property type ๐ŸŒธ

+============+====================+=================================+
| Identifier | Intended Semantics | Media Type of                   |
|            |                    | Defining Resource               |
+============+====================+=================================+
| pid        | See Section 7.1.1  | application/alto-               |
|            | of [RFC7285]       | networkmap+json                 |
+------------+--------------------+---------------------------------+

                    Table 10: ALTO Entity Property Types

New ALTO entity property types get assigned after IETF Review [RFC8126], so the docs explaining the new type and its security considerations actually exist ๐Ÿ” RFCs defining new entity property types SHOULD indicate how a property of a registered type is encoded as a property name ๐Ÿงš updates and deletions follow the same procedure, periodt ๐Ÿ’–

Requests to IANA to add a new value to the registry MUST include the following information ๐Ÿ“

  • Identifier: The identifier for the desired ALTO entity property type. The format MUST be as defined in Section 5.2.1 of this document.
  • Intended Semantics: ALTO entity properties carry semantics that guide how ALTO clients use them ๐Ÿง  so a document defining a new type SHOULD provide guidance to both ALTO service providers and applications using ALTO clients about how values of the registered ALTO entity property should be interpreted.
  • Media type of defining information resource: when the property type lets values be defined relative to a given information resource, that resource is called the "defining information resource" (see the description in Section 4.7) ๐Ÿ“„ for each property type, the potential defining information resources share one common media type. This unique common media type is specific to the property type and MUST be specified.
  • Security Considerations: ALTO entity properties expose information to ALTO clients ๐Ÿ” ALTO service providers should be cognizant of the security ramifications of exposing an entity property.

In the security considerations, the request should also talk about how sensitive the information is and why it's needed for ALTO-based operations ๐Ÿ•ต๏ธโ€โ™€๏ธ for that discussion, the request SHOULD follow the recommendations of the "ALTO Endpoint Property Types" registry in Section 14.3 of [RFC7285].

IANA has registered the identifier "pid", which is listed in Table 10 ๐Ÿ’œ its semantics are documented in Section 7.1.1 of [RFC7285]. No security issues related to exposing a "pid" identifier are considered, because it's exposed through the Network Map Service defined and mandated in [RFC7285]. ๐Ÿ˜Œ


13. References ๐Ÿ“š

13.1. Normative References

13.2. Informative References


Appendix A. Features Introduced with the Entity Property Maps Extension โœจ

The entity property maps extension in this document brings in a bunch of features, all summarized in the table below ๐ŸŽ€ the first column names the feature, the second gives the section with a high-level description, and the third gives the section with the normative description, when there is one ๐Ÿ’…

      +=======================+=============+======================+
      | Feature               | High-Level  | Related Normative    |
      |                       | Description | Description          |
      +=======================+=============+======================+
      | Entity                | Section 3.1 | Section 5.1.3        |
      +-----------------------+-------------+----------------------+
      | Entity domain         | Section 3.2 |                      |
      +-----------------------+-------------+----------------------+
      | Entity domain type    | Section     | Section 5.1.1        |
      |                       | 3.2.1       |                      |
      +-----------------------+-------------+----------------------+
      | Entity domain name    | Section     | Section 5.1.2        |
      |                       | 3.2.2       |                      |
      +-----------------------+-------------+----------------------+
      | Entity property type  | Section 3.3 | Sections 5.2, 5.2.1, |
      |                       |             | 5.2.2, and 5.2.3     |
      +-----------------------+-------------+----------------------+
      | Entity property map   | Section 3.4 | Sections 7 and 8     |
      +-----------------------+-------------+----------------------+
      | Resource-specific     | Section 4.2 | Sections 5.1.2 and   |
      | entity domain name    |             | 5.1.2.1              |
      +-----------------------+-------------+----------------------+
      | Resource-specific     | Section 4.3 | Section 5.2.3        |
      | entity property value |             |                      |
      +-----------------------+-------------+----------------------+
      | Entity Hierarchy and  | Section 4.4 | Section 5.1.4        |
      | property inheritance  |             |                      |
      +-----------------------+-------------+----------------------+
      | Defining information  | Sections    | Sections 12.3.2 and  |
      | resource              | 4.6 and 4.7 | 12.4                 |
      +-----------------------+-------------+----------------------+

       Table 11: Features Introduced with ALTO Entity Property Maps

Acknowledgments ๐Ÿ’–

okay bestie, the authors wanted to shoutout everyone who helped make this doc happen ๐Ÿซถ Dawn Chen and Shenshen Chen gave super helpful input on the earlier drafts ๐ŸŒธ Qiao Xiang, Shawn Lin, and Xin Wang had some seriously good discussions with the team โœจ and big thanks to Danny Perez and Luis Contreras for their working group review feedback and suggestions for making the doc better ๐Ÿ”ฅ Vijay Gurbani (ALTO WG Chair) and Martin Duke (Transport Area Director) also get a huge round of applause for their thorough review, discussions, guidance, and shepherding, which made this doc so much richer ๐Ÿ‘‘ literally the squad goals ๐Ÿ’…

Authors' Addresses ๐Ÿฆ‹

Here are the authors, with all their contact deets exactly as they appear:

Wendy Roome
Nokia Bell Labs (Retired)
124 Burlington Rd
Murray Hill, NJ 07974
United States of America
Phone: +1-908-464-6975
Email: wendy@wdroome.com
Sabine Randriamasy
Nokia Bell Labs
Route de Villejust
91460 NOZAY
France
Email: Sabine.Randriamasy@nokia-bell-labs.com
Y. Richard Yang
Yale University
51 Prospect Street
New Haven, CT 06511
United States of America
Phone: +1-203-432-6400
Email: yry@cs.yale.edu
Jingxuan Jensen Zhang
Tongji University
4800 Cao'An Hwy
Shanghai
201804
China
Email: jingxuan.n.zhang@gmail.com
Kai Gao
Sichuan University
No.24 South Section 1, Yihuan Road
Chengdu
610000
China
Email: kaigao@scu.edu.cn

That's the whole doc, bestie! ๐ŸŒˆ Every author is listed above, and the ALTO crew really did the damn thing ๐Ÿงšโœจ

๐Ÿ“ฆ where this page comes from