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