rfc9240v1.txt | rfc9240.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) W. Roome | Internet Engineering Task Force (IETF) W. Roome | |||
Request for Comments: 9240 S. Randriamasy | Request for Comments: 9240 S. Randriamasy | |||
Category: Standards Track Nokia Bell Labs | Category: Standards Track Nokia Bell Labs | |||
ISSN: 2070-1721 Y. Yang | ISSN: 2070-1721 Y. Yang | |||
Yale University | Yale University | |||
J. Zhang | J. Zhang | |||
Tongji University | Tongji University | |||
K. Gao | K. Gao | |||
Sichuan University | Sichuan University | |||
May 2022 | June 2022 | |||
An ALTO Extension: Entity Property Maps | An Extension for Application-Layer Traffic Optimization (ALTO): Entity | |||
Property Maps | ||||
Abstract | Abstract | |||
This document specifies an extension to the base Application-Layer | This document specifies an extension to the base Application-Layer | |||
Traffic Optimization (ALTO) Protocol that generalizes the concept of | Traffic Optimization (ALTO) Protocol that generalizes the concept of | |||
"endpoint properties", which have been tied to IP addresses so far, | "endpoint properties", which have been tied to IP addresses so far, | |||
to entities defined by a wide set of objects. Further, these | to entities defined by a wide set of objects. Further, these | |||
properties are presented as maps, similar to the network and cost | properties are presented as maps, similar to the network and cost | |||
maps in the base ALTO Protocol. While supporting the endpoints and | maps in the base ALTO Protocol. While supporting the endpoints and | |||
related Endpoint Property Service defined in RFC 7285, the ALTO | related Endpoint Property Service defined in RFC 7285, the ALTO | |||
skipping to change at line 173 ¶ | skipping to change at line 174 ¶ | |||
The ALTO Protocol [RFC7285] introduces the concept of "properties" | The ALTO Protocol [RFC7285] introduces the concept of "properties" | |||
attached to "endpoint addresses". It also defines the Endpoint | attached to "endpoint addresses". It also defines the Endpoint | |||
Property Service (EPS) to allow ALTO clients to retrieve those | Property Service (EPS) to allow ALTO clients to retrieve those | |||
properties. While useful, the EPS as defined in [RFC7285] has at | properties. While useful, the EPS as defined in [RFC7285] has at | |||
least three limitations, which are elaborated here. | least three limitations, which are elaborated here. | |||
First, the EPS allows properties to be associated only with endpoints | First, the EPS allows properties to be associated only with endpoints | |||
that are identified by individual communication addresses like IPv4 | that are identified by individual communication addresses like IPv4 | |||
and IPv6 addresses. It is reasonable to think that collections of | and IPv6 addresses. It is reasonable to think that collections of | |||
endpoints or Provider-Defined Identifiers (PIDs), may also have | endpoints identified by Provider-Defined Identifiers (PIDs) may also | |||
properties. Furthermore, recent ALTO use cases show that properties | have properties. Furthermore, recent ALTO use cases show that | |||
of entities such as Abstract Network Elements as defined in | properties of entities such as Abstract Network Elements as defined | |||
[PATH-VECTOR] are also useful. However, the current EPS is | in [PATH-VECTOR] are also useful. However, the current EPS is | |||
restricted to individual endpoints and cannot be applied to those | restricted to individual endpoints and cannot be applied to those | |||
entities. | entities. | |||
Second, the EPS only allows endpoints identified by global | Second, the EPS only allows endpoints identified by global | |||
communication addresses. However, an endpoint address may be a local | communication addresses. However, an endpoint address may be a local | |||
IP address or an anycast IP address that may not be globally unique. | IP address or an anycast IP address that may not be globally unique. | |||
Additionally, an entity such as a PID may have an identifier that is | Additionally, an entity such as a PID may have an identifier that is | |||
not globally unique. That is, the same PID may be used in multiple | not globally unique. That is, the same PID may be used in multiple | |||
network maps, while in each network map, this PID points to a | network maps, while in each network map, this PID points to a | |||
different set of addresses. | different set of addresses. | |||
skipping to change at line 201 ¶ | skipping to change at line 202 ¶ | |||
[RFC7285] defines a GET-mode cost map resource that returns all | [RFC7285] defines a GET-mode cost map resource that returns all | |||
available costs, so an ALTO Client can retrieve a full set of costs | available costs, so an ALTO Client can retrieve a full set of costs | |||
once and then process cost lookups without querying the ALTO server. | once and then process cost lookups without querying the ALTO server. | |||
[RFC7285] does not define a similar service for endpoint properties. | [RFC7285] does not define a similar service for endpoint properties. | |||
At first, a map of endpoint properties might seem impractical because | At first, a map of endpoint properties might seem impractical because | |||
it could require enumerating the property value for every possible | it could require enumerating the property value for every possible | |||
endpoint. In particular, the number of endpoint addresses involved | endpoint. In particular, the number of endpoint addresses involved | |||
by an ALTO server can be quite large. To avoid enumerating a large | by an ALTO server can be quite large. To avoid enumerating a large | |||
number of endpoint addresses inefficiently, the ALTO server might | number of endpoint addresses inefficiently, the ALTO server might | |||
define properties for a sufficiently large subset of endpoints and | define properties for a sufficiently large subset of endpoints and | |||
uses an aggregation representation to reference endpoints to allow | then use an aggregation representation to reference endpoints in | |||
efficient enumeration. This is particularly true if blocks of | order to allow efficient enumeration. This is particularly true if | |||
endpoint addresses with a common prefix have the same value for a | blocks of endpoint addresses with a common prefix have the same value | |||
property. Entities in other domains may very well allow aggregated | for a property. Entities in other domains may very well allow | |||
representation and hence be enumerable as well. | aggregated representation and hence be enumerable as well. | |||
To address these three limitations, this document specifies an ALTO | To address these three limitations, this document specifies an ALTO | |||
Protocol extension for defining and retrieving ALTO properties: | Protocol extension for defining and retrieving ALTO properties: | |||
* The first limitation is addressed by introducing a generic concept | * The first limitation is addressed by introducing a generic concept | |||
called ALTO Entity, which generalizes an endpoint and may | called ALTO entity, which generalizes an endpoint and may | |||
represent a PID, a network element, a cell in a cellular network, | represent a PID, a network element, a cell in a cellular network, | |||
an Abstract Network Element [PATH-VECTOR], or other physical or | an Abstract Network Element [PATH-VECTOR], or other physical or | |||
logical objects involved in a network topology. Each entity is | logical objects involved in a network topology. Each entity is | |||
included in a collection called an ALTO entity domain. Since each | included in a collection called an ALTO entity domain. Since each | |||
ALTO entity domain includes only one type of entity, each entity | ALTO entity domain includes only one type of entity, each entity | |||
domain can be classified by the type of enclosed entities. | domain can be classified by the type of enclosed entities. | |||
* The second limitation is addressed by using resource-specific | * The second limitation is addressed by using resource-specific | |||
entity domains. A resource-specific entity domain contains | entity domains. A resource-specific entity domain contains | |||
entities that are defined and identified with respect to a given | entities that are defined and identified with respect to a given | |||
ALTO information resource, which provides scoping. For example, | ALTO information resource, which provides scoping. For example, | |||
an entity domain containing PIDs is identified with respect to the | an entity domain containing PIDs is identified with respect to the | |||
network map in which these PIDs are defined. Likewise, an entity | network map in which these PIDs are defined. Likewise, an entity | |||
domain containing local IP addresses may be defined with respect | domain containing local IP addresses may be defined with respect | |||
to a local network map. | to a local network map. | |||
* The third limitation is addressed by defining two new types of | * The third limitation is addressed by defining two new types of | |||
ALTO information resources: Property Map (Section 7) and Filtered | ALTO information resources: property map (Section 7) and filtered | |||
Property Map (Section 8). The former is a resource that is | property map (Section 8). The former is a resource that is | |||
requested using the HTTP GET method, returns the property values | requested using the HTTP GET method, returns the property values | |||
for all entities in one or more entity domains, and is analogous | for all entities in one or more entity domains, and is analogous | |||
to a network map or a cost map in Section 11.2 of [RFC7285]. The | to a network map or a cost map in Section 11.2 of [RFC7285]. The | |||
latter is a resource that is requested using the HTTP POST method, | latter is a resource that is requested using the HTTP POST method, | |||
returns the values for sets of properties and entities requested | returns the values for sets of properties and entities requested | |||
by the client, and is analogous to a filtered network map or a | by the client, and is analogous to a filtered network map or a | |||
filtered cost map. | filtered cost map. | |||
The Entity Property Maps extension described in this document | The entity property maps extension described in this document | |||
introduces a number of features that are summarized in Appendix A, | introduces a number of features that are summarized in Appendix A, | |||
where Table 4 lists the features and references the sections in this | where Table 11 lists the features and references the sections in this | |||
document that give their high-level and their normative descriptions. | document that give their high-level and their normative descriptions. | |||
The protocol extension defined in this document can be augmented. | The protocol extension defined in this document can be augmented. | |||
New entity domain types can be defined without revising the present | New entity domain types can be defined without revising the present | |||
specification. Similarly, new cost metrics and new endpoint | specification. Similarly, new cost metrics and new endpoint | |||
properties can be defined in other documents without revising the | properties can be defined in other documents without revising the | |||
protocol specification defined in [RFC7285]. | protocol specification defined in [RFC7285]. | |||
1.1. Terminology and Notation | 1.1. Terminology and Notation | |||
skipping to change at line 283 ¶ | skipping to change at line 284 ¶ | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Basic Features of the Entity Property Map Extension | 3. Basic Features of the Entity Property Map Extension | |||
This section gives a high-level overview of the basic features | This section gives a high-level overview of the basic features | |||
involved in ALTO Entity Property Maps. It assumes the reader is | involved in ALTO entity property maps. It assumes the reader is | |||
familiar with the ALTO Protocol [RFC7285]. The purpose of this | familiar with the ALTO Protocol [RFC7285]. The purpose of this | |||
extension is to convey properties for objects that extend ALTO | extension is to convey properties for objects that extend ALTO | |||
endpoints and are called ALTO Entities, or entities for short. | endpoints and are called ALTO Entities, or entities for short. | |||
The features introduced in this section can be used standalone. | The features introduced in this section can be used standalone. | |||
However, in some cases, these features may depend on particular | However, in some cases, these features may depend on particular | |||
information resources and need to be defined with respect to them. | information resources and need to be defined with respect to them. | |||
To this end, Section 4 introduces additional features that extend the | To this end, Section 4 introduces additional features that extend the | |||
ones presented in this section. | ones presented in this section. | |||
3.1. Entity | 3.1. Entity | |||
The concept of an ALTO Entity generalizes the concept of an ALTO | The concept of an ALTO entity generalizes the concept of an ALTO | |||
endpoint defined in Section 2.1 of [RFC7285]. An entity is an object | endpoint defined in Section 2.1 of [RFC7285]. An entity is an object | |||
that can be an endpoint defined by its network address, but it can | that can be an endpoint defined by its network address, but it can | |||
also be an object that has a defined mapping to a set of one or more | also be an object that has a defined mapping to a set of one or more | |||
network addresses or an object that is not even related to any | network addresses or an object that is not even related to any | |||
network address. Thus, whereas all endpoints are entities, not all | network address. Thus, whereas all endpoints are entities, not all | |||
entities are endpoints. | entities are endpoints. | |||
Examples of entities are: | Examples of entities are: | |||
* an ALTO endpoint that represents an application or a host | * an ALTO endpoint that represents an application or a host | |||
skipping to change at line 323 ¶ | skipping to change at line 324 ¶ | |||
* an Autonomous System (AS) that has an AS number (ASN) as its | * 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 | identifier and maps to a set of IPv4 and IPv6 addresses, which is | |||
defined in [RFC9241], | defined in [RFC9241], | |||
* a country with a code specified in [ISO3166-1] to which | * a country with a code specified in [ISO3166-1] to which | |||
applications such as content delivery network (CDN) providers | applications such as content delivery network (CDN) providers | |||
associate properties and capabilities, which is defined in | associate properties and capabilities, which is defined in | |||
[RFC9241], | [RFC9241], | |||
* a TCP/UDP network flow that is identified by a TCP/UDP 5-tuple | * a TCP or UDP network flow that is identified by a 5-tuple | |||
specifying its source and destination addresses and port numbers, | specifying its source and destination addresses and port numbers, | |||
and the IP protocol, | and the IP protocol (TCP or UDP), | |||
* a routing element, as specified in [RFC7921], that is associated | * a routing element, as specified in [RFC7921], that is associated | |||
with routing capabilities information, or | with routing capabilities information, or | |||
* an Abstract Network Element, as specified in [PATH-VECTOR], that | * an Abstract Network Element, as specified in [PATH-VECTOR], that | |||
represents an abstraction of a network part such as a router, one | represents an abstraction of a network part such as a router, one | |||
or more links, a network domain, or their aggregation. | or more links, a network domain, or their aggregation. | |||
Some of the example entities listed above have already been | Some of the example entities listed above have already been | |||
documented as ALTO entities. The other examples are provided for | documented as ALTO entities. The other examples are provided for | |||
skipping to change at line 353 ¶ | skipping to change at line 354 ¶ | |||
In this document, an entity is owned by exactly one entity domain | In this document, an entity is owned by exactly one entity domain | |||
name. An entity identifier points to exactly one entity. If two | name. An entity identifier points to exactly one entity. If two | |||
entities in two different entity domains refer to the same physical | entities in two different entity domains refer to the same physical | |||
or logical object, they are treated as different entities. For | or logical object, they are treated as different entities. For | |||
example, if an end host has both an IPv4 and an IPv6 address, these | example, if an end host has both an IPv4 and an IPv6 address, these | |||
two addresses will be treated as two entities, defined respectively | two addresses will be treated as two entities, defined respectively | |||
in the "ipv4" and "ipv6" entity domains. | in the "ipv4" and "ipv6" entity domains. | |||
3.2.1. Entity Domain Type | 3.2.1. Entity Domain Type | |||
The type of an entity domain type defines the semantics of a type of | The entity domain type defines the semantics of the type of entity | |||
entity. Entity domain types can be defined in different documents. | found in an entity domain. Entity domain types can be defined in | |||
For example: the present document defines entity domain types "ipv4" | different documents. For example: the present document defines | |||
and "ipv6" in Section 6.1 and "pid" in Section 6.2. The entity | entity domain types "ipv4" and "ipv6" in Section 6.1 and "pid" in | |||
domain type "ane", which defines Abstract Network Elements (ANEs), is | Section 6.2. The entity domain type "ane", which defines Abstract | |||
introduced in [PATH-VECTOR]. The entity domain type that defines | Network Elements (ANEs), is introduced in [PATH-VECTOR]. The | |||
country codes is introduced in [RFC9241]. An entity domain type MUST | "countrycode" entity domain type that defines country codes is | |||
be registered with IANA, as specified in Section 12.3.2. | introduced in [RFC9241]. An entity domain type MUST be registered | |||
with IANA, as specified in Section 12.3.2. | ||||
3.2.2. Entity Domain Name | 3.2.2. Entity Domain Name | |||
In this document, the identifier of an entity domain is mostly called | In this document, the identifier of an entity domain is mostly called | |||
"entity domain name". The identifier of an entity domain is defined | "entity domain name". The identifier of an entity domain is scoped | |||
in the scope of an ALTO server. An entity domain identifier can | to an ALTO server. An entity domain identifier can sometimes be | |||
sometimes be identical to the identifier of its relevant entity | identical to the identifier of its relevant entity domain type. This | |||
domain type. This is the case when the entities of a domain have an | is the case when the entities of a domain have an identifier that | |||
identifier that points to the same object throughout all the | points to the same object throughout all the information resources of | |||
information resources of the Server that provide entity properties | the Server that are providing entity properties for this domain. For | |||
for this domain. For example, a domain of type "ipv4" containing | example, a domain of type "ipv4" containing entities that are | |||
entities that are identified by a public IPv4 address can be named | identified by a public IPv4 address can be named "ipv4" because its | |||
"ipv4" because its entities are uniquely identified by all the Server | entities are uniquely identified by all the Server resources. | |||
resources. | ||||
In some cases, the name of an entity domain cannot be simply its | In some cases, the name of an entity domain cannot be simply its | |||
entity domain type. Indeed, for some domain types, entities are | entity domain type. Indeed, for some domain types, entities are | |||
defined relative to a given information resource. This is the case | defined relative to a given information resource. This is the case | |||
for entities of domain type "pid". A PID is defined relative to a | for entities of domain type "pid". A PID is defined relative to a | |||
network map. For example, an entity "mypid10" of domain type "pid" | network map. For example, an entity "mypid10" of domain type "pid" | |||
may be defined in a given network map and be undefined in other | may be defined in a given network map and be undefined in other | |||
network maps. The entity "mypid10" may even be defined in two | network maps. The entity "mypid10" may even be defined in two | |||
different network maps, and it may map in each of these network maps | different network maps, and it may map in each of these network maps | |||
to a different set of endpoint addresses. In this case, naming an | to a different set of endpoint addresses. In this case, naming an | |||
skipping to change at line 436 ¶ | skipping to change at line 437 ¶ | |||
Likewise, the same identifier may point to both a domain name and a | Likewise, the same identifier may point to both a domain name and a | |||
property name. For example: the identifier "netmap10.pid" may point | property name. For example: the identifier "netmap10.pid" may point | |||
to either the domain defined by the PIDs of network map "netmap10" or | 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 | to a property that returns, for an entity defined by its IPv4 | |||
address, the PID of "netmap10" that contains this entity. Such cases | address, the PID of "netmap10" that contains this entity. Such cases | |||
are further explained in Section 4. | are further explained in Section 4. | |||
3.4. New Information Resource and Media Type: ALTO Property Map | 3.4. New Information Resource and Media Type: ALTO Property Map | |||
This document introduces a new ALTO information resource named | This document introduces a new ALTO information resource named | |||
Property Map. An ALTO property map provides a set of properties for | property map. An ALTO property map provides a set of properties for | |||
one or more sets of entities. A property may apply to different | one or more sets of entities. A property may apply to different | |||
entity domain types and names. For example, an ALTO property map may | entity domain types and names. For example, an ALTO property map may | |||
define the "ASN" property for both "ipv4" and "ipv6" entity domains. | define the "ASN" property for both "ipv4" and "ipv6" entity domains. | |||
The present extension also introduces a new media type. | The present extension also introduces a new media type. | |||
This document uses the same definition of an information resource as | This document uses the same definition of an information resource as | |||
Section 9.1 of [RFC7285]. ALTO uses media types to uniquely indicate | Section 9.1 of [RFC7285]. ALTO uses media types to uniquely indicate | |||
the data format used to encode the content to be transmitted between | the data format used to encode the content to be transmitted between | |||
an ALTO server and an ALTO client in the HTTP entity body. In the | an ALTO server and an ALTO client in the HTTP entity body. In the | |||
present case, an ALTO property map resource is defined by the media | present case, an ALTO property map resource is defined by the media | |||
type "application/alto-propmap+json". | type "application/alto-propmap+json". | |||
A Property Map can be queried as a GET-mode resource, thus conveying | A property map can be queried as a GET-mode resource, thus conveying | |||
all properties for all entities indicated in its capabilities. It | all properties for all entities indicated in its capabilities. It | |||
can also be queried as a POST-mode resource, thus conveying a | can also be queried as a POST-mode resource, thus conveying a | |||
selection of properties for a selection of entities. | selection of properties for a selection of entities. | |||
4. Advanced Features of the Entity Property Map Extension | 4. Advanced Features of the Entity Property Map Extension | |||
This section gives a high-level overview of the advanced features | This section gives a high-level overview of the advanced features | |||
involved in ALTO Entity Property Maps. Most of these features extend | involved in ALTO entity property maps. Most of these features extend | |||
the features defined in Section 3. | the features defined in Section 3. | |||
4.1. Entity Identifier and Entity Domain Name | 4.1. Entity Identifier and Entity Domain Name | |||
In [RFC7285], an endpoint has an identifier that is explicitly | In [RFC7285], an endpoint has an identifier that is explicitly | |||
associated with the "ipv4" or "ipv6" address domain. Examples are | associated with the "ipv4" or "ipv6" address domain. Examples are | |||
"ipv4:192.0.2.14" and "ipv6:2001:db8::12". | "ipv4:192.0.2.14" and "ipv6:2001:db8::12". | |||
In this document, example IPv4 and IPv6 addresses and prefixes are | In this document, example IPv4 and IPv6 addresses and prefixes are | |||
taken from the address ranges reserved for documentation by [RFC5737] | taken from the address ranges reserved for documentation by [RFC5737] | |||
skipping to change at line 587 ¶ | skipping to change at line 588 ¶ | |||
Additionally, entity sets sometimes are related by inclusion, | Additionally, entity sets sometimes are related by inclusion, | |||
hierarchy, or other relations. This allows defining inheritance | hierarchy, or other relations. This allows defining inheritance | |||
rules for entity properties that propagate properties among related | rules for entity properties that propagate properties among related | |||
entity sets. The Server and the Client can use these inheritance | entity sets. The Server and the Client can use these inheritance | |||
rules for further payload savings. Entity hierarchy and property | rules for further payload savings. Entity hierarchy and property | |||
inheritance rules are specified in the documents that define the | inheritance rules are specified in the documents that define the | |||
applicable domain types. The present document defines these rules | applicable domain types. The present document defines these rules | |||
for the "ipv4" and "ipv6" domain types. | for the "ipv4" and "ipv6" domain types. | |||
For applicable domain types, this document introduces "Entity | For applicable domain types, this document introduces entity property | |||
Property Inheritance rules" with the following concepts: Entity | inheritance rules with the following concepts: entity hierarchy, | |||
Hierarchy, Property Inheritance, and Property Value Unicity. A | property inheritance, and property value unicity. A detailed | |||
detailed specification of entity hierarchy and property inheritance | specification of entity hierarchy and property inheritance rules is | |||
rules is provided in Section 5.1.4. | provided in Section 5.1.4. | |||
4.4.1. Entity Hierarchy | 4.4.1. Entity Hierarchy | |||
An entity domain may allow the use of a single identifier to identify | An entity domain may allow the use of a single identifier to identify | |||
a set of related individual entities. For example, a Classless | a set of related individual entities. For example, a Classless | |||
Inter-Domain Routing (CIDR) block can be used to identify a set of | 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 | IPv4 or IPv6 entities. A CIDR block is called a hierarchical entity | |||
identifier, as it can reflect inclusion relations among entity sets. | identifier, as it can reflect inclusion relations among entity sets. | |||
That is, in an entity hierarchy, "supersets" are defined at upper | That is, in an entity hierarchy, "supersets" are defined at upper | |||
levels and include "subsets" defined at lower levels. For example, | levels and include "subsets" defined at lower levels. For example, | |||
skipping to change at line 663 ¶ | skipping to change at line 664 ¶ | |||
an entity. An example illustrating the need for such rules is | an entity. An example illustrating the need for such rules is | |||
provided in Section 6.1.3. | provided in Section 6.1.3. | |||
4.5. Supported Properties for Entity Domains in Property Map | 4.5. Supported Properties for Entity Domains in Property Map | |||
Capabilities | Capabilities | |||
A property type is not necessarily applicable to any domain type, or | A property type is not necessarily applicable to any domain type, or | |||
an ALTO Server may choose not to provide a property for all | an ALTO Server may choose not to provide a property for all | |||
applicable domains. For instance, a property type reflecting link | applicable domains. For instance, a property type reflecting link | |||
bandwidth is likely not defined for entities of a domain of type | bandwidth is likely not defined for entities of a domain of type | |||
"countrycode". Therefore, an ALTO server providing Property Maps | "countrycode". Therefore, an ALTO server providing property maps | |||
needs to specify the properties that can be queried on the different | needs to specify the properties that can be queried on the different | |||
entity domains it supports. | entity domains it supports. | |||
This document explains how the Information Resource Directory (IRD) | This document explains how the Information Resource Directory (IRD) | |||
capabilities of a Property Map resource unambiguously expose which | capabilities of a property map resource unambiguously expose which | |||
properties a Client can query on a given entity domain: | properties a Client can query on a given entity domain: | |||
* a field named "mappings" lists the names of the entity domains | * a field named "mappings" lists the names of the entity domains | |||
supported by the Property Map, and | supported by the property map, and | |||
* for each listed entity domain, a list of the names of the | * for each listed entity domain, a list of the names of the | |||
applicable properties is provided. | applicable properties is provided. | |||
An example is provided in Section 10.3. The "mappings" field | An example is provided in Section 10.3. The "mappings" field | |||
associates entity domains and properties that can be resource- | associates entity domains and properties that can be resource- | |||
agnostic or resource-specific. This allows a Client to formulate | agnostic or resource-specific. This allows a Client to formulate | |||
compact and unambiguous entity property queries, possibly relating to | compact and unambiguous entity property queries, possibly relating to | |||
one or more information resources. In particular: | one or more information resources. In particular: | |||
skipping to change at line 737 ¶ | skipping to change at line 738 ¶ | |||
following reason: although a cost map exposes PID identifiers, it | following reason: although a cost map exposes PID identifiers, it | |||
does not define the set of addresses included in this PID. Neither | 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 | 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 | because a cost map only exposes PID pairs on which a queried cost | |||
type is defined. Therefore, the resource "costmap3" does not enable | type is defined. Therefore, the resource "costmap3" does not enable | |||
a Client to extract information on the existing PID entities or on | a Client to extract information on the existing PID entities or on | |||
the addresses they contain. | the addresses they contain. | |||
Instead, the cost map uses a network map where all the PIDs used in a | 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 | cost map are defined together with the addresses contained by the | |||
PIDs. This network map is qualified in this document as the Defining | PIDs. This network map is qualified in this document as the defining | |||
Information Resource for the entity domain of type "pid", and this | information resource for the entity domain of type "pid", and this | |||
concept is explained in Section 4.6.1. | concept is explained in Section 4.6.1. | |||
4.6.1. Defining Information Resource and Its Media Type | 4.6.1. Defining Information Resource and Its Media Type | |||
For the reasons explained in Section 4.6, this document introduces | For the reasons explained in Section 4.6, this document introduces | |||
the concept of "Defining Information Resource and its Media Type". | the concept of "Defining Information Resource and its Media Type". | |||
A defining information resource for an entity domain D is the | A defining information resource for an entity domain D is the | |||
information resource where entities of D are defined. That is, all | information resource where entities of D are defined. That is, all | |||
the information on the entities of D can be retrieved in this | the information on the entities of D can be retrieved in this | |||
resource. A defining information resource is defined for resource- | resource. A defining information resource is defined for resource- | |||
specific entity domains. It does not exist for entity domains that | specific entity domains. It does not exist for entity domains that | |||
are not resource-specific such as "ipv4" or "ipv6". Neither does it | are not resource-specific such as "ipv4" or "ipv6". Neither does it | |||
exist for entity domains that are covering entity identifiers already | exist for entity domains that are covering entity identifiers already | |||
defined in other standardization documents, as is the case for | defined in other standardization documents, as is the case for | |||
country code identifiers standardized in [ISO3166-1] or AS numbers | country code identifiers standardized in [ISO3166-1] or AS numbers | |||
allocated by IANA. This is useful for entity domain types that are | allocated by IANA. This is useful for entity domain types that are | |||
by essence domain-specific, such as the "pid" domain type. It is | by essence domain-specific, such as the domain type "pid". It is | |||
also useful for resource-specific entity domains constructed from | also useful for resource-specific entity domains constructed from | |||
resource-agnostic domain types, such as network-map-specific domains | resource-agnostic domain types, such as network-map-specific domains | |||
of local IPv4 addresses. | of local IPv4 addresses. | |||
The defining information resource of a resource-specific entity | The defining information resource of a resource-specific entity | |||
domain D, when it exists, is unique and has the following | domain D, when it exists, is unique and has the following | |||
characteristics: | characteristics: | |||
* it has an entry in the IRD; | * it has an entry in the IRD; | |||
skipping to change at line 787 ¶ | skipping to change at line 788 ¶ | |||
A fundamental characteristic of a defining information resource is | A fundamental characteristic of a defining information resource is | |||
its media type. There is a unique association between an entity | its media type. There is a unique association between an entity | |||
domain type and the media type of its defining information resource. | domain type and the media type of its defining information resource. | |||
When an entity domain type allows associations with defining | When an entity domain type allows associations with defining | |||
information resources, the media type of the potential defining | information resources, the media type of the potential defining | |||
information resource MUST be specified: | information resource MUST be specified: | |||
* in the document that defines this entity domain type, and | * in the document that defines this entity domain type, and | |||
* in the "ALTO Entity Domain Types" IANA registry and related | * in the "ALTO Entity Domain Types" IANA registry. | |||
information. | ||||
When the Client wants to use a resource-specific entity domain, it | When the Client wants to use a resource-specific entity domain, it | |||
needs to be cognizant of the media type of its defining information | needs to be cognizant of the media type of its defining information | |||
resource. If the Server exposes a resource-specific entity domain | resource. If the Server exposes a resource-specific entity domain | |||
with a noncompliant media type for the defining resource, the Client | with a noncompliant media type for the defining resource, the Client | |||
MUST ignore the entities from that entity domain to avoid errors. | MUST ignore the entities from that entity domain to avoid errors. | |||
4.6.2. Examples of Defining Information Resources and Their Media Types | 4.6.2. Examples of Defining Information Resources and Their Media Types | |||
Here are examples of defining information resource types and their | Here are examples of defining information resource types and their | |||
skipping to change at line 816 ¶ | skipping to change at line 816 ¶ | |||
specific resource is "application/alto-networkmap+json" because | specific resource is "application/alto-networkmap+json" because | |||
IPv4 and IPv6 addresses covered by the Server are defined in | IPv4 and IPv6 addresses covered by the Server are defined in | |||
network map resources. | network map resources. | |||
* For entities of domain type "ane"; [PATH-VECTOR] defines entities | * For entities of domain type "ane"; [PATH-VECTOR] defines entities | |||
named "ANE", where ANE stands for Abstract Network Element, and | named "ANE", where ANE stands for Abstract Network Element, and | |||
the entity domain type "ane". An ANE may have a persistent | the entity domain type "ane". An ANE may have a persistent | |||
identifier, say, "entity-4", that is provided by the Server as a | identifier, say, "entity-4", that is provided by the Server as a | |||
value of the "persistent-entity-id" property of this ANE. Further | value of the "persistent-entity-id" property of this ANE. Further | |||
properties may then be queried on an ANE by using its persistent | properties may then be queried on an ANE by using its persistent | |||
entity ID. These properties are available from a persistent | entity identifier. These properties are available from a | |||
property map that defines properties for a specific "ane" domain. | persistent property map that defines properties for a specific | |||
Together with the persistent identifier, the Server also provides | "ane" domain. Together with the persistent identifier, the Server | |||
the property map resource identifier where the "ane" domain | also provides the property map resource identifier where the "ane" | |||
containing "entity-4" is defined. The definition of the "ane" | domain containing "entity-4" is defined. The definition of the | |||
entity domain containing "entity-4" is thus specific to the | "ane" entity domain containing "entity-4" is thus specific to the | |||
property map. Therefore, for entities of domain type "ane" that | property map. Therefore, for entities of domain type "ane" that | |||
have a persistent identifier, the media type of the defining | have a persistent identifier, the media type of the defining | |||
information resource is "application/alto-propmap+json". | information resource is "application/alto-propmap+json". | |||
* Last, the entity domain types "asn" and "countrycode" defined in | * Last, the entity domain types "asn" and "countrycode" defined in | |||
[RFC9241] do not have a defining information resource. Indeed, | [RFC9241] do not have a defining information resource. Indeed, | |||
the entity identifiers in these two entity domain types are | the entity identifiers in these two entity domain types are | |||
already standardized in documents that the Client can use. | already standardized in documents that the Client can use. | |||
4.7. Defining Information Resources for Resource-Specific Property | 4.7. Defining Information Resources for Resource-Specific Property | |||
skipping to change at line 873 ¶ | skipping to change at line 873 ¶ | |||
5. Protocol Specification: Basic Data Types | 5. Protocol Specification: Basic Data Types | |||
5.1. Entity Domain | 5.1. Entity Domain | |||
5.1.1. Entity Domain Type | 5.1.1. Entity Domain Type | |||
An entity domain has a type, which is uniquely identified by a string | 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 | that MUST be no more than 64 characters, and MUST NOT contain | |||
characters other than US-ASCII alphanumeric characters | characters other than US-ASCII alphanumeric characters | |||
(U+0030-U+0039, U+0041-U+005A, and U+0061-U+007A), the hyphen ('-', | (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). | ('-', U+002D), the colon (':', U+003A), or the low line ('_', | |||
U+005F). | ||||
The usage of colon (':', U+003A) MUST obey the rules below: | The usage of colon (':', U+003A) MUST obey the rules below: | |||
* The colon (':', U+003A) character MUST NOT appear more than once; | * The colon (':', U+003A) character MUST NOT appear more than once; | |||
* The colon character MUST NOT be used unless within the string | * The colon character MUST NOT be used unless within the string | |||
"priv:"; | "priv:"; | |||
* The string "priv:" MUST NOT be used unless it starts the string | * The string "priv:" MUST NOT be used unless it starts the string | |||
that identifies an entity domain type; and | that identifies an entity domain type; and | |||
skipping to change at line 944 ¶ | skipping to change at line 945 ¶ | |||
"[ [ ResourceID ] '.' ]" | "[ [ ResourceID ] '.' ]" | |||
depends on the category of entity domain. | depends on the category of entity domain. | |||
Note that the '.' separator is not allowed in EntityDomainType, and | Note that the '.' separator is not allowed in EntityDomainType, and | |||
hence there is no ambiguity on whether an entity domain name refers | hence there is no ambiguity on whether an entity domain name refers | |||
to a resource-agnostic entity domain or a resource-specific entity | to a resource-agnostic entity domain or a resource-specific entity | |||
domain. | domain. | |||
Note also that Section 10.1 of [RFC7285] specifies the format of the | Note also that Section 10.1 of [RFC7285] specifies the format of the | |||
PID name, which is the format of the resource ID including the | PID name, which is the format of the resource identifier including | |||
following specification: | the following specification: | |||
| The '.' separator is reserved for future use and MUST NOT be used | | The '.' separator is reserved for future use and MUST NOT be used | |||
| unless specifically indicated in this document, or an extension | | unless specifically indicated in this document, or an extension | |||
| document. | | document. | |||
The present extension keeps the format specification of [RFC7285], | The present extension keeps the format specification of [RFC7285], | |||
hence the '.' separator MUST NOT be used in an information resource | hence the '.' separator MUST NOT be used in an information resource | |||
ID. | identifier. | |||
5.1.2.1. Resource-Specific Entity Domain | 5.1.2.1. Resource-Specific Entity Domain | |||
A resource-specific entity domain is identified by an entity domain | A resource-specific entity domain is identified by an entity domain | |||
name constructed as follows. It MUST start with a resource ID using | name constructed as follows. It MUST start with a resource | |||
the ResourceID type defined in Section 10.2 of [RFC7285], followed by | identifier using the ResourceID type defined in Section 10.2 of | |||
the '.' separator (U+002E), followed by a string of the type | [RFC7285], followed by the '.' separator (U+002E), followed by a | |||
EntityDomainType specified in Section 5.1.1. | string of the type EntityDomainType specified in Section 5.1.1. | |||
For example, if an ALTO server provides two network maps "netmap-1" | For example, if an ALTO server provides two network maps "netmap-1" | |||
and "netmap-2", these network maps can define two resource-specific | and "netmap-2", these network maps can define two resource-specific | |||
domains of type "pid", respectively identified by "netmap-1.pid" and | domains of type "pid", respectively identified by "netmap-1.pid" and | |||
"netmap-2.pid". | "netmap-2.pid". | |||
5.1.2.2. Resource-Agnostic Entity Domain | 5.1.2.2. Resource-Agnostic Entity Domain | |||
A resource-agnostic entity domain contains entities that are | A resource-agnostic entity domain contains entities that are | |||
identified independently of any information resource. The identifier | identified independently of any information resource. The identifier | |||
skipping to change at line 1002 ¶ | skipping to change at line 1003 ¶ | |||
identifier of a self-defined entity domain can be of the format: | identifier of a self-defined entity domain can be of the format: | |||
EntityDomainName ::= '.' EntityDomainType | EntityDomainName ::= '.' EntityDomainType | |||
where '.' indicates that the entity domain only exists within the | where '.' indicates that the entity domain only exists within the | |||
property map resource using it. | property map resource using it. | |||
A self-defined entity domain can be viewed as a particular case of | A self-defined entity domain can be viewed as a particular case of | |||
resource-specific entity domain, where the specific resource is the | resource-specific entity domain, where the specific resource is the | |||
current resource that uses this entity domain. In that case, for the | current resource that uses this entity domain. In that case, for the | |||
sake of simplification, the component "ResourceID" MUST be omitted in | sake of simplification, the component ResourceID MUST be omitted in | |||
its entity domain name. | its entity domain name. | |||
5.1.3. Entity Identifier | 5.1.3. Entity Identifier | |||
Entities in an entity domain are identified by entity identifiers | Entities in an entity domain are identified by entity identifiers | |||
(EntityID) of the following format: | (EntityID) of the following format: | |||
EntityID ::= EntityDomainName ':' DomainTypeSpecificEntityID | EntityID ::= EntityDomainName ':' DomainTypeSpecificEntityID | |||
Examples from the Internet address entity domains include individual | Examples from the Internet address entity domains include individual | |||
skipping to change at line 1059 ¶ | skipping to change at line 1060 ¶ | |||
Each entity property has a type to indicate the encoding and the | 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 | semantics of the value of this entity property, and has a name to | |||
identify it. | identify it. | |||
5.2.1. Entity Property Type | 5.2.1. Entity Property Type | |||
The type EntityPropertyType is used in this document to indicate a | The type EntityPropertyType is used in this document to indicate a | |||
string denoting an entity property type. The string MUST be no more | string denoting an entity property type. The string MUST be no more | |||
than 32 characters, and it MUST NOT contain characters other than US- | than 32 characters, and it MUST NOT contain characters other than US- | |||
ASCII alphanumeric characters (U+0030-U+0039, U+0041-U+005A, and | ASCII alphanumeric characters (U+0030-U+0039, U+0041-U+005A, and | |||
U+0061-U+007A), the hyphen ('-', U+002D), the colon (':', U+003A), or | U+0061-U+007A), the hyphen-minus ('-', U+002D), the colon (':', | |||
the low line ('_', U+005F). Note that the '.' separator is not | U+003A), or the low line ('_', U+005F). Note that the '.' separator | |||
allowed because it is reserved to separate an entity property type | is not allowed because it is reserved to separate an entity property | |||
and an information resource identifier when an entity property is | type and an information resource identifier when an entity property | |||
resource-specific. | is resource-specific. | |||
While Section 5.1.1 allows the use of the character ":" with | While Section 5.1.1 allows the use of the character ":" with | |||
restrictions on entity domain identifiers, it can be used without | restrictions on entity domain identifiers, it can be used without | |||
restrictions on entity property type identifiers. This relates to | restrictions on entity property type identifiers. This relates to | |||
[RFC7285], where a Server can define properties for endpoints "ipv4" | [RFC7285], where a Server can define properties for endpoints "ipv4" | |||
and "ipv6". In the present extension, there is a mapping of ALTO | and "ipv6". In the present extension, there is a mapping of ALTO | |||
entity domain types "ipv4" and "ipv6" to ALTO address types "ipv4" | entity domain types "ipv4" and "ipv6" to ALTO address types "ipv4" | |||
and "ipv6". Properties defined for "ipv4" and "ipv6" endpoints | and "ipv6". Properties defined for "ipv4" and "ipv6" endpoints | |||
should be reusable on "ipv4" and "ipv6" entities. Forbidding the | should be reusable on "ipv4" and "ipv6" entities. Forbidding the | |||
usage of ":" in a non-private entity property type identifier would | usage of ":" in a non-private entity property type identifier would | |||
skipping to change at line 1111 ¶ | skipping to change at line 1112 ¶ | |||
or "ipv6", while it is not applicable to entities in an entity | or "ipv6", while it is not applicable to entities in an entity | |||
domain of type "pid". | domain of type "pid". | |||
* The intended semantics of the value of an entity property may also | * The intended semantics of the value of an entity property may also | |||
depend on the entity domain type. For example, suppose that a | depend on the entity domain type. For example, suppose that a | |||
property named "geo-location" is defined as the coordinates of a | property named "geo-location" is defined as the coordinates of a | |||
point and is encoded as: "latitude longitude [altitude]." When | point and is encoded as: "latitude longitude [altitude]." When | |||
applied to an entity that represents a specific host computer and | applied to an entity that represents a specific host computer and | |||
identified by an address in an entity domain of type "ipv4" or | identified by an address in an entity domain of type "ipv4" or | |||
"ipv6", the "geo-location" property would define the host's | "ipv6", the "geo-location" property would define the host's | |||
location. However, when applied to an entity in a "pid" domain | location. However, when applied to an entity in a domain of type | |||
type, the property would indicate a location representative of all | "pid", the property would indicate a location representative of | |||
hosts in this "pid" entity. | all hosts in this "pid" entity. | |||
5.2.2. Entity Property Name | 5.2.2. Entity Property Name | |||
Each entity property is identified by an entity property name, which | Each entity property is identified by an entity property name, which | |||
is a string of the following format: | is a string of the following format: | |||
EntityPropertyName ::= [ [ ResourceID ] '.' ] EntityPropertyType | EntityPropertyName ::= [ [ ResourceID ] '.' ] EntityPropertyType | |||
Similar to the endpoint property type defined in Section 10.8 of | Similar to the endpoint property type defined in Section 10.8 of | |||
[RFC7285], each entity property may be defined by either the property | [RFC7285], each entity property may be defined by either the property | |||
skipping to change at line 1137 ¶ | skipping to change at line 1138 ¶ | |||
The entity property name of a resource-specific entity property | The entity property name of a resource-specific entity property | |||
starts with a string of the type ResourceID defined in [RFC7285], | starts with a string of the type ResourceID defined in [RFC7285], | |||
followed by the '.' separator (U+002E) and an EntityDomainType typed | followed by the '.' separator (U+002E) and an EntityDomainType typed | |||
string. For example, the "pid" properties of an "ipv4" entity | string. For example, the "pid" properties of an "ipv4" entity | |||
defined by two different maps "net-map-1" and "net-map-2" are | defined by two different maps "net-map-1" and "net-map-2" are | |||
identified by "net-map-1.pid" and "net-map-2.pid" respectively. | identified by "net-map-1.pid" and "net-map-2.pid" respectively. | |||
The specific information resource of an entity property may be the | The specific information resource of an entity property may be the | |||
current information resource itself, that is, the property map | current information resource itself, that is, the property map | |||
defining the property. In that case, the ResourceID in the property | defining the property. In that case, the ResourceID in the property | |||
name SHOULD be omitted. For example, the property name ".asn" | name SHOULD be omitted. For example, the property name ".ASN" | |||
applied to an entity identified by its IPv4 address indicates the AS | applied to an entity identified by its IPv4 address indicates the AS | |||
number of the AS that "owns" the entity, where the returned AS number | number of the AS that "owns" the entity, where the returned AS number | |||
is defined by the property map itself. | is defined by the property map itself. | |||
5.2.3. Format for Entity Property Value | 5.2.3. Format for Entity Property Value | |||
Section 11.4.1.6 of [RFC7285] specifies that an implementation of the | Section 11.4.1.6 of [RFC7285] specifies that an implementation of the | |||
Endpoint Property Service specified in [RFC7285] SHOULD assume that | Endpoint Property Service specified in [RFC7285] SHOULD assume that | |||
the property value is a JSONString and fail to parse if it is not. | the property value is a JSONString and fail to parse if it is not. | |||
This document extends the format of a property value by allowing it | This document extends the format of a property value by allowing it | |||
to be a JSONValue instead of just a JSONString. | to be a JSONValue instead of just a JSONString. | |||
6. Entity Domain Types Defined in This Document | 6. Entity Domain Types Defined in This Document | |||
The definition of each entity domain type MUST include (1) the entity | The definition of each entity domain type MUST include the entity | |||
domain type name and (2) domain-specific entity identifiers, and MAY | domain type name and the domain-specific entity identifiers. The | |||
include (3) hierarchy and inheritance semantics optionally. This | definition of an entity domain type MAY include hierarchy and | |||
document defines three initial entity domain types as follows. | inheritance semantics. This document defines three initial entity | |||
domain types as follows. | ||||
6.1. Internet Address Domain Types | 6.1. Internet Address Domain Types | |||
The document defines two entity domain types (IPv4 and IPv6) for | The document defines two entity domain types (IPv4 and IPv6) for | |||
Internet addresses. Both types are resource-agnostic entity domain | Internet addresses. Both types are resource-agnostic entity domain | |||
types and hence define corresponding resource-agnostic entity domains | types and hence define corresponding resource-agnostic entity domains | |||
as well. Since the two domains use the same hierarchy and | as well. Since the two domains use the same hierarchy and | |||
inheritance semantics, we define the semantics together, instead of | inheritance semantics, we define the semantics together, instead of | |||
repeating for each. | repeating for each. | |||
6.1.1. Entity Domain Type: IPv4 | 6.1.1. Entity Domain Type: IPv4 | |||
6.1.1.1. Entity Domain Type Identifier | 6.1.1.1. Entity Domain Type Identifier | |||
The identifier for this Entity Domain Type is "ipv4". | The identifier for this entity domain type is "ipv4". | |||
6.1.1.2. Domain-Specific Entity Identifiers | 6.1.1.2. Domain-Specific Entity Identifiers | |||
Individual addresses are strings as specified by the IPv4address rule | Individual addresses are strings as specified by the IPv4address rule | |||
in Section 3.2.2 of [RFC3986]; hierarchical addresses are strings as | in Section 3.2.2 of [RFC3986]; hierarchical addresses are strings as | |||
specified by the prefix notation in Section 3.1 of [RFC4632]. To | specified by the prefix notation in Section 3.1 of [RFC4632]. An | |||
define properties, an individual Internet address and the | individual Internet address and the corresponding full-length prefix | |||
corresponding full-length prefix are considered aliases for the same | are considered aliases for the same entity on which to define | |||
entity on which to define properties. Thus, "ipv4:192.0.2.0" and | properties. Thus, "ipv4:192.0.2.0" and "ipv4:192.0.2.0/32" are | |||
"ipv4:192.0.2.0/32" are equivalent. | equivalent. | |||
6.1.2. Entity Domain Type: IPv6 | 6.1.2. Entity Domain Type: IPv6 | |||
6.1.2.1. Entity Domain Type Identifier | 6.1.2.1. Entity Domain Type Identifier | |||
The identifier for this Entity Domain Type is "ipv6". | The identifier for this Entity Domain Type is "ipv6". | |||
6.1.2.2. Domain-Specific Entity Identifiers | 6.1.2.2. Domain-Specific Entity Identifiers | |||
Individual addresses are strings as specified by Section 4 of | Individual addresses are strings as specified by Section 4 of | |||
skipping to change at line 1210 ¶ | skipping to change at line 1212 ¶ | |||
Both Internet address domains allow property values to be inherited. | Both Internet address domains allow property values to be inherited. | |||
Specifically, if a property P is not defined for a specific Internet | Specifically, if a property P is not defined for a specific Internet | |||
address I, but P is defined for a hierarchical Internet address C | address I, but P is defined for a hierarchical Internet address C | |||
that represents a set of addresses containing I, then the address I | that represents a set of addresses containing I, then the address I | |||
inherits the value of P defined for the hierarchical address C. If | inherits the value of P defined for the hierarchical address C. If | |||
more than one such hierarchical addresses define a value for P, I | more than one such hierarchical addresses define a value for P, I | |||
inherits the value of P in the hierarchical address with the longest | inherits the value of P in the hierarchical address with the longest | |||
prefix. Note that this longest prefix rule ensures no multiple value | prefix. Note that this longest prefix rule ensures no multiple value | |||
inheritances, and hence no ambiguity. | inheritances, and hence no ambiguity. | |||
Hierarchical addresses can also inherit properties: if a property P | Hierarchical addresses can also inherit properties. For instance, if | |||
is not defined for the hierarchical address C, but is defined for a | a property P: | |||
set of hierarchical addresses, where each address C' in the set | ||||
contains all IP addresses in C, and C' has a shorter prefix length | * is not defined for the hierarchical address C, | |||
than C, then C MUST inherit the property P from the C' having the | ||||
longest prefix length. | * 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, suppose that a server defines a property P for the | As an example, suppose that a server defines a property P for the | |||
following entities: | following entities: | |||
ipv4:192.0.2.0/26: P=v1 | +--------------------+------+ | |||
ipv4:192.0.2.0/28: P=v2 | | ipv4:192.0.2.0/26: | P=v1 | | |||
ipv4:192.0.2.0/30: P=v3 | +--------------------+------+ | |||
ipv4:192.0.2.0: P=v4 | | ipv4:192.0.2.0/28: | P=v2 | | |||
+--------------------+------+ | ||||
| ipv4:192.0.2.0/30: | P=v3 | | ||||
+--------------------+------+ | ||||
| ipv4:192.0.2.0: | P=v4 | | ||||
+--------------------+------+ | ||||
Figure 1: Defined Property Values | Table 1: Defined Property | |||
Values | ||||
Then the following entities have the indicated 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.0: | P=v4 | | |||
ipv4:192.0.2.16: P=v1 | +--------------------+---------------+ | |||
ipv4:192.0.2.32: P=v1 | | ipv4:192.0.2.1: | P=v3 | | |||
ipv4:192.0.2.64: (not defined) | +--------------------+---------------+ | |||
ipv4:192.0.2.0/32: P=v4 | | ipv4:192.0.2.16: | P=v1 | | |||
ipv4:192.0.2.0/31: P=v3 | +--------------------+---------------+ | |||
ipv4:192.0.2.0/29: P=v2 | | ipv4:192.0.2.32: | P=v1 | | |||
ipv4:192.0.2.0/27: P=v1 | +--------------------+---------------+ | |||
ipv4:192.0.2.0/25: (not defined) | | 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) | | ||||
+--------------------+---------------+ | ||||
Figure 2: Inherited Property Values | Table 2: Inherited Property Values | |||
An ALTO server MAY explicitly indicate a property as not having a | An ALTO server MAY explicitly indicate a property as not having a | |||
value for a particular entity. That is, a server MAY say that | value for a particular entity. That is, a server MAY say that | |||
property P of entity X is "defined to have no value" instead of | property P of entity X is "defined to have no value" instead of | |||
"undefined". To indicate "no value", a server MAY perform different | "undefined". To indicate "no value", a server MAY perform different | |||
behaviors: | behaviors: | |||
* If entity X would inherit a value for property P, and if the ALTO | * If entity X would inherit a value for property P, and if the ALTO | |||
server decides to say that "X has no value for P", then the ALTO | server decides to say that "X has no value for P", then the ALTO | |||
server MUST return a "null" value for that property on X. In this | server MUST return a "null" value for that property on X. In this | |||
skipping to change at line 1271 ¶ | skipping to change at line 1297 ¶ | |||
If the ALTO server does not define any properties for an entity, then | If the ALTO server does not define any properties for an entity, then | |||
the server MAY omit that entity from the response. | the server MAY omit that entity from the response. | |||
6.1.4. Defining Information Resource Media Type for Domain Types IPv4 | 6.1.4. Defining Information Resource Media Type for Domain Types IPv4 | |||
and IPv6 | and IPv6 | |||
Entity domain types "ipv4" and "ipv6" both allow the definition of | Entity domain types "ipv4" and "ipv6" both allow the definition of | |||
resource-specific entity domains. When resource-specific domains are | resource-specific entity domains. When resource-specific domains are | |||
defined with entities of domain type "ipv4" or "ipv6", the defining | defined with entities of domain type "ipv4" or "ipv6", the defining | |||
information resource for an entity domain of type "ipv4" or "ipv6" | information resource for an entity domain of type "ipv4" or "ipv6" | |||
MUST be a Network Map. The media type of a defining information | MUST be a network map. The media type of a defining information | |||
resource is therefore: | resource is therefore: | |||
application/alto-networkmap+json | application/alto-networkmap+json | |||
6.2. Entity Domain Type: PID | 6.2. Entity Domain Type: PID | |||
The PID entity domain associates property values with the PIDs in a | The PID entity domain associates property values with the PIDs in a | |||
network map. Accordingly, this entity domain always depends on a | network map. Accordingly, this entity domain always depends on a | |||
network map. | network map. | |||
skipping to change at line 1301 ¶ | skipping to change at line 1327 ¶ | |||
6.2.3. Hierarchy and Inheritance | 6.2.3. Hierarchy and Inheritance | |||
There is no hierarchy or inheritance for properties associated with | There is no hierarchy or inheritance for properties associated with | |||
PIDs. | PIDs. | |||
6.2.4. Defining Information Resource Media Type for Domain Type PID | 6.2.4. Defining Information Resource Media Type for Domain Type PID | |||
The entity domain type "pid" allows the definition of resource- | The entity domain type "pid" allows the definition of resource- | |||
specific entity domains. When resource-specific domains are defined | specific entity domains. When resource-specific domains are defined | |||
with entities of domain type "pid", the defining information resource | with entities of domain type "pid", the defining information resource | |||
for entity domain type "pid" MUST be a Network Map. The media type of | for entity domain type "pid" MUST be a network map. The media type | |||
a defining information resource is therefore: | of a defining information resource is therefore: | |||
application/alto-networkmap+json | application/alto-networkmap+json | |||
6.2.5. Relationship To Internet Addresses Domains | 6.2.5. Relationship To Internet Addresses Domains | |||
The PID domain and the Internet address domains are completely | The PID domain and the Internet address domains are completely | |||
independent; the properties associated with a PID have no relation to | independent; the properties associated with a PID have no relation to | |||
the properties associated with the prefixes or endpoint addresses in | the properties associated with the prefixes or endpoint addresses in | |||
that PID. An ALTO server MAY choose to assign all the properties of | 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 these properties. | a PID to the prefixes in that PID or only some of these properties. | |||
skipping to change at line 1343 ¶ | skipping to change at line 1369 ¶ | |||
For example, because Internet addresses are allocated to service | For example, because Internet addresses are allocated to service | |||
providers by blocks of prefixes, an "ISP" property would be best | providers by blocks of prefixes, an "ISP" property would be best | |||
associated with Internet address domain types. On the other hand, a | associated with Internet address domain types. On the other hand, a | |||
property that explains why a PID was formed, or how it relates to a | property that explains why a PID was formed, or how it relates to a | |||
provider's network, would best be associated with the PID domain | provider's network, would best be associated with the PID domain | |||
type. | type. | |||
7. Property Map | 7. Property Map | |||
A property map returns the properties defined for all entities in one | A property map returns the properties defined for all entities in one | |||
or more domains, e.g., the "location" property of entities in "pid" | or more domains, e.g., the "location" property of entities in a | |||
domain, and the "ASN" property of entities in "ipv4" and "ipv6" | domain of type "pid", and the "ASN" property of entities in domains | |||
domains. Section 10.4 gives an example of a property map request and | of types "ipv4" and "ipv6". Section 10.4 gives an example of a | |||
its response. | property map request and its response. | |||
Downloading the whole property map is a way for the Client to obtain | Downloading the whole property map is a way for the Client to obtain | |||
the Entity IDs that can be used as input for a Filtered Property Map | the entity identifiers that can be used as input for a filtered | |||
request. However, a whole property map may be too voluminous for a | property map request. However, a whole property map may be too | |||
Client that only wants the list of applicable Entity IDs. How to | voluminous for a Client that only wants the list of applicable entity | |||
obtain the list of entities of a filtered property map in a | identifiers. How to obtain the list of entities of a filtered | |||
simplified response is specified in Section 8. | property map in a simplified response is specified in Section 8. | |||
7.1. Media Type | 7.1. Media Type | |||
The media type of a property map is "application/alto-propmap+json". | The media type of a property map is "application/alto-propmap+json". | |||
7.2. HTTP Method | 7.2. HTTP Method | |||
The property map is requested using the HTTP GET method. | The property map is requested using the HTTP GET method. | |||
7.3. Accept Input Parameters | 7.3. Accept Input Parameters | |||
A Property Map has no Accept Input parameters. | A property map has no Accept Input parameters. | |||
7.4. Capabilities | 7.4. Capabilities | |||
The capabilities are defined by an object of type | The capabilities are defined by an object of type | |||
PropertyMapCapabilities: | PropertyMapCapabilities: | |||
object { | object { | |||
EntityPropertyMapping mappings; | EntityPropertyMapping mappings; | |||
} PropertyMapCapabilities; | } PropertyMapCapabilities; | |||
skipping to change at line 1390 ¶ | skipping to change at line 1416 ¶ | |||
with fields: | with fields: | |||
mappings: A JSON object whose keys are names of entity domains and | mappings: A JSON object whose keys are names of entity domains and | |||
values are the supported entity properties of the corresponding | values are the supported entity properties of the corresponding | |||
entity domains. | entity domains. | |||
7.5. Uses | 7.5. Uses | |||
The "uses" field of a property map resource in an IRD entry specifies | The "uses" field of a property map resource in an IRD entry specifies | |||
the resources in this same IRD on which this property map directly | the resources in this same IRD on which this property map directly | |||
depends. It is an array of resource ID(s). This array identifies | depends. It is an array of resource identifier(s). This array | |||
the defining information resources associated with the resource- | identifies the defining information resources associated with the | |||
specific entity domains and properties that are indicated in this | resource-specific entity domains and properties that are indicated in | |||
resource. | this resource. | |||
7.6. Response | 7.6. Response | |||
If the entity domains in this property map depend on other resources, | If the entity domains in this property map depend on other resources, | |||
the "dependent-vtags" field in the "meta" field of the response MUST | the "dependent-vtags" field in the "meta" field of the response MUST | |||
be an array that includes the version tags of those resources, and | be an array that includes the version tags of those resources, and | |||
the order MUST be consistent with the "uses" field of this property | the order MUST be consistent with the "uses" field of this property | |||
map resource. The data component of a property map response is named | map resource. The data component of a property map response is named | |||
"property-map", which is a JSON object of type PropertyMapData, | "property-map", which is a JSON object of type PropertyMapData, | |||
where: | where: | |||
skipping to change at line 1441 ¶ | skipping to change at line 1467 ¶ | |||
* If the entity is in a resource-specific entity domain, the ALTO | * If the entity is in a resource-specific entity domain, the ALTO | |||
server MUST only return self-defined properties and resource- | server MUST only return self-defined properties and resource- | |||
specific properties that depend on the same resource as the entity | specific properties that depend on the same resource as the entity | |||
does. The ALTO client MUST ignore any resource-specific property | does. The ALTO client MUST ignore any resource-specific property | |||
for this entity if the mapping between this resource-specific | for this entity if the mapping between this resource-specific | |||
property and this entity is not indicated, in the IRD, in the | property and this entity is not indicated, in the IRD, in the | |||
"mappings" capability of the property map resource. | "mappings" capability of the property map resource. | |||
* If the entity identifier is resource-agnostic, the ALTO server | * If the entity identifier is resource-agnostic, the ALTO server | |||
SHOULD return the self-defined properties and all the resource- | SHOULD return the self-defined properties and all the resource- | |||
specific properties that are defined in the property defining | specific properties defined in the property-defining information | |||
information resources indicated, in the IRD, in the "mappings" | resources that are indicated, in the IRD, in the "mappings" | |||
capability of the property map resource, unless property values | capability of the property map resource, unless property values | |||
can be omitted upon some inheritance rules. | can be omitted upon some inheritance rules. | |||
The ALTO server MAY omit property values that are inherited rather | The ALTO server MAY omit property values that are inherited rather | |||
than explicitly defined in order to achieve more compact encoding. | than explicitly defined in order to achieve more compact encoding. | |||
As a consequence, the ALTO Client MUST NOT assume inherited property | As a consequence, the ALTO Client MUST NOT assume inherited property | |||
values will all be present. If the Client needs inherited values, it | values will all be present. If the Client needs inherited values, it | |||
MUST use the entity domain's inheritance rules to deduce those | MUST use the entity domain's inheritance rules to deduce those | |||
values. | values. | |||
8. Filtered Property Map | 8. Filtered Property Map | |||
A filtered property map returns the values of a set of properties for | A filtered property map returns the values of a set of properties for | |||
a set of entities selected by the client. | a set of entities selected by the client. | |||
Sections 10.5, 10.6, 10.7, and 10.8 give examples of filtered | Sections 10.5, 10.6, 10.7, and 10.8 give examples of filtered | |||
property map requests and responses. | property map requests and responses. | |||
While the IRD lists all the names of the supported properties, it | While the IRD lists all the names of the supported properties, it | |||
only lists the names of the supported entity domains and not the | only lists the names of the supported entity domains and not the | |||
entity IDs. Sometimes a client may only want to know what entity IDs | entity identifiers. Sometimes a client only wants to know what | |||
it can provide as input to a filtered property map request but wants | entity identifiers it can provide as input to a filtered property map | |||
to avoid the burden of downloading the full property map. Or it may | request but does not want to download the full property map, or it | |||
want to check whether some given entity IDs are eligible for a query. | may want to check whether some given entity identifiers are eligible | |||
To support such a case, the filtered property map supports a | for a query. To support these cases, the filtered property map | |||
lightweight response with empty property values. | supports a lightweight response with empty property values. | |||
8.1. Media Type | 8.1. Media Type | |||
The media type of a property map resource is "application/alto- | The media type of a property map resource is "application/alto- | |||
propmap+json". | propmap+json". | |||
8.2. HTTP Method | 8.2. HTTP Method | |||
The filtered property map is requested using the HTTP POST method. | The filtered property map is requested using the HTTP POST method. | |||
skipping to change at line 1496 ¶ | skipping to change at line 1522 ¶ | |||
support the following cases of client requests: | support the following cases of client requests: | |||
* The client wants the value of a selected set of properties for a | * The client wants the value of a selected set of properties for a | |||
selected set of entities; | selected set of entities; | |||
* The client wants all property values on all the entities; | * The client wants all property values on all the entities; | |||
* The client wants all entities for which a property is defined but | * The client wants all entities for which a property is defined but | |||
is not interested in their property values; or | is not interested in their property values; or | |||
* The client wants to cross-check whether some entity IDs are | * The client wants to cross-check whether some entity identifiers | |||
present in the Filtered Property Map but is not interested in | are present in the filtered property map but is not interested in | |||
their property values. | their property values. | |||
The third case is equivalent to querying the whole unfiltered | The third case is equivalent to querying the whole unfiltered | |||
property map, which can also be achieved with a GET request. Some | property map, which can also be achieved with a GET request. Some | |||
Clients, however, may prefer to systematically make filtered property | Clients, however, may prefer to systematically make filtered property | |||
map queries, where filtering parameters may sometimes be empty. | map queries, where filtering parameters may sometimes be empty. | |||
The JSON object ReqFilteredPropertyMap is specified as follows: | The JSON object ReqFilteredPropertyMap is specified as follows: | |||
object { | object { | |||
skipping to change at line 1531 ¶ | skipping to change at line 1557 ¶ | |||
if they appeared only once. | if they appeared only once. | |||
properties: A list of properties to be returned for each entity. If | properties: A list of properties to be returned for each entity. If | |||
the list is empty, the ALTO Sever MUST interpret the list as if it | the list is empty, the ALTO Sever MUST interpret the list as if it | |||
contained a list of all properties currently defined in the | contained a list of all properties currently defined in the | |||
filtered property map. Each specified property MUST be included | filtered property map. Each specified property MUST be included | |||
in the list of properties in this resource's "capabilities" field | in the list of properties in this resource's "capabilities" field | |||
(see Section 8.4). The ALTO server MUST interpret entries | (see Section 8.4). The ALTO server MUST interpret entries | |||
appearing multiple times as if they appeared only once. This | appearing multiple times as if they appeared only once. This | |||
field is optional. If it is absent, the Server returns a property | field is optional. If it is absent, the Server returns a property | |||
value equal to the literal string "{}" for all the entity IDs of | value equal to the literal string "{}" for all the entity | |||
the "entities" field for which at least one property is defined. | identifiers of the "entities" field for which at least one | |||
property is defined. | ||||
Note that the field "properties" is optional. In addition, when the | Note that the field "properties" is optional. In addition, when the | |||
"entities" field is an empty list, it corresponds to a query for all | "entities" field is an empty list, it corresponds to a query for all | |||
applicable entity IDs of the filtered property map, with no current | applicable entity identifiers of the filtered property map, with no | |||
interest on any particular property. When the "entities" field is | current interest on any particular property. When the "entities" | |||
not empty, it allows the Client to check whether the listed entity | field is not empty, it allows the Client to check whether the listed | |||
IDs can be used as input to a filtered property map query. | entity identifiers can be used as input to a filtered property map | |||
query. | ||||
8.4. Capabilities | 8.4. Capabilities | |||
The capabilities are defined by an object of type | The capabilities are defined by an object of type | |||
PropertyMapCapabilities, as defined in Section 7.4. | PropertyMapCapabilities, as defined in Section 7.4. | |||
8.5. Uses | 8.5. Uses | |||
This is the same as the "uses" field of the Property Map resource | This is the same as the "uses" field of the property map resource | |||
(see Section 7.5). | (see Section 7.5). | |||
8.6. Filtered Property Map Response | 8.6. Filtered Property Map Response | |||
The response MUST indicate an error, using ALTO Protocol error | The response MUST indicate an error, using ALTO Protocol error | |||
handling, as defined in Section 8.5 of [RFC7285], if the request is | handling, as defined in Section 8.5 of [RFC7285], if the request is | |||
invalid. | invalid. | |||
Specifically, a filtered property map request can be invalid in the | Specifically, a filtered property map request can be invalid in the | |||
following cases: | following cases: | |||
* The input field "entities" is absent from the Client request. In | * The input field "entities" is absent from the Client request. In | |||
this case, the Server MUST return an "E_MISSING_FIELD" error as | this case, the Server MUST return an "E_MISSING_FIELD" error as | |||
defined in Section 8.5.2 of [RFC7285]. | defined in Section 8.5.2 of [RFC7285]. | |||
* An entity identifier in the "entities" field of the request is | * An entity identifier in the "entities" field of the request is | |||
invalid. This occurs when: | invalid. This occurs when: | |||
- The domain of this entity is not defined in the "entity- | - The domain of this entity is not defined in the "mappings" | |||
domains" capability of this resource in the IRD, or | capability of this resource in the IRD, or | |||
- The entity identifier is not valid for the entity domain. | - The entity identifier is not valid for the entity domain. | |||
A valid entity identifier never generates an error, even if the | A valid entity identifier never generates an error, even if the | |||
filtered property map resource does not define any properties for | filtered property map resource does not define any properties for | |||
it. | it. | |||
If an entity identifier in the "entities" field of the request is | If an entity identifier in the "entities" field of the request is | |||
invalid, the ALTO server MUST return an "E_INVALID_FIELD_VALUE" | invalid, the ALTO server MUST return an "E_INVALID_FIELD_VALUE" | |||
error defined in Section 8.5.2 of [RFC7285], and the "value" field | error defined in Section 8.5.2 of [RFC7285], and the "value" field | |||
skipping to change at line 1605 ¶ | skipping to change at line 1633 ¶ | |||
Some identifiers can be interpreted as both an entity name and a | Some identifiers can be interpreted as both an entity name and a | |||
property name, as is the case for "pid" if it were erroneously used | property name, as is the case for "pid" if it were erroneously used | |||
alone. In such a case, the Server SHOULD follow Section 8.5.2 of | alone. In such a case, the Server SHOULD follow Section 8.5.2 of | |||
[RFC7285], which says: | [RFC7285], which says: | |||
| For an E_INVALID_FIELD_VALUE error, the server may include an | | For an E_INVALID_FIELD_VALUE error, the server may include an | |||
| optional field named "field" in the "meta" field of the response, | | optional field named "field" in the "meta" field of the response, | |||
| to indicate the field that contains the wrong value. | | to indicate the field that contains the wrong value. | |||
The response to a valid request is the same as for the Property Map | The response to a valid request is the same as for the property map | |||
(see Section 7.6) except that: | (see Section 7.6) except that: | |||
* If the requested entities include entities with a resource- | * If the requested entities include entities with a resource- | |||
agnostic identifier, the "dependent-vtags" field in its "meta" | agnostic identifier, the "dependent-vtags" field in its "meta" | |||
field MUST include version tags of all dependent resources | field MUST include version tags of all dependent resources | |||
appearing in the "uses" field. | appearing in the "uses" field. | |||
* If the requested entities only include entities in resource- | * If the requested entities only include entities in resource- | |||
specific entity domains, the "dependent-vtags" field in its "meta" | specific entity domains, the "dependent-vtags" field in its "meta" | |||
field MUST include the version tags of the resources on which the | field MUST include the version tags of the resources on which the | |||
skipping to change at line 1677 ¶ | skipping to change at line 1705 ¶ | |||
8.7. Entity Property Type Defined in This Document | 8.7. Entity Property Type Defined in This Document | |||
This document defines the entity property type "pid". This property | This document defines the entity property type "pid". This property | |||
type extends the ALTO endpoint property type "pid" defined in | type extends the ALTO endpoint property type "pid" defined in | |||
Section 7.1.1 of [RFC7285] as follows: the property has the same | Section 7.1.1 of [RFC7285] as follows: the property has the same | |||
semantics and applies to IPv4 and IPv6 addresses; the difference is | semantics and applies to IPv4 and IPv6 addresses; the difference is | |||
that the IPv4 and IPv6 addresses have evolved from the status of | that the IPv4 and IPv6 addresses have evolved from the status of | |||
endpoints to the status of entities. | endpoints to the status of entities. | |||
The defining information resource for property type MUST be a network | The defining information resource for property type MUST be a network | |||
map. This document requests an IANA registration for this property. | map. | |||
8.7.1. Entity Property Type: pid | 8.7.1. Entity Property Type: pid | |||
Identifier: pid | Identifier: pid | |||
Semantics: the intended semantics are the same as in [RFC7285] for | Semantics: the intended semantics are the same as in [RFC7285] for | |||
the ALTO endpoint property type "pid". | the ALTO endpoint property type "pid". | |||
Media type of defining information resource: application/alto- | Media type of defining information resource: application/alto- | |||
networkmap+json | networkmap+json | |||
Security considerations: for entity property type "pid" are the same | Security considerations: for entity property type "pid" are the same | |||
as documented in [RFC7285] for the ALTO endpoint property type | as documented in [RFC7285] for the ALTO endpoint property type | |||
"pid". | "pid". | |||
9. Impact on Legacy ALTO Servers and ALTO Clients | 9. Impact on Legacy ALTO Servers and ALTO Clients | |||
9.1. Impact on Endpoint Property Service | 9.1. Impact on Endpoint Property Service | |||
Since the Property Map and the Filtered Property Map defined in this | Since the property map and the filtered property map defined in this | |||
document provide a functionality that covers the EPS defined in | document provide a functionality that covers the EPS defined in | |||
Section 11.4 of [RFC7285], ALTO servers may prefer to provide | Section 11.4 of [RFC7285], ALTO servers may prefer to provide | |||
Property Map and Filtered Property Map in place of EPS. However, for | property map and filtered property map in place of EPS. However, for | |||
the legacy endpoint properties, it is recommended that ALTO servers | the legacy endpoint properties, it is recommended that ALTO servers | |||
also provide EPS so that legacy clients can still be supported. | also provide EPS so that legacy clients can still be supported. | |||
9.2. Impact on Resource-Specific Properties | 9.2. Impact on Resource-Specific Properties | |||
Section 10.8 of [RFC7285] defines two categories of endpoint | Section 10.8 of [RFC7285] defines two categories of endpoint | |||
properties: "resource-specific" and "global". Resource-specific | properties: "resource-specific" and "global". Resource-specific | |||
property names are prefixed with the ID of the resource they depend | property names are prefixed with the identifier of the resource they | |||
on, while global property names have no such prefix. The property | depend on, while global property names have no such prefix. The | |||
map and the filtered property map specified in this document define | property map and the filtered property map specified in this document | |||
similar categories of entity properties. The difference is that | define similar categories of entity properties. The difference is | |||
entity property maps do not define "global" entity properties. | that entity property maps do not define "global" entity properties. | |||
Instead, they define "self-defined" entity properties as a special | Instead, they define self-defined entity properties as a special case | |||
case of "resource-specific" entity properties, where the specific | of "resource-specific" entity properties, where the specific resource | |||
resource is the property map itself. This means that "self-defined" | is the property map itself. This means that self-defined properties | |||
properties are defined within the scope of the property map. | are defined within the scope of the property map. | |||
9.3. Impact on Other Properties | 9.3. Impact on Other Properties | |||
In the present extension, properties can be defined for sets of | In the present extension, properties can be defined for sets of | |||
entity addresses, rather than just individual endpoint addresses as | entity addresses, rather than just individual endpoint addresses as | |||
initially defined in [RFC7285]. This might change the semantics of a | initially defined in [RFC7285]. This might change the semantics of a | |||
property. These sets can be, for example, hierarchical IP address | property. These sets can be, for example, hierarchical IP address | |||
blocks. For instance, a property such as the fictitious "geo- | blocks. For instance, a property such as the fictitious "geo- | |||
location" defined for a set of IP addresses would have a value | location" defined for a set of IP addresses would have a value | |||
corresponding to a location representative of all the addresses in | corresponding to a location representative of all the addresses in | |||
skipping to change at line 1738 ¶ | skipping to change at line 1766 ¶ | |||
10. Examples | 10. Examples | |||
In this document, the HTTP message bodies of all the examples use | In this document, the HTTP message bodies of all the examples use | |||
Unix-style line-ending character (%x0A) as the line separator. | Unix-style line-ending character (%x0A) as the line separator. | |||
10.1. Network Map | 10.1. Network Map | |||
The examples in this section use a very simple default 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 | | defaultpid: | ipv4:0.0.0.0/0 ipv6:::/0 | | |||
pid2: ipv4:192.0.2.0/27 | +-------------+--------------------------+ | |||
pid3: ipv4:192.0.3.0/28 | | pid1: | ipv4:192.0.2.0/25 | | |||
pid4: ipv4:192.0.3.16/28 | +-------------+--------------------------+ | |||
| pid2: | ipv4:192.0.2.0/27 | | ||||
+-------------+--------------------------+ | ||||
| pid3: | ipv4:192.0.3.0/28 | | ||||
+-------------+--------------------------+ | ||||
| pid4: | ipv4:192.0.3.16/28 | | ||||
+-------------+--------------------------+ | ||||
Figure 3: Example Default Network Map | Table 3: Example Default Network Map | |||
And another simple alternative network map: | And another simple alternative network map: | |||
defaultpid: ipv4:0.0.0.0/0 ipv6:::/0 | +-------------+--------------------------+ | |||
pid1: ipv4:192.0.2.0/27 | | defaultpid: | ipv4:0.0.0.0/0 ipv6:::/0 | | |||
pid2: ipv4:192.0.3.0/27 | +-------------+--------------------------+ | |||
| pid1: | ipv4:192.0.2.0/27 | | ||||
+-------------+--------------------------+ | ||||
| pid2: | ipv4:192.0.3.0/27 | | ||||
+-------------+--------------------------+ | ||||
Figure 4: Example Alternative Network Map | Table 4: Example Alternative Network Map | |||
10.2. Property Definitions | 10.2. Property Definitions | |||
Beyond "pid", the examples in this section use four additional, | Beyond "pid", the examples in this section use four additional, | |||
fictitious property types for entities of domain type "ipv4": | fictitious property types for entities of domain type "ipv4": | |||
"countrycode", "ASN", "ISP", and "state". These properties are | "countrycode", "ASN", "ISP", and "state". These properties are | |||
assumed to be resource-agnostic so their name is identical to their | assumed to be resource-agnostic so their name is identical to their | |||
type. The entities have the following values: | type. The entities have the following values: | |||
ISP ASN countrycode state | +=====================+=========+=======+=============+=======+ | |||
ipv4:192.0.2.0/23: BitsRus - us - | | | ISP | ASN | countrycode | state | | |||
ipv4:192.0.2.0/28: - 65543 - NJ | +=====================+=========+=======+=============+=======+ | |||
ipv4:192.0.2.16/28: - 65543 - CT | | ipv4:192.0.2.0/23: | BitsRus | - | us | - | | |||
ipv4:192.0.2.1: - - - PA | +---------------------+---------+-------+-------------+-------+ | |||
ipv4:192.0.3.0/28: - 65544 - TX | | ipv4:192.0.2.0/28: | - | 65543 | - | NJ | | |||
ipv4:192.0.3.16/28: - 65544 - MN | +---------------------+---------+-------+-------------+-------+ | |||
| 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 | | ||||
+---------------------+---------+-------+-------------+-------+ | ||||
Figure 5: Example Property Values for Internet Address Domains | Table 5: Example Property Values for Internet Address Domains | |||
The examples in this section use the property "region" for the PID | The examples in this section use the property "region" for the PID | |||
domain of the default network map with the following values: | domain of the default network map with the following values: | |||
region | +=================+==========+ | |||
pid:defaultpid: - | | | region | | |||
pid:pid1: us-west | +=================+==========+ | |||
pid:pid2: us-east | | pid:defaultpid: | - | | |||
pid:pid3: us-south | +-----------------+----------+ | |||
pid:pid4: us-north | | pid:pid1: | us-west | | |||
+-----------------+----------+ | ||||
| pid:pid2: | us-east | | ||||
+-----------------+----------+ | ||||
| pid:pid3: | us-south | | ||||
+-----------------+----------+ | ||||
| pid:pid4: | us-north | | ||||
+-----------------+----------+ | ||||
Figure 6: Example Property Values for Default Network Map's PID | Table 6: Example Property | |||
Domain | Values for Default Network | |||
Map's PID Domain | ||||
Note that "-" means the value of the property for the entity is | Note that "-" means the value of the property for the entity is | |||
"undefined". So the entity would inherit a value for this property | "undefined". So the entity would inherit a value for this property | |||
by the inheritance rule if possible. For example, the value of the | by the inheritance rule if possible. For example, the value of the | |||
"ISP" property for "ipv4:192.0.2.1" is "BitsRus" because of | "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" | "ipv4:192.0.2.0/24". But the "region" property for "pid:defaultpid" | |||
has no value because there is no entity from which it can inherit. | has no value because there is no entity from which it can inherit. | |||
Similar to the PID domain of the default network map, the examples in | 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 | this section use the property "ASN" for the PID domain of the | |||
alternative network map with the following values: | alternative network map with the following values: | |||
ASN | +=================+=======+ | |||
pid:defaultpid: - | | | ASN | | |||
pid:pid1: 65543 | +=================+=======+ | |||
pid:pid2: 65544 | | pid:defaultpid: | - | | |||
+-----------------+-------+ | ||||
| pid:pid1: | 65543 | | ||||
+-----------------+-------+ | ||||
| pid:pid2: | 65544 | | ||||
+-----------------+-------+ | ||||
Figure 7: Example Property Values for Alternative Network Map's | Table 7: Example | |||
PID Domain | Property Values for | |||
Alternative Network | ||||
Map's PID Domain | ||||
10.3. Information Resource Directory (IRD) | 10.3. Information Resource Directory (IRD) | |||
The following IRD defines ALTO Server information resources that are | The following IRD defines ALTO Server information resources that are | |||
relevant to the Entity Property Service. It provides a property map | relevant to the Entity Property Service. It provides a property map | |||
for the "ISP" and "ASN" properties. The server could have provided a | for the "ISP" and "ASN" properties. The server could have provided a | |||
single property map for all four properties, but it does not, | single property map for all four properties, but it does not, | |||
presumably because the organization that runs the ALTO server | presumably because the organization that runs the ALTO server | |||
believes that a client is not necessarily interested in getting all | believes that a client is not necessarily interested in getting all | |||
four properties. | four properties. | |||
The server provides several filtered property maps. The first | The server provides several filtered property maps. The first | |||
returns all four properties, and the second returns only the "pid" | returns all four properties, and the second returns only the "pid" | |||
property for the default network map and the "alt-network-map". | property for the default network map and the "alt-network-map". | |||
The filtered property maps for the "ISP", "ASN", "countrycode", and | The filtered property maps for the "ISP", "ASN", "countrycode", and | |||
"state" properties do not depend on the default network map (it does | "state" properties do not depend on the default network map (it does | |||
not have a "uses" capability) because the definitions of those | not have a "uses" capability) because the definitions of those | |||
properties do not depend on the default network map. The Filtered | properties do not depend on the default network map. The filtered | |||
Property Map providing the "pid" property does have a "uses" | property map providing the "pid" property does have a "uses" | |||
capability for the default network map because the default network | capability for the default network map because the default network | |||
map defines the values of the "pid" property. | map defines the values of the "pid" property. | |||
Note that for legacy clients, the ALTO server provides an Endpoint | Note that for legacy clients, the ALTO server provides an Endpoint | |||
Property Service for the "pid" property defined for the endpoints of | Property Service for the "pid" property defined for the endpoints of | |||
the default network map and the "alt-network-map". | the default network map and the "alt-network-map". | |||
The server provides another filtered Property map resource, named | The server provides another filtered Property map resource, named | |||
"ane-dc-property-map", that returns fictitious properties named | "ane-dc-property-map", that returns fictitious properties named | |||
"storage-capacity", "ram", and "cpu" for ANEs that have a persistent | "storage-capacity", "ram", and "cpu" for ANEs that have a persistent | |||
identifier. The entity domain to which the ANEs belong is "self- | identifier. The entity domain to which the ANEs belong is self- | |||
defined" and valid only within the property map. | defined and valid only within the property map. | |||
The other property maps in the returned IRD are shown here for | The other property maps in the returned IRD are shown here for | |||
purposes of illustration. | purposes of illustration. | |||
GET /directory HTTP/1.1 | GET /directory HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: application/alto-directory+json,application/alto-error+json | Accept: application/alto-directory+json,application/alto-error+json | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 2713 | Content-Length: 2713 | |||
skipping to change at line 1929 ¶ | skipping to change at line 1990 ¶ | |||
"accepts": "application/alto-propmapparams+json", | "accepts": "application/alto-propmapparams+json", | |||
"capabilities": { | "capabilities": { | |||
"mappings": { | "mappings": { | |||
".ane" : [ "storage-capacity", "ram", "cpu" ] | ".ane" : [ "storage-capacity", "ram", "cpu" ] | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
Figure 8: Example IRD | Figure 1: Example IRD | |||
10.4. Full Property Map Example | 10.4. Full Property Map Example | |||
The following example uses the properties and IRD defined in | The following example uses the properties and IRD defined in | |||
Section 10.3 to retrieve a Property Map for entities with the "ISP" | Section 10.3 to retrieve a property map for entities with the "ISP" | |||
and "ASN" properties. | and "ASN" properties. | |||
Note that, to be compact, the response does not include the entity | Note that, to be compact, the response does not include the entity | |||
"ipv4:192.0.2.1" because values of all those properties for this | "ipv4:192.0.2.1" because values of all those properties for this | |||
entity are inherited from other entities. | entity are inherited from other entities. | |||
Also note that the entities "ipv4:192.0.2.0/28" and | 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 | "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 | 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 | the entities "ipv4:192.0.3.0/28" and "ipv4:192.0.3.16/28". Both | |||
skipping to change at line 2133 ¶ | skipping to change at line 2194 ¶ | |||
"alt-network-map.pid": "pid2"}, | "alt-network-map.pid": "pid2"}, | |||
"ipv4:192.0.3.16/28": {"default-network-map.pid": "pid4", | "ipv4:192.0.3.16/28": {"default-network-map.pid": "pid4", | |||
"alt-network-map.pid": "pid2"} | "alt-network-map.pid": "pid2"} | |||
} | } | |||
} | } | |||
10.8. Filtered Property Map Example #4 | 10.8. Filtered Property Map Example #4 | |||
Here is an example of using the filtered property map to query the | Here is an example of using the filtered property map to query the | |||
regions for several PIDs in "default-network-map". The "region" | regions for several PIDs in "default-network-map". The "region" | |||
property is specified as a "self-defined" property, i.e., the values | property is specified as a self-defined property, i.e., the values of | |||
of this property are defined by this property map resource. | this property are defined by this property map resource. | |||
POST /propmap/lookup/region HTTP/1.1 | POST /propmap/lookup/region HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: application/alto-propmap+json,application/alto-error+json | Accept: application/alto-propmap+json,application/alto-error+json | |||
Content-Length: 132 | Content-Length: 132 | |||
Content-Type: application/alto-propmapparams+json | Content-Type: application/alto-propmapparams+json | |||
{ | { | |||
"entities" : ["default-network-map.pid:pid1", | "entities" : ["default-network-map.pid:pid1", | |||
"default-network-map.pid:pid2"], | "default-network-map.pid:pid2"], | |||
skipping to change at line 2183 ¶ | skipping to change at line 2244 ¶ | |||
on several ANEs defined in this property map. | on several ANEs defined in this property map. | |||
POST /propmap/lookup/ane-dc HTTP/1.1 | POST /propmap/lookup/ane-dc HTTP/1.1 | |||
Host: alto.example.com | Host: alto.example.com | |||
Accept: application/alto-propmap+json,application/alto-error+json | Accept: application/alto-propmap+json,application/alto-error+json | |||
Content-Length: 155 | Content-Length: 155 | |||
Content-Type: application/alto-propmapparams+json | Content-Type: application/alto-propmapparams+json | |||
{ | { | |||
"entities" : [".ane:dc21", | "entities" : [".ane:dc21", | |||
".ane:dc45.srv9", | ".ane:dc45-srv9", | |||
".ane:dc6.srv-cluster8"], | ".ane:dc6-srvcluster8"], | |||
"properties" : [ "storage-capacity", "cpu"] | "properties" : [ "storage-capacity", "cpu"] | |||
} | } | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Content-Length: 295 | Content-Length: 295 | |||
Content-Type: application/alto-propmap+json | Content-Type: application/alto-propmap+json | |||
{ | { | |||
"meta" : { | "meta" : { | |||
}, | }, | |||
"property-map": { | "property-map": { | |||
".ane:dc21": | ".ane:dc21": | |||
{"storage-capacity" : 40000, "cpu" : 500}, | {"storage-capacity" : 40000, "cpu" : 500}, | |||
".ane:dc45.srv9": | ".ane:dc45-srv9": | |||
{"storage-capacity" : 100, "cpu" : 20}, | {"storage-capacity" : 100, "cpu" : 20}, | |||
".ane:dc6.srv-cluster8": | ".ane:dc6-srvcluster8": | |||
{"storage-capacity" : 6000, "cpu" : 100} | {"storage-capacity" : 6000, "cpu" : 100} | |||
} | } | |||
} | } | |||
11. Security Considerations | 11. Security Considerations | |||
Both Property Map and Filtered Property Map defined in this document | Both property map and filtered property map defined in this document | |||
fit into the architecture of the ALTO base protocol, and hence the | fit into the architecture of the ALTO base protocol, and hence the | |||
Security Considerations (Section 15 of [RFC7285]) of the base | Security Considerations (Section 15 of [RFC7285]) of the base | |||
protocol fully apply: authenticity and integrity of ALTO information | protocol fully apply: authenticity and integrity of ALTO information | |||
(i.e., authenticity and integrity of Property Maps), potential | (i.e., authenticity and integrity of property maps), potential | |||
undesirable guidance from authenticated ALTO information (e.g., | undesirable guidance from authenticated ALTO information (e.g., | |||
potentially imprecise or even wrong value of a property such as geo- | potentially imprecise or even wrong value of a property such as geo- | |||
location), confidentiality of ALTO information (e.g., exposure of a | location), confidentiality of ALTO information (e.g., exposure of a | |||
potentially sensitive entity property such as geo-location), privacy | potentially sensitive entity property such as geo-location), privacy | |||
for ALTO users, and availability of ALTO services should all be | for ALTO users, and availability of ALTO services should all be | |||
considered. | considered. | |||
ALTO clients using this extension should in addition be aware that | ALTO clients using this extension should in addition be aware that | |||
the entity properties they require may convey more details than the | the entity properties they require may convey more details than the | |||
endpoint properties conveyed by using [RFC7285]. Client requests may | endpoint properties conveyed by using [RFC7285]. Client requests may | |||
reveal details of their activity or plans thereof such that a | reveal details of their activity or plans thereof such that a | |||
malicious Server, which is in a position to do so, may monetize or | malicious Server, which is in a position to do so, may monetize or | |||
use for attacks or undesired surveillance. Likewise, ALTO Servers | use for attacks or undesired surveillance. Likewise, ALTO Servers | |||
expose entities and properties related to specific parts of the | expose entities and properties related to specific parts of the | |||
infrastructure that reveal details of capabilities, locations, or | infrastructure that reveal details of capabilities, locations, or | |||
resource availability. These details may be maliciously used for | resource availability. These details may be maliciously used for | |||
competition purposes, or to cause resource shortage or undesired | competition purposes, or to cause resource shortage or undesired | |||
publication. | publication. | |||
To address these concerns, the Property Maps provided by this | To address these concerns, the property maps provided by this | |||
extension require additional attention to two security considerations | extension require additional attention to two security considerations | |||
discussed in: Section 15.2 ("Potential Undesirable Guidance from | discussed in: Section 15.2 ("Potential Undesirable Guidance from | |||
Authenticated ALTO Information") of [RFC7285] and Section 15.3 | Authenticated ALTO Information") of [RFC7285] and Section 15.3 | |||
("Confidentiality of ALTO Information") of [RFC7285]. Threats to the | ("Confidentiality of ALTO Information") of [RFC7285]. Threats to the | |||
availability of the ALTO service caused by highly demanding queries | availability of the ALTO service caused by highly demanding queries | |||
should be addressed as specified in Section 15.5 of [RFC7285]. | should be addressed as specified in Section 15.5 of [RFC7285]. | |||
* Potential undesirable guidance from authenticated ALTO | * Potential undesirable guidance from authenticated ALTO | |||
information: this can be caused by Property values that change | information: this can be caused by Property values that change | |||
over time and thus lead to performance degradation or system | over time and thus lead to performance degradation or system | |||
skipping to change at line 2295 ¶ | skipping to change at line 2356 ¶ | |||
MUST include security considerations that explain why this | MUST include security considerations that explain why this | |||
property type is required for ALTO-based operations. | property type is required for ALTO-based operations. | |||
The risk of ALTO information being leaked to malicious Clients or | The risk of ALTO information being leaked to malicious Clients or | |||
third parties is addressed similarly to Section 7 of [RFC8896]. | third parties is addressed similarly to Section 7 of [RFC8896]. | |||
ALTO clients and servers SHOULD support TLS 1.3 [RFC8446]. | ALTO clients and servers SHOULD support TLS 1.3 [RFC8446]. | |||
12. IANA Considerations | 12. IANA Considerations | |||
This document defines additional application/alto-* media types, | This document defines additional application/alto-* media types, | |||
which are listed in Table 1. It defines the "ALTO Entity Domain | which are listed in Table 8. It defines the "ALTO Entity Domain | |||
Types" registry that extends the "ALTO Address Types" registry | Types" registry that extends the "ALTO Address Types" registry | |||
defined in [RFC7285]. It also defines the "ALTO Entity Property | defined in [RFC7285]. It also defines the "ALTO Entity Property | |||
Types" registry that extends the "ALTO Endpoint Property Types" | Types" registry that extends the "ALTO Endpoint Property Types" | |||
registry defined in [RFC7285]. | registry defined in [RFC7285]. | |||
+=============+=========================+===============+ | +=============+=========================+===============+ | |||
| Type | Subtype | Specification | | | Type | Subtype | Specification | | |||
+=============+=========================+===============+ | +=============+=========================+===============+ | |||
| application | alto-propmap+json | Section 7.1 | | | application | alto-propmap+json | Section 7.1 | | |||
+-------------+-------------------------+---------------+ | +-------------+-------------------------+---------------+ | |||
| application | alto-propmapparams+json | Section 8.1 | | | application | alto-propmapparams+json | Section 8.1 | | |||
+-------------+-------------------------+---------------+ | +-------------+-------------------------+---------------+ | |||
Table 1: Additional ALTO Media Types | Table 8: Additional ALTO Media Types | |||
12.1. application/alto-propmap+json Media Type | 12.1. application/alto-propmap+json Media Type | |||
Type name: | Type name: | |||
application | application | |||
Subtype name: | Subtype name: | |||
alto-propmap+json | alto-propmap+json | |||
Required parameters: | Required parameters: | |||
skipping to change at line 2436 ¶ | skipping to change at line 2497 ¶ | |||
Author: | Author: | |||
See Authors' Addresses section. | See Authors' Addresses section. | |||
Change controller: | Change controller: | |||
Internet Engineering Task Force (iesg@ietf.org). | Internet Engineering Task Force (iesg@ietf.org). | |||
12.3. ALTO Entity Domain Types Registry | 12.3. ALTO Entity Domain Types Registry | |||
IANA has created and will maintain the "ALTO Entity Domain Types" | IANA has created and will maintain the "ALTO Entity Domain Types" | |||
registry listed in Table 2. The first row lists information items | registry listed in Table 9. The first row lists information items | |||
that must be provided with each registered entity domain type. | that must be provided with each registered entity domain type. | |||
Section 12.3.2 specifies how to document these items and in addition | Section 12.3.2 specifies how to document these items and in addition | |||
provides guidance on the security considerations item that must be | provides guidance on the security considerations item that must be | |||
documented. | documented. | |||
+==========+===========+=============+======================+=======+ | +==========+===========+=============+======================+=======+ | |||
|Identifier|Entity |Hierarchy and|Media Type of Defining|Mapping| | |Identifier|Entity |Hierarchy and|Media Type of Defining|Mapping| | |||
| |Identifier |Inheritance |Resource |to ALTO| | | |Identifier |Inheritance |Resource |to ALTO| | |||
| |Encoding | | |Address| | | |Encoding | | |Address| | |||
| | | | |Type | | | | | | |Type | | |||
skipping to change at line 2458 ¶ | skipping to change at line 2519 ¶ | |||
|ipv4 |See Section|See |application/alto- |true | | |ipv4 |See Section|See |application/alto- |true | | |||
| |6.1.1 |Section 6.1.3|networkmap+json | | | | |6.1.1 |Section 6.1.3|networkmap+json | | | |||
+----------+-----------+-------------+----------------------+-------+ | +----------+-----------+-------------+----------------------+-------+ | |||
|ipv6 |See Section|See |application/alto- |true | | |ipv6 |See Section|See |application/alto- |true | | |||
| |6.1.2 |Section 6.1.3|networkmap+json | | | | |6.1.2 |Section 6.1.3|networkmap+json | | | |||
+----------+-----------+-------------+----------------------+-------+ | +----------+-----------+-------------+----------------------+-------+ | |||
|pid |See |None |application/alto- |false | | |pid |See |None |application/alto- |false | | |||
| |Section 6.2| |networkmap+json | | | | |Section 6.2| |networkmap+json | | | |||
+----------+-----------+-------------+----------------------+-------+ | +----------+-----------+-------------+----------------------+-------+ | |||
Table 2: ALTO Entity Domain Types | Table 9: ALTO Entity Domain Types | |||
This registry serves two purposes. First, it ensures uniqueness of | This registry serves two purposes. First, it ensures uniqueness of | |||
identifiers referring to ALTO entity domain types. Second, it states | identifiers referring to ALTO entity domain types. Second, it states | |||
the requirements for allocated entity domain types. | the requirements for allocated entity domain types. | |||
As specified in Section 5.1.1, identifiers prefixed with "priv:" are | As specified in Section 5.1.1, identifiers prefixed with "priv:" are | |||
reserved for Private Use without a need to register with IANA | reserved for Private Use without a need to register with IANA | |||
12.3.1. Consistency Procedure between ALTO Address Types Registry and | 12.3.1. Consistency Procedure between ALTO Address Types Registry and | |||
ALTO Entity Domain Types Registry | ALTO Entity Domain Types Registry | |||
skipping to change at line 2497 ¶ | skipping to change at line 2558 ¶ | |||
* If an ALTO entity domain type has the same identifier as an ALTO | * If an ALTO entity domain type has the same identifier as an ALTO | |||
address type, their address encodings MUST be compatible. | address type, their address encodings MUST be compatible. | |||
To achieve this consistency, the following items MUST be checked | To achieve this consistency, the following items MUST be checked | |||
before registering a new ALTO entity domain type in a future | before registering a new ALTO entity domain type in a future | |||
document: | document: | |||
* Whether the "ALTO Address Types" registry contains an address type | * Whether the "ALTO Address Types" registry contains an address type | |||
that can be used as an identifier for the candidate entity domain | that can be used as an identifier for the candidate entity domain | |||
type identifier. This has been done for the identifiers "ipv4" | type identifier. This has been done for the identifiers "ipv4" | |||
and "ipv6" of Table 2. | and "ipv6" of Table 9. | |||
* Whether the candidate entity domain type identifier can | * Whether the candidate entity domain type identifier can | |||
potentially be an endpoint address type, as defined in Sections | potentially be an endpoint address type, as defined in Sections | |||
2.1 and 2.2 of [RFC7285]. | 2.1 and 2.2 of [RFC7285]. | |||
When a new ALTO entity domain type is registered, the consistency | When a new ALTO entity domain type is registered, the consistency | |||
with the "ALTO Address Types" registry MUST be ensured by the | with the "ALTO Address Types" registry MUST be ensured by the | |||
following procedure: | following procedure: | |||
* Test: Do corresponding entity domain type identifiers match a | * Test: Do corresponding entity domain type identifiers match a | |||
skipping to change at line 2527 ¶ | skipping to change at line 2588 ¶ | |||
+ If no: Define a new ALTO entity domain type identifier | + If no: Define a new ALTO entity domain type identifier | |||
and use it to register a new address type in the "ALTO | and use it to register a new address type in the "ALTO | |||
Address Types" registry following Section 14.4 of | Address Types" registry following Section 14.4 of | |||
[RFC7285]. | [RFC7285]. | |||
o Use the new ALTO entity domain type identifier to register a | o Use the new ALTO entity domain type identifier to register a | |||
new ALTO entity domain type in the "ALTO Entity Domain | new ALTO entity domain type in the "ALTO Entity Domain | |||
Types" registry following Section 12.3.2 of this document. | Types" registry following Section 12.3.2 of this document. | |||
- If no (e.g., pid name, ane name, or country code): Proceed with | - If no (e.g., PID name, ANE name, or "countrycode"): Proceed | |||
the ALTO Entity Domain Type registration as described in | with the ALTO Entity Domain Type registration as described in | |||
Section 12.3.2. | Section 12.3.2. | |||
12.3.2. ALTO Entity Domain Type Registration Process | 12.3.2. ALTO Entity Domain Type Registration Process | |||
New ALTO entity domain types are assigned after IETF Review [RFC8126] | New ALTO entity domain types are assigned after IETF Review [RFC8126] | |||
to ensure that proper documentation regarding the new ALTO entity | to ensure that proper documentation regarding the new ALTO entity | |||
domain types and their security considerations has been provided. | domain types and their security considerations has been provided. | |||
RFCs defining new entity domain types MUST indicate how an entity in | RFCs defining new entity domain types MUST indicate how an entity in | |||
a registered type of domain is encoded as an EntityID and, if | a registered type of domain is encoded as an EntityID and, if | |||
applicable, the rules defining the entity hierarchy and property | applicable, provide the rules for defining the entity hierarchy and | |||
inheritance. Updates and deletions of ALTO entity domains types | property inheritance. Updates and deletions of ALTO entity domains | |||
follow the same procedure. | types follow the same procedure. | |||
Registered ALTO entity domain type identifiers MUST conform to the | Registered ALTO entity domain type identifiers MUST conform to the | |||
syntactical requirements specified in Section 5.1.2. Identifiers are | syntactical requirements specified in Section 5.1.2. Identifiers are | |||
to be recorded and displayed as strings. | to be recorded and displayed as strings. | |||
Requests to IANA to add a new value to the "ALTO Entity Domain Types" | Requests to IANA to add a new value to the "ALTO Entity Domain Types" | |||
registry MUST include the following information: | registry MUST include the following information: | |||
Identifier: The name of the desired ALTO entity domain type. | Identifier: The name of the desired ALTO entity domain type. | |||
skipping to change at line 2589 ¶ | skipping to change at line 2650 ¶ | |||
same identifier. | same identifier. | |||
Security Considerations: In some usage scenarios, entity identifiers | Security Considerations: In some usage scenarios, entity identifiers | |||
carried in ALTO Protocol messages may reveal information about an | carried in ALTO Protocol messages may reveal information about an | |||
ALTO client or an ALTO service provider. Applications and ALTO | ALTO client or an ALTO service provider. Applications and ALTO | |||
service providers using addresses of the registered type should be | service providers using addresses of the registered type should be | |||
cognizant of how (or if) the addressing scheme relates to private | cognizant of how (or if) the addressing scheme relates to private | |||
information and network proximity. | information and network proximity. | |||
IANA has registered the identifiers "ipv4", "ipv6", and "pid", as | IANA has registered the identifiers "ipv4", "ipv6", and "pid", as | |||
shown in Table 2. | shown in Table 9. | |||
12.4. ALTO Entity Property Types Registry | 12.4. ALTO Entity Property Types Registry | |||
IANA has created and will maintain the "ALTO Entity Property Types" | IANA has created and will maintain the "ALTO Entity Property Types" | |||
registry, which is listed in Table 3. | registry, which is listed in Table 10. | |||
This registry extends the "ALTO Endpoint Property Types" registry, | This registry extends the "ALTO Endpoint Property Types" registry, | |||
defined in [RFC7285], in that a property type is defined for one or | defined in [RFC7285], in that a property type is defined for one or | |||
more entity domains, rather than just for IPv4 and IPv6 Internet | more entity domains, rather than just for IPv4 and IPv6 Internet | |||
address domains. An entry in this registry is an ALTO entity | address domains. An entry in this registry is an ALTO entity | |||
property type defined in Section 5.2.1. Thus, a registered ALTO | property type defined in Section 5.2.1. Thus, a registered ALTO | |||
entity property type identifier MUST conform to the syntactical | entity property type identifier MUST conform to the syntactical | |||
requirements specified in that section. | requirements specified in that section. | |||
As specified in Section 5.2.1, identifiers prefixed with "priv:" are | As specified in Section 5.2.1, identifiers prefixed with "priv:" are | |||
reserved for Private Use without a need to register with IANA. | reserved for Private Use without a need to register with IANA. | |||
The first row of Table 3 lists information items that must be | The first row of Table 10 lists information items that must be | |||
provided with each registered entity property type. | provided with each registered entity property type. | |||
+============+====================+=================================+ | +============+====================+=================================+ | |||
| Identifier | Intended Semantics | Media Type of | | | Identifier | Intended Semantics | Media Type of | | |||
| | | Defining Resource | | | | | Defining Resource | | |||
+============+====================+=================================+ | +============+====================+=================================+ | |||
| pid | See Section 7.1.1 | application/alto- | | | pid | See Section 7.1.1 | application/alto- | | |||
| | of [RFC7285] | networkmap+json | | | | of [RFC7285] | networkmap+json | | |||
+------------+--------------------+---------------------------------+ | +------------+--------------------+---------------------------------+ | |||
Table 3: ALTO Entity Property Types | Table 10: ALTO Entity Property Types | |||
New ALTO entity property types are assigned after IETF Review | New ALTO entity property types are assigned after IETF Review | |||
[RFC8126] to ensure that proper documentation regarding the new ALTO | [RFC8126] to ensure that proper documentation regarding the new ALTO | |||
entity property types and their security considerations has been | entity property types and their security considerations has been | |||
provided. RFCs defining new entity property types SHOULD indicate | provided. RFCs defining new entity property types SHOULD indicate | |||
how a property of a registered type is encoded as a property name. | how a property of a registered type is encoded as a property name. | |||
Updates and deletions of ALTO entity property types follow the same | Updates and deletions of ALTO entity property types follow the same | |||
procedure. | procedure. | |||
Requests to IANA to add a new value to the registry MUST include the | Requests to IANA to add a new value to the registry MUST include the | |||
skipping to change at line 2660 ¶ | skipping to change at line 2721 ¶ | |||
to ALTO clients. ALTO service providers should be cognizant of | to ALTO clients. ALTO service providers should be cognizant of | |||
the security ramifications related to the exposure of an entity | the security ramifications related to the exposure of an entity | |||
property. | property. | |||
In security considerations, the request should also discuss the | In security considerations, the request should also discuss the | |||
sensitivity of the information and why it is required for ALTO-based | sensitivity of the information and why it is required for ALTO-based | |||
operations. Regarding this discussion, the request SHOULD follow the | operations. Regarding this discussion, the request SHOULD follow the | |||
recommendations of the "ALTO Endpoint Property Types" registry in | recommendations of the "ALTO Endpoint Property Types" registry in | |||
Section 14.3 of [RFC7285]. | Section 14.3 of [RFC7285]. | |||
IANA has registered the identifier "pid", which is listed in Table 3. | IANA has registered the identifier "pid", which is listed in | |||
Semantics for this property are documented in Section 7.1.1 of | Table 10. Semantics for this property are documented in | |||
[RFC7285]. No security issues related to the exposure of a "pid" | Section 7.1.1 of [RFC7285]. No security issues related to the | |||
identifier are considered, as it is exposed with the Network Map | exposure of a "pid" identifier are considered, as it is exposed with | |||
Service defined and mandated in [RFC7285]. | the Network Map Service defined and mandated in [RFC7285]. | |||
13. References | 13. References | |||
13.1. Normative References | 13.1. Normative References | |||
[ISO3166-1] | [ISO3166-1] | |||
International Organization for Standardization, "Codes for | International Organization for Standardization, "Codes for | |||
the representation of names of countries and their | the representation of names of countries and their | |||
subdivisions -- Part 1: Country codes", ISO 3166-1:2020, | subdivisions -- Part 1: Country codes", ISO 3166-1:2020, | |||
August 2020. | August 2020. | |||
skipping to change at line 2764 ¶ | skipping to change at line 2825 ¶ | |||
Nadeau, "An Architecture for the Interface to the Routing | Nadeau, "An Architecture for the Interface to the Routing | |||
System", RFC 7921, DOI 10.17487/RFC7921, June 2016, | System", RFC 7921, DOI 10.17487/RFC7921, June 2016, | |||
<https://www.rfc-editor.org/info/rfc7921>. | <https://www.rfc-editor.org/info/rfc7921>. | |||
[RFC8896] Randriamasy, S., Yang, R., Wu, Q., Deng, L., and N. | [RFC8896] Randriamasy, S., Yang, R., Wu, Q., Deng, L., and N. | |||
Schwan, "Application-Layer Traffic Optimization (ALTO) | Schwan, "Application-Layer Traffic Optimization (ALTO) | |||
Cost Calendar", RFC 8896, DOI 10.17487/RFC8896, November | Cost Calendar", RFC 8896, DOI 10.17487/RFC8896, November | |||
2020, <https://www.rfc-editor.org/info/rfc8896>. | 2020, <https://www.rfc-editor.org/info/rfc8896>. | |||
[RFC9241] Seedorf, J., Yang, Y., Ma, K., Peterson, J., and J. Zhang, | [RFC9241] Seedorf, J., Yang, Y., Ma, K., Peterson, J., and J. Zhang, | |||
"Content Delivery Network Interconnection (CDNI) Request | "Content Delivery Network Interconnection (CDNI) Footprint | |||
Routing: CDNI Footprint and Capabilities Advertisement | and Capabilities Advertisement Using Application-Layer | |||
using ALTO", RFC 9241, DOI 10.17487/RFC9241, May 2022, | Traffic Optimization (ALTO)", RFC 9241, | |||
DOI 10.17487/RFC9241, June 2022, | ||||
<https://www.rfc-editor.org/info/rfc9241>. | <https://www.rfc-editor.org/info/rfc9241>. | |||
Appendix A. Features Introduced with the Entity Property Maps Extension | Appendix A. Features Introduced with the Entity Property Maps Extension | |||
The Entity Property Maps extension described in this document | The entity property maps extension described in this document | |||
introduces a number of features that are summarized in table below. | introduces a number of features that are summarized in table below. | |||
The first column provides the name of the feature. The second column | The first column provides the name of the feature. The second column | |||
provides the section number of this document that gives a high-level | provides the section number of this document that gives a high-level | |||
description of the feature. The third column provides the section | description of the feature. The third column provides the section | |||
number of this document that gives a normative description relating | number of this document that gives a normative description relating | |||
to the feature, when applicable. | to the feature, when applicable. | |||
+======================+=============+======================+ | +=======================+=============+======================+ | |||
| Feature | High-Level | Related Normative | | | Feature | High-Level | Related Normative | | |||
| | Description | Description | | | | Description | Description | | |||
+======================+=============+======================+ | +=======================+=============+======================+ | |||
| Entity | Section 3.1 | Section 5.1.3 | | | Entity | Section 3.1 | Section 5.1.3 | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Entity domain (ED) | Section 3.2 | | | | Entity domain | Section 3.2 | | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Entity domain type | Section | Section 5.1.1 | | | Entity domain type | Section | Section 5.1.1 | | |||
| | 3.2.1 | | | | | 3.2.1 | | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Entity domain name | Section | Section 5.1.2 | | | Entity domain name | Section | Section 5.1.2 | | |||
| | 3.2.2 | | | | | 3.2.2 | | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Entity property (EP) | Section 3.3 | Sections 5.2, 5.2.1, | | | Entity property type | Section 3.3 | Sections 5.2, 5.2.1, | | |||
| type | | 5.2.2, and 5.2.3 | | | | | 5.2.2, and 5.2.3 | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Entity property map | Section 3.4 | Sections 7 and 8 | | | Entity property map | Section 3.4 | Sections 7 and 8 | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Resource-specific ED | Section 4.2 | Sections 5.1.2 and | | | Resource-specific | Section 4.2 | Sections 5.1.2 and | | |||
| name | | 5.1.2.1 | | | entity domain name | | 5.1.2.1 | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Resource-specific EP | Section 4.3 | Section 5.2.3 | | | Resource-specific | Section 4.3 | Section 5.2.3 | | |||
| value | | | | | entity property value | | | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Entity Hierarchy and | Section 4.4 | Section 5.1.4 | | | Entity Hierarchy and | Section 4.4 | Section 5.1.4 | | |||
| property inheritance | | | | | property inheritance | | | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
| Defining information | Sections | Sections 12.3.2 and | | | Defining information | Sections | Sections 12.3.2 and | | |||
| resource | 4.6 and 4.7 | 12.4 | | | resource | 4.6 and 4.7 | 12.4 | | |||
+----------------------+-------------+----------------------+ | +-----------------------+-------------+----------------------+ | |||
Table 4: Features Introduced with ALTO Entity Property Maps | Table 11: Features Introduced with ALTO Entity Property Maps | |||
Acknowledgments | Acknowledgments | |||
The authors would like to thank Dawn Chen and Shenshen Chen for their | The authors would like to thank Dawn Chen and Shenshen Chen for their | |||
contributions to earlier drafts. Thank you also to Qiao Xiang, Shawn | contributions to earlier drafts. Thank you also to Qiao Xiang, Shawn | |||
Lin, Xin Wang, and Vijay Gurbani for fruitful discussions. Last, big | Lin, and Xin Wang for fruitful discussions. Last, big thanks to | |||
thanks to Danny Perez and Luis Contreras for their substantial | Danny Perez and Luis Contreras for their substantial working group | |||
working group review feedback and suggestions for improving this | review feedback and suggestions for improving this document, to Vijay | |||
document, to Vijay Gurbani, ALTO WG Chair, and Martin Duke, Transport | Gurbani, ALTO WG Chair, and Martin Duke, Transport Area Director, for | |||
Area Director, for their thorough review, discussions, guidance, and | their thorough review, discussions, guidance, and shepherding, which | |||
shepherding, which further helped to enrich this document. | further helped to enrich this document. | |||
Authors' Addresses | Authors' Addresses | |||
Wendy Roome | Wendy Roome | |||
Nokia Bell Labs (Retired) | Nokia Bell Labs (Retired) | |||
124 Burlington Rd | 124 Burlington Rd | |||
Murray Hill, NJ 07974 | Murray Hill, NJ 07974 | |||
United States of America | United States of America | |||
Phone: +1-908-464-6975 | Phone: +1-908-464-6975 | |||
Email: wendy@wdroome.com | Email: wendy@wdroome.com | |||
End of changes. 97 change blocks. | ||||
268 lines changed or deleted | 330 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |