| < draft-ietf-alto-protocol-08.txt | draft-ietf-alto-protocol-09.txt > | |||
|---|---|---|---|---|
| ALTO WG R. Alimi, Ed. | ALTO WG R. Alimi, Ed. | |||
| Internet-Draft Google | Internet-Draft Google | |||
| Intended status: Standards Track R. Penno, Ed. | Intended status: Standards Track R. Penno, Ed. | |||
| Expires: November 21, 2011 Juniper Networks | Expires: December 29, 2011 Juniper Networks | |||
| Y. Yang, Ed. | Y. Yang, Ed. | |||
| Yale University | Yale University | |||
| May 20, 2011 | June 27, 2011 | |||
| ALTO Protocol | ALTO Protocol | |||
| draft-ietf-alto-protocol-08.txt | draft-ietf-alto-protocol-09.txt | |||
| Abstract | Abstract | |||
| Networking applications today already have access to a great amount | Networking applications today already have access to a great amount | |||
| of Inter-Provider network topology information. For example, views | of Inter-Provider network topology information. For example, views | |||
| of the Internet routing table are easily available at looking glass | of the Internet routing table are easily available at looking glass | |||
| servers and entirely practical to be downloaded by clients. What is | servers and entirely practical to be downloaded by clients. What is | |||
| missing is knowledge of the underlying network topology from the ISP | missing is knowledge of the underlying network topology from the ISP | |||
| or Content Provider (henceforth referred as Provider) point of view. | or Content Provider (henceforth referred as Provider) point of view. | |||
| In other words, what a Provider prefers in terms of traffic | In other words, what a Provider prefers in terms of traffic | |||
| skipping to change at page 2, line 16 ¶ | skipping to change at page 2, line 16 ¶ | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on November 21, 2011. | This Internet-Draft will expire on December 29, 2011. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2011 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 38 ¶ | |||
| 4. Network Map . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4. Network Map . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.1. PID . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1. PID . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.2. Endpoint Addresses . . . . . . . . . . . . . . . . . . . . 13 | 4.2. Endpoint Addresses . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.2.1. IP Addresses . . . . . . . . . . . . . . . . . . . . . 13 | 4.2.1. IP Addresses . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 4.3. Example Network Map . . . . . . . . . . . . . . . . . . . 13 | 4.3. Example Network Map . . . . . . . . . . . . . . . . . . . 13 | |||
| 5. Cost Map . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 5. Cost Map . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 5.1. Cost Attributes . . . . . . . . . . . . . . . . . . . . . 14 | 5.1. Cost Attributes . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 5.1.1. Cost Type . . . . . . . . . . . . . . . . . . . . . . 15 | 5.1.1. Cost Type . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1.2. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 15 | 5.1.2. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.2. Cost Map Structure . . . . . . . . . . . . . . . . . . . . 16 | 5.2. Cost Map Structure . . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.3. Network Map and Cost Map Dependency . . . . . . . . . . . 16 | 5.3. Network Map and Cost Map Dependency . . . . . . . . . . . 17 | |||
| 6. Protocol Design Overview . . . . . . . . . . . . . . . . . . . 17 | 6. Protocol Design Overview . . . . . . . . . . . . . . . . . . . 17 | |||
| 6.1. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 6.1. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 6.1.1. Existing Infrastructure . . . . . . . . . . . . . . . 17 | 6.1.1. Existing Infrastructure . . . . . . . . . . . . . . . 17 | |||
| 6.1.2. ALTO Information Reuse and Redistribution . . . . . . 17 | 6.1.2. ALTO Information Reuse and Redistribution . . . . . . 18 | |||
| 6.2. Protocol Design . . . . . . . . . . . . . . . . . . . . . 18 | 6.2. Protocol Design . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 7. Protocol Specification . . . . . . . . . . . . . . . . . . . . 18 | 7. Protocol Specification . . . . . . . . . . . . . . . . . . . . 18 | |||
| 7.1. Notation . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 7.1. Notation . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.2. Basic Operation . . . . . . . . . . . . . . . . . . . . . 19 | 7.2. Basic Operation . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 7.2.1. Discovering Information Resources . . . . . . . . . . 19 | 7.2.1. Discovering Information Resources . . . . . . . . . . 19 | |||
| 7.2.2. Requesting Information Resources . . . . . . . . . . . 19 | 7.2.2. Requesting Information Resources . . . . . . . . . . . 19 | |||
| 7.2.3. Response . . . . . . . . . . . . . . . . . . . . . . . 20 | 7.2.3. Response . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 7.2.4. Client Behavior . . . . . . . . . . . . . . . . . . . 20 | 7.2.4. Client Behavior . . . . . . . . . . . . . . . . . . . 20 | |||
| 7.2.5. Authentication and Encryption . . . . . . . . . . . . 20 | 7.2.5. Authentication and Encryption . . . . . . . . . . . . 21 | |||
| 7.2.6. HTTP Cookies . . . . . . . . . . . . . . . . . . . . . 20 | 7.2.6. HTTP Cookies . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 7.2.7. Parsing . . . . . . . . . . . . . . . . . . . . . . . 21 | 7.2.7. Parsing . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 7.3. Information Resource . . . . . . . . . . . . . . . . . . . 21 | 7.3. Information Resource . . . . . . . . . . . . . . . . . . . 21 | |||
| 7.3.1. Capabilities . . . . . . . . . . . . . . . . . . . . . 21 | 7.3.1. Capabilities . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 7.3.2. Input Parameters Media Type . . . . . . . . . . . . . 21 | 7.3.2. Input Parameters Media Type . . . . . . . . . . . . . 21 | |||
| 7.3.3. Media Type . . . . . . . . . . . . . . . . . . . . . . 21 | 7.3.3. Media Type . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 7.3.4. Encoding . . . . . . . . . . . . . . . . . . . . . . . 21 | 7.3.4. Encoding . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 7.4. ALTO Errors . . . . . . . . . . . . . . . . . . . . . . . 23 | 7.4. ALTO Errors . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 7.4.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 23 | 7.4.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 7.4.2. Resource Format . . . . . . . . . . . . . . . . . . . 23 | 7.4.2. Resource Format . . . . . . . . . . . . . . . . . . . 23 | |||
| 7.4.3. Error Codes . . . . . . . . . . . . . . . . . . . . . 24 | 7.4.3. Error Codes . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 7.5. ALTO Types . . . . . . . . . . . . . . . . . . . . . . . . 25 | 7.5. ALTO Types . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 7.5.1. PID Name . . . . . . . . . . . . . . . . . . . . . . . 25 | 7.5.1. PID Name . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 7.5.2. Endpoints . . . . . . . . . . . . . . . . . . . . . . 25 | 7.5.2. Endpoints . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 7.5.3. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 27 | 7.5.3. Cost Mode . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 7.5.4. Cost Type . . . . . . . . . . . . . . . . . . . . . . 27 | 7.5.4. Cost Type . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 7.5.5. Endpoint Property . . . . . . . . . . . . . . . . . . 27 | 7.5.5. Endpoint Property . . . . . . . . . . . . . . . . . . 28 | |||
| 7.6. Information Resource Directory . . . . . . . . . . . . . . 28 | 7.6. Information Resource Directory . . . . . . . . . . . . . . 28 | |||
| 7.6.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 28 | 7.6.1. Media Type . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 7.6.2. Encoding . . . . . . . . . . . . . . . . . . . . . . . 28 | 7.6.2. Encoding . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 7.6.3. Example . . . . . . . . . . . . . . . . . . . . . . . 30 | 7.6.3. Example . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 7.6.4. Usage Considerations . . . . . . . . . . . . . . . . . 33 | 7.6.4. Usage Considerations . . . . . . . . . . . . . . . . . 33 | |||
| 7.7. Information Resources . . . . . . . . . . . . . . . . . . 34 | 7.7. Information Resources . . . . . . . . . . . . . . . . . . 34 | |||
| 7.7.1. Server Information Service . . . . . . . . . . . . . . 34 | 7.7.1. Server Information Service . . . . . . . . . . . . . . 34 | |||
| 7.7.2. Map Service . . . . . . . . . . . . . . . . . . . . . 36 | 7.7.2. Map Service . . . . . . . . . . . . . . . . . . . . . 36 | |||
| 7.7.3. Map Filtering Service . . . . . . . . . . . . . . . . 41 | 7.7.3. Map Filtering Service . . . . . . . . . . . . . . . . 41 | |||
| 7.7.4. Endpoint Property Service . . . . . . . . . . . . . . 46 | 7.7.4. Endpoint Property Service . . . . . . . . . . . . . . 46 | |||
| 7.7.5. Endpoint Cost Service . . . . . . . . . . . . . . . . 49 | 7.7.5. Endpoint Cost Service . . . . . . . . . . . . . . . . 49 | |||
| 8. Redistributable Responses . . . . . . . . . . . . . . . . . . 52 | 8. Redistributable Responses . . . . . . . . . . . . . . . . . . 53 | |||
| 8.1. Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 53 | 8.1. Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
| 8.1.1. Service ID . . . . . . . . . . . . . . . . . . . . . . 53 | 8.1.1. Service ID . . . . . . . . . . . . . . . . . . . . . . 53 | |||
| 8.1.2. Expiration Time . . . . . . . . . . . . . . . . . . . 54 | 8.1.2. Expiration Time . . . . . . . . . . . . . . . . . . . 54 | |||
| 8.1.3. Signature . . . . . . . . . . . . . . . . . . . . . . 54 | 8.1.3. Signature . . . . . . . . . . . . . . . . . . . . . . 54 | |||
| 8.2. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 56 | 8.2. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 56 | |||
| 8.2.1. Response Redistribution Descriptor Fields . . . . . . 57 | 8.2.1. Response Redistribution Descriptor Fields . . . . . . 57 | |||
| 8.2.2. Signature . . . . . . . . . . . . . . . . . . . . . . 57 | 8.2.2. Signature . . . . . . . . . . . . . . . . . . . . . . 57 | |||
| 9. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | 9. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 9.1. ALTO Client Embedded in P2P Tracker . . . . . . . . . . . 58 | 9.1. ALTO Client Embedded in P2P Tracker . . . . . . . . . . . 58 | |||
| 9.2. ALTO Client Embedded in P2P Client: Numerical Costs . . . 59 | 9.2. ALTO Client Embedded in P2P Client: Numerical Costs . . . 60 | |||
| 9.3. ALTO Client Embedded in P2P Client: Ranking . . . . . . . 60 | 9.3. ALTO Client Embedded in P2P Client: Ranking . . . . . . . 61 | |||
| 10. Discussions . . . . . . . . . . . . . . . . . . . . . . . . . 61 | 10. Discussions . . . . . . . . . . . . . . . . . . . . . . . . . 61 | |||
| 10.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 61 | 10.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 62 | |||
| 10.2. Hosts with Multiple Endpoint Addresses . . . . . . . . . . 62 | 10.2. Hosts with Multiple Endpoint Addresses . . . . . . . . . . 62 | |||
| 10.3. Network Address Translation Considerations . . . . . . . . 62 | 10.3. Network Address Translation Considerations . . . . . . . . 62 | |||
| 10.4. Mapping IPs to ASNs . . . . . . . . . . . . . . . . . . . 63 | 10.4. Mapping IPs to ASNs . . . . . . . . . . . . . . . . . . . 63 | |||
| 10.5. Endpoint and Path Properties . . . . . . . . . . . . . . . 63 | 10.5. Endpoint and Path Properties . . . . . . . . . . . . . . . 63 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 63 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 63 | |||
| 11.1. application/alto-* Media Types . . . . . . . . . . . . . . 63 | 11.1. application/alto-* Media Types . . . . . . . . . . . . . . 63 | |||
| 11.2. ALTO Cost Type Registry . . . . . . . . . . . . . . . . . 65 | 11.2. ALTO Cost Type Registry . . . . . . . . . . . . . . . . . 65 | |||
| 11.3. ALTO Endpoint Property Registry . . . . . . . . . . . . . 66 | 11.3. ALTO Endpoint Property Registry . . . . . . . . . . . . . 66 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 67 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 67 | |||
| 12.1. Privacy Considerations for ISPs . . . . . . . . . . . . . 67 | 12.1. Privacy Considerations for ISPs . . . . . . . . . . . . . 67 | |||
| skipping to change at page 16, line 19 ¶ | skipping to change at page 16, line 19 ¶ | |||
| This Cost Mode is indicated by the string 'numerical'. This mode | This Cost Mode is indicated by the string 'numerical'. This mode | |||
| indicates that it is safe to perform numerical operations (e.g. | indicates that it is safe to perform numerical operations (e.g. | |||
| summation) on the returned costs. | summation) on the returned costs. | |||
| 5.1.2.2. Cost Mode: ordinal | 5.1.2.2. Cost Mode: ordinal | |||
| This Cost Mode is indicated by the string 'ordinal'. This mode | This Cost Mode is indicated by the string 'ordinal'. This mode | |||
| indicates that the costs values to a set of Destination Network | indicates that the costs values to a set of Destination Network | |||
| Locations from a particular Source Network Location are a ranking, | Locations from a particular Source Network Location are a ranking, | |||
| with lower values indicating a higher preference. | with lower values indicating a higher preference. The values are | |||
| non-negative integers. Ordinal cost values from a particular Source | ||||
| Network Location to a set of Destination Network Locations need not | ||||
| be unique nor contiguous. In particular, from the perspective of a | ||||
| particular Source Network Location, two Destination Network Locations | ||||
| may have an identical rank (ordinal cost value). This document does | ||||
| not specify any behavior by an ALTO Client in this case; an ALTO | ||||
| Client may decide to break ties by random selection, other | ||||
| application knowledge, or some other means. | ||||
| It is important to note that the values in the Cost Map provided with | It is important to note that the values in the Cost Map provided with | |||
| the ordinal Cost Mode are not necessarily the actual cost known to | the ordinal Cost Mode are not necessarily the actual cost known to | |||
| the ALTO Server. | the ALTO Server. | |||
| 5.2. Cost Map Structure | 5.2. Cost Map Structure | |||
| A query for a Cost Map either explicitly or implicitly includes a | A query for a Cost Map either explicitly or implicitly includes a | |||
| list of Source Network Locations and a list of Destination Network | list of Source Network Locations and a list of Destination Network | |||
| Locations. (Recall that a Network Location can be an endpoint | Locations. (Recall that a Network Location can be an endpoint | |||
| skipping to change at page 24, line 30 ¶ | skipping to change at page 24, line 36 ¶ | |||
| it MUST indicate one of the corresponding HTTP status codes in | it MUST indicate one of the corresponding HTTP status codes in | |||
| Table 1in the HTTP response. | Table 1in the HTTP response. | |||
| If multiple errors are present in a single request (e.g., a request | If multiple errors are present in a single request (e.g., a request | |||
| uses a JSONString when a JSONInteger is expected and a required field | uses a JSONString when a JSONInteger is expected and a required field | |||
| is missing), then the ALTO Server MUST return exactly one of the | is missing), then the ALTO Server MUST return exactly one of the | |||
| detected errors. However, the reported error is implementation | detected errors. However, the reported error is implementation | |||
| defined, since specifying a particular order for message processing | defined, since specifying a particular order for message processing | |||
| encroaches needlessly on implementation technique. | encroaches needlessly on implementation technique. | |||
| +-------------------------+-----------------+-----------------------+ | +-------------------------+-------------+---------------------------+ | |||
| | ALTO Error Code | HTTP Status | Description | | | ALTO Error Code | HTTP Status | Description | | |||
| | | Code(s) | | | | | Code(s) | | | |||
| +-------------------------+-----------------+-----------------------+ | +-------------------------+-------------+---------------------------+ | |||
| | E_JSON_SYNTAX | 400 | JSON parsing error in | | | E_SYNTAX | 400 | Parsing error in request | | |||
| | | | request | | | | | (including identifiers) | | |||
| | | | | | | | | | | |||
| | E_JSON_FIELD_MISSING | 400 | Required field | | | E_JSON_FIELD_MISSING | 400 | Required field missing | | |||
| | | | missing | | | | | | | |||
| | | | | | | E_JSON_VALUE_TYPE | 400 | JSON Value of unexpected | | |||
| | E_JSON_VALUE_TYPE | 400 | JSON Value of | | | | | type | | |||
| | | | unexpected type | | | | | | | |||
| | | | | | | E_INVALID_COST_MODE | 400 | Invalid cost mode | | |||
| | E_INVALID_COST_MODE | 400 | Invalid cost mode | | | | | | | |||
| | | | | | | E_INVALID_COST_TYPE | 400 | Invalid cost type | | |||
| | E_INVALID_COST_TYPE | 400 | Invalid cost type | | | | | | | |||
| | | | | | | E_INVALID_PROPERTY_TYPE | 400 | Invalid property type | | |||
| | E_INVALID_PROPERTY_TYPE | 400 | Invalid property type | | +-------------------------+-------------+---------------------------+ | |||
| +-------------------------+-----------------+-----------------------+ | ||||
| Table 1: Defined ALTO Error Codes | Table 1: Defined ALTO Error Codes | |||
| 7.5. ALTO Types | 7.5. ALTO Types | |||
| This section details the format for particular data values used in | This section details the format for particular data values used in | |||
| the ALTO Protocol. | the ALTO Protocol. | |||
| 7.5.1. PID Name | 7.5.1. PID Name | |||
| skipping to change at page 25, line 23 ¶ | skipping to change at page 25, line 27 ¶ | |||
| more than 64 characters, and MUST NOT contain characters other than | more than 64 characters, and MUST NOT contain characters other than | |||
| alphanumeric characters or the '.' separator. The '.' separator is | alphanumeric characters or the '.' separator. The '.' separator is | |||
| reserved for future use and MUST NOT be used unless specifically | reserved for future use and MUST NOT be used unless specifically | |||
| indicated by a companion or extension document. | indicated by a companion or extension document. | |||
| The type 'PIDName' is used in this document to indicate a string of | The type 'PIDName' is used in this document to indicate a string of | |||
| this format. | this format. | |||
| 7.5.2. Endpoints | 7.5.2. Endpoints | |||
| This section defines formats used to encode addresses for Endpoints. | ||||
| In a case that multiple textual representations encode the same | ||||
| Endpoint address or prefix (within the guidelines outlined in this | ||||
| document), the ALTO Protocol does not require ALTO Clients or ALTO | ||||
| Servers to use a particular textual representation, nor does it | ||||
| require that ALTO Servers reply to requests using the same textual | ||||
| representation used by requesting ALTO Clients. ALTO Clients must be | ||||
| cognizant of this. | ||||
| 7.5.2.1. Address Type | 7.5.2.1. Address Type | |||
| Address Types are encoded as US-ASCII strings consisting of only | Address Types are encoded as US-ASCII strings consisting of only | |||
| alphanumeric characters. This document defines the address type | alphanumeric characters. This document defines the address type | |||
| "ipv4" to refer to IPv4 addresses, and "ipv6" to refer to IPv6 | "ipv4" to refer to IPv4 addresses, and "ipv6" to refer to IPv6 | |||
| addresses. Extension documents may define additional Address Types. | addresses. Extension documents may define additional Address Types. | |||
| The type 'AddressType' is used in this document to indicate a string | The type 'AddressType' is used in this document to indicate a string | |||
| of this format. | of this format. | |||
| skipping to change at page 29, line 35 ¶ | skipping to change at page 29, line 46 ¶ | |||
| Each entry MUST indicate a URI that either directly provides the | Each entry MUST indicate a URI that either directly provides the | |||
| indicated Information Resource, or responds to a HTTP OPTIONS request | indicated Information Resource, or responds to a HTTP OPTIONS request | |||
| which provides an Information Resource Directory with entries of | which provides an Information Resource Directory with entries of | |||
| additional Information Resources. | additional Information Resources. | |||
| If an ALTO Client makes a GET or POST request to a URI that does not | If an ALTO Client makes a GET or POST request to a URI that does not | |||
| directly provide an indicated Information Resource, the ALTO Server | directly provide an indicated Information Resource, the ALTO Server | |||
| MUST either reply with an HTTP 300 status code ("Multiple Choices") | MUST either reply with an HTTP 300 status code ("Multiple Choices") | |||
| and an Information Resource Directory in the HTTP response's entity | and an Information Resource Directory in the HTTP response's entity | |||
| body, or indicate an appropriate HTTP status code. | body, or indicate an appropriate HTTP status code. Note that in | |||
| general, it is preferred that ALTO Clients use HTTP OPTIONS requests | ||||
| to discover additional Information Resources. | ||||
| A URI that directly provides an Information Resource MAY also respond | A URI that directly provides an Information Resource MAY also respond | |||
| to HTTP OPTIONS requests, but it is not required to do so (in which | to HTTP OPTIONS requests, but it is not required to do so (in which | |||
| case, it MUST respond with HTTP 405 status code ("Method Not | case, it MUST respond with HTTP 405 status code ("Method Not | |||
| Allowed"). This allows certain Information Resources to be | Allowed"). This allows certain Information Resources to be | |||
| configured as static files with minimal configuration on some HTTP | configured as static files with minimal configuration on some HTTP | |||
| servers. | servers. | |||
| Each entry in the directory specifies: | Each entry in the directory specifies: | |||
| skipping to change at page 30, line 23 ¶ | skipping to change at page 30, line 36 ¶ | |||
| capabilities A JSON Object enumerating capabilities of an ALTO | capabilities A JSON Object enumerating capabilities of an ALTO | |||
| Server in providing the Information Resource at the corresponding | Server in providing the Information Resource at the corresponding | |||
| URI and Information Resources discoverable via the URI. If this | URI and Information Resources discoverable via the URI. If this | |||
| member is not present, it MUST be assumed to be an empty array. | member is not present, it MUST be assumed to be an empty array. | |||
| If a capability for one of the offered Information Resources is | If a capability for one of the offered Information Resources is | |||
| not explicitly listed here, an ALTO Client may either issue an | not explicitly listed here, an ALTO Client may either issue an | |||
| OPTIONS HTTP request to the corresponding URI to determine if the | OPTIONS HTTP request to the corresponding URI to determine if the | |||
| capability is supported, or assume its default value. | capability is supported, or assume its default value. | |||
| If an entry has an empty list for "accepts", then the corresponding | ||||
| URI MUST support GET requests. If an entry has a non-empty list for | ||||
| "accepts", then the corresponding URI MUST support POST requests. If | ||||
| an ALTO Server wishes to support both GET and POST on a single URI, | ||||
| it MUST specify two entries in the Information Resource Directory. | ||||
| 7.6.3. Example | 7.6.3. Example | |||
| The following is an example Information Resource Directory returned | The following is an example Information Resource Directory returned | |||
| by an ALTO Server. In this example, the ALTO Server provides | by an ALTO Server. In this example, the ALTO Server provides | |||
| additional Network and Cost Maps via a separate subdomain, | additional Network and Cost Maps via a separate subdomain, | |||
| "custom.alto.example.com". The maps available via this subdomain are | "custom.alto.example.com". The maps available via this subdomain are | |||
| Filtered Network and Cost Maps as well as pre-generated maps for the | Filtered Network and Cost Maps as well as pre-generated maps for the | |||
| "hopcount" and "routingcost" Cost Types in the "ordinal" Cost Mode. | "hopcount" and "routingcost" Cost Types in the "ordinal" Cost Mode. | |||
| An ALTO Client could discover the maps available via | An ALTO Client can discover the maps available by | |||
| "custom.alto.example.com" by either: | "custom.alto.example.com" by successfully performing an OPTIONS | |||
| request to "http://custom.alto.example.com/maps". | ||||
| o Successfully performing an OPTIONS request to | ||||
| "http://custom.alto.example.com/maps", or | ||||
| o Attempting a POST request for a desired Network or Cost Map to | ||||
| "http://custom.alto.example.com/maps" and receiving a HTTP 300 | ||||
| status code ("Multiple Choices") response with an Information | ||||
| Resource Directory. | ||||
| GET /directory HTTP/1.1 | GET /directory HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: application/alto-directory+json | Accept: application/alto-directory+json,application/alto-error+json | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-directory+json | Content-Type: application/alto-directory+json | |||
| { | { | |||
| "resources" : [ | "resources" : [ | |||
| { | { | |||
| "uri" : "http://alto.example.com/serverinfo", | "uri" : "http://alto.example.com/serverinfo", | |||
| "media-types" : [ "application/alto-serverinfo+json" ] | "media-types" : [ "application/alto-serverinfo+json" ] | |||
| skipping to change at page 31, line 38 ¶ | skipping to change at page 31, line 45 ¶ | |||
| } | } | |||
| }, { | }, { | |||
| "uri" : "http://custom.alto.example.com/maps", | "uri" : "http://custom.alto.example.com/maps", | |||
| "media-types" : [ | "media-types" : [ | |||
| "application/alto-networkmap+json", | "application/alto-networkmap+json", | |||
| "application/alto-costmap+json" | "application/alto-costmap+json" | |||
| ], | ], | |||
| "accepts" : [ | "accepts" : [ | |||
| "application/alto-networkmapfilter+json", | "application/alto-networkmapfilter+json", | |||
| "application/alto-costmapfilter+json" | "application/alto-costmapfilter+json" | |||
| ], | ] | |||
| }, { | }, { | |||
| "uri" : "http://alto.example.com/endpointprop/lookup", | "uri" : "http://alto.example.com/endpointprop/lookup", | |||
| "media-types" : [ "application/alto-endpointprop+json" ], | "media-types" : [ "application/alto-endpointprop+json" ], | |||
| "accepts" : [ "application/alto-endpointpropparams+json" ], | "accepts" : [ "application/alto-endpointpropparams+json" ], | |||
| "capabilities" : { | "capabilities" : { | |||
| "prop-types" : [ "pid" ] | "prop-types" : [ "pid" ] | |||
| } | } | |||
| }, { | }, { | |||
| "uri" : "http://alto.example.com/endpointcost/lookup", | "uri" : "http://alto.example.com/endpointcost/lookup", | |||
| "media-types" : [ "application/alto-endpointcost+json" ], | "media-types" : [ "application/alto-endpointcost+json" ], | |||
| skipping to change at page 32, line 13 ¶ | skipping to change at page 32, line 24 ¶ | |||
| "cost-constraints" : true, | "cost-constraints" : true, | |||
| "cost-modes" : [ "ordinal", "numerical" ], | "cost-modes" : [ "ordinal", "numerical" ], | |||
| "cost-types" : [ "routingcost", "hopcount" ] | "cost-types" : [ "routingcost", "hopcount" ] | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| OPTIONS /maps HTTP/1.1 | OPTIONS /maps HTTP/1.1 | |||
| Host: custom.alto.example.com | Host: custom.alto.example.com | |||
| Accept: application/alto-directory+json | Accept: application/alto-directory+json,application/alto-error+json | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-directory+json | Content-Type: application/alto-directory+json | |||
| { | { | |||
| "resources" : [ | "resources" : [ | |||
| { | { | |||
| "uri" : "http://custom.alto.example.com/networkmap/filtered", | "uri" : "http://custom.alto.example.com/networkmap/filtered", | |||
| "media-types" : [ "application/alto-networkmap+json" ], | "media-types" : [ "application/alto-networkmap+json" ], | |||
| "accepts" : [ "application/alto-networkmapfilter+json" ] | "accepts" : [ "application/alto-networkmapfilter+json" ] | |||
| skipping to change at page 35, line 32 ¶ | skipping to change at page 35, line 32 ¶ | |||
| If an ALTO Server has the possibility of marking any response as | If an ALTO Server has the possibility of marking any response as | |||
| redistributable, the 'service-id' and 'certificates' fields are | redistributable, the 'service-id' and 'certificates' fields are | |||
| REQUIRED instead of OPTIONAL. See Section 8&$160;for detailed | REQUIRED instead of OPTIONAL. See Section 8&$160;for detailed | |||
| specification. | specification. | |||
| 7.7.1.1.6. Example | 7.7.1.1.6. Example | |||
| GET /serverinfo HTTP/1.1 | GET /serverinfo HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: application/alto-serverinfo+json | Accept: application/alto-serverinfo+json,application/alto-error+json | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-serverinfo+json | Content-Type: application/alto-serverinfo+json | |||
| { | { | |||
| "meta" : {}, | "meta" : {}, | |||
| "data" : { | "data" : { | |||
| "service-id" : "c89ca72f-dead-41b5-9e2b-b65455ace1ee", | "service-id" : "c89ca72f-dead-41b5-9e2b-b65455ace1ee", | |||
| "certificates" : [ ... ] | "certificates" : [ ... ] | |||
| skipping to change at page 37, line 20 ¶ | skipping to change at page 37, line 20 ¶ | |||
| single PID and its associated set of endpoint addresses. A member's | single PID and its associated set of endpoint addresses. A member's | |||
| name is a string of type PIDName. | name is a string of type PIDName. | |||
| The returned Network Map MUST include all PIDs known to the ALTO | The returned Network Map MUST include all PIDs known to the ALTO | |||
| Server. | Server. | |||
| 7.7.2.1.6. Example | 7.7.2.1.6. Example | |||
| GET /networkmap HTTP/1.1 | GET /networkmap HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: application/alto-networkmap+json | Accept: application/alto-networkmap+json,application/alto-error+json | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-networkmap+json | Content-Type: application/alto-networkmap+json | |||
| { | { | |||
| "meta" : {}, | "meta" : {}, | |||
| "data" : { | "data" : { | |||
| "map-vtag" : "1266506139", | "map-vtag" : "1266506139", | |||
| "map" : { | "map" : { | |||
| "PID1" : { | "PID1" : { | |||
| skipping to change at page 38, line 31 ¶ | skipping to change at page 38, line 31 ¶ | |||
| "198.51.100.128/25" | "198.51.100.128/25" | |||
| ] | ] | |||
| }, | }, | |||
| "PID3" : { | "PID3" : { | |||
| "ipv4" : [ | "ipv4" : [ | |||
| "0.0.0.0/0" | "0.0.0.0/0" | |||
| ], | ], | |||
| "ipv6" : [ | "ipv6" : [ | |||
| "::/0" | "::/0" | |||
| ] | ] | |||
| ] | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 7.7.2.2. Cost Map | 7.7.2.2. Cost Map | |||
| The Cost Map resource lists the Path Cost for each pair of source/ | The Cost Map resource lists the Path Cost for each pair of source/ | |||
| destination PID defined by the ALTO Server for a given Cost Type and | destination PID defined by the ALTO Server for a given Cost Type and | |||
| Cost Mode. This resource MUST be provided for at least the | Cost Mode. This resource MUST be provided for at least the | |||
| 'routingcost' Cost Type and 'numerical' Cost Mode. | 'routingcost' Cost Type and 'numerical' Cost Mode. | |||
| skipping to change at page 40, line 48 ¶ | skipping to change at page 40, line 48 ¶ | |||
| string identifying the corresponding Destination PID. DstCosts MUST | string identifying the corresponding Destination PID. DstCosts MUST | |||
| have a single member for each Destination PID in the map. | have a single member for each Destination PID in the map. | |||
| The returned Cost Map MUST include Path Costs for each pair of Source | The returned Cost Map MUST include Path Costs for each pair of Source | |||
| PID and Destination PID known to the ALTO Server. | PID and Destination PID known to the ALTO Server. | |||
| 7.7.2.2.6. Example | 7.7.2.2.6. Example | |||
| GET /costmap/num/routingcost HTTP/1.1 | GET /costmap/num/routingcost HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: application/alto-costmap+json | Accept: application/alto-costmap+json,application/alto-error+json | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-costmap+json | Content-Type: application/alto-costmap+json | |||
| { | { | |||
| "meta" : {}, | "meta" : {}, | |||
| "data" : { | "data" : { | |||
| "cost-mode" : "numerical", | "cost-mode" : "numerical", | |||
| "cost-type" : "routingcost", | "cost-type" : "routingcost", | |||
| "map-vtag" : "1266506139", | "map-vtag" : "1266506139", | |||
| skipping to change at page 42, line 14 ¶ | skipping to change at page 42, line 14 ¶ | |||
| object { | object { | |||
| PIDName pids<0..*>; | PIDName pids<0..*>; | |||
| } ReqFilteredNetworkMap; | } ReqFilteredNetworkMap; | |||
| with members: | with members: | |||
| pids Specifies list of PIDs to be included in the returned Filtered | pids Specifies list of PIDs to be included in the returned Filtered | |||
| Network Map. If the list of PIDs is empty, the ALTO Server MUST | Network Map. If the list of PIDs is empty, the ALTO Server MUST | |||
| interpret the list as if it contained a list of all currently- | interpret the list as if it contained a list of all currently- | |||
| defined PIDs. | defined PIDs. The ALTO Server MUST interpret entries appearing | |||
| multiple times as if they appeared only once. | ||||
| 7.7.3.1.4. Capabilities | 7.7.3.1.4. Capabilities | |||
| None. | None. | |||
| 7.7.3.1.5. Response | 7.7.3.1.5. Response | |||
| See Section 7.7.2.1.5 for the format. | See Section 7.7.2.1.5 for the format. | |||
| The ALTO Server MUST only include PIDs in the response that were | The ALTO Server MUST only include PIDs in the response that were | |||
| skipping to change at page 43, line 11 ¶ | skipping to change at page 43, line 11 ¶ | |||
| parameters contain a PID name that is not currently defined by the | parameters contain a PID name that is not currently defined by the | |||
| ALTO Server, the ALTO Server MUST behave as if the PID did not appear | ALTO Server, the ALTO Server MUST behave as if the PID did not appear | |||
| in the input parameters. | in the input parameters. | |||
| 7.7.3.1.6. Example | 7.7.3.1.6. Example | |||
| POST /networkmap/filtered HTTP/1.1 | POST /networkmap/filtered HTTP/1.1 | |||
| Host: custom.alto.example.com | Host: custom.alto.example.com | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-networkmapfilter+json | Content-Type: application/alto-networkmapfilter+json | |||
| Accept: application/alto-networkmap+json | Accept: application/alto-networkmap+json,application/alto-error+json | |||
| { | { | |||
| pids: [ "PID1", "PID2" ] | "pids": [ "PID1", "PID2" ] | |||
| } | } | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-networkmap+json | Content-Type: application/alto-networkmap+json | |||
| { | { | |||
| "meta" : {}, | "meta" : {}, | |||
| "data" : { | "data" : { | |||
| "map-vtag" : "1266506139", | "map-vtag" : "1266506139", | |||
| skipping to change at page 45, line 13 ¶ | skipping to change at page 45, line 13 ¶ | |||
| type parameter. ALTO Servers SHOULD use at least IEEE 754 double- | type parameter. ALTO Servers SHOULD use at least IEEE 754 double- | |||
| precision floating point [IEEE.754.2008] to store the numerical | precision floating point [IEEE.754.2008] to store the numerical | |||
| cost, and SHOULD perform internal computations using double- | cost, and SHOULD perform internal computations using double- | |||
| precision floating-point arithmetic. If multiple 'constraint' | precision floating-point arithmetic. If multiple 'constraint' | |||
| parameters are specified, they are interpreted as being related to | parameters are specified, they are interpreted as being related to | |||
| each other with a logical AND. | each other with a logical AND. | |||
| pids A list of Source PIDs and a list of Destination PIDs for which | pids A list of Source PIDs and a list of Destination PIDs for which | |||
| Path Costs are to be returned. If a list is empty, the ALTO | Path Costs are to be returned. If a list is empty, the ALTO | |||
| Server MUST interpret it as the full set of currently-defined | Server MUST interpret it as the full set of currently-defined | |||
| PIDs. If the "pids" member is not present, both lists MUST be | PIDs. The ALTO Server MUST interpret entries appearing in a list | |||
| interpreted by the ALTO Server as containing the full set of | multiple times as if they appeared only once. If the "pids" | |||
| currently-defined PIDs. | member is not present, both lists MUST be interpreted by the ALTO | |||
| Server as containing the full set of currently-defined PIDs. | ||||
| 7.7.3.2.4. Capabilities | 7.7.3.2.4. Capabilities | |||
| See Section 7.7.2.2.4. | The URI providing this resource supports all capabilities documented | |||
| in Section 7.7.2.2.4 (with identical semantics), plus additional | ||||
| capabilities. In particular, the capabilities are defined by a JSON | ||||
| object of type FilteredCostMapCapability: | ||||
| object { | ||||
| CostMode cost-modes<0..*>; | ||||
| CostType cost-types<0..*>; | ||||
| JSONBool cost-constraints; | ||||
| } FilteredCostMapCapability; | ||||
| with members: | ||||
| cost-modes See Section 7.7.2.2.4. | ||||
| cost-types See Section 7.7.2.2.4. | ||||
| cost-constraints If true, then the ALTO Server allows cost | ||||
| constraints to be included in requests to the corresponding URI. | ||||
| If not present, this member MUST be interpreted as if it specified | ||||
| false. | ||||
| 7.7.3.2.5. Response | 7.7.3.2.5. Response | |||
| See Section 7.7.2.2.5 for the format. | See Section 7.7.2.2.5 for the format. | |||
| The returned Cost Map MUST NOT contain any source/destination pair | The returned Cost Map MUST NOT contain any source/destination pair | |||
| that was not indicated (implicitly or explicitly) in the input | that was not indicated (implicitly or explicitly) in the input | |||
| parameters. If the input parameters contain a PID name that is not | parameters. If the input parameters contain a PID name that is not | |||
| currently defined by the ALTO Server, the ALTO Server MUST behave as | currently defined by the ALTO Server, the ALTO Server MUST behave as | |||
| if the PID did not appear in the input parameters. | if the PID did not appear in the input parameters. | |||
| skipping to change at page 46, line 10 ¶ | skipping to change at page 46, line 16 ¶ | |||
| If any constraints are specified, Source/Destination pairs that do | If any constraints are specified, Source/Destination pairs that do | |||
| for which the Path Costs do not meet the constraints MUST NOT be | for which the Path Costs do not meet the constraints MUST NOT be | |||
| included in the returned Cost Map. If no constraints were specified, | included in the returned Cost Map. If no constraints were specified, | |||
| then all Path Costs are assumed to meet the constraints. | then all Path Costs are assumed to meet the constraints. | |||
| 7.7.3.2.6. Example | 7.7.3.2.6. Example | |||
| POST /costmap/filtered HTTP/1.1 | POST /costmap/filtered HTTP/1.1 | |||
| Host: custom.alto.example.com | Host: custom.alto.example.com | |||
| Content-Type: application/alto-costmapfilter+json | Content-Type: application/alto-costmapfilter+json | |||
| Accept: application/alto-costmap+json | Accept: application/alto-costmap+json,application/alto-error+json | |||
| { | { | |||
| "cost-mode" : "numerical", | "cost-mode" : "numerical", | |||
| "cost-type" : "routingcost", | "cost-type" : "routingcost", | |||
| "pids" : { | "pids" : { | |||
| "srcs" : [ "PID1" ], | "srcs" : [ "PID1" ], | |||
| "dsts" : [ "PID1", "PID2", "PID3" ] | "dsts" : [ "PID1", "PID2", "PID3" ] | |||
| } | } | |||
| } | } | |||
| skipping to change at page 47, line 21 ¶ | skipping to change at page 47, line 28 ¶ | |||
| This resource is requested using the HTTP POST method. | This resource is requested using the HTTP POST method. | |||
| 7.7.4.1.3. Input Parameters | 7.7.4.1.3. Input Parameters | |||
| Input parameters are supplied in the entity body of the POST request. | Input parameters are supplied in the entity body of the POST request. | |||
| This document specifies the data format of input parameteres with the | This document specifies the data format of input parameteres with the | |||
| media type "application/alto-endpointpropparams+json", which is a | media type "application/alto-endpointpropparams+json", which is a | |||
| JSON Object of type ReqEndpointProp: | JSON Object of type ReqEndpointProp: | |||
| object { | object { | |||
| EndpointProperty properties<0..*>; | EndpointProperty properties<1..*>; | |||
| TypedEndpointAddr endpoints<0..*>; | TypedEndpointAddr endpoints<1..*>; | |||
| } ReqEndpointProp; | } ReqEndpointProp; | |||
| with members: | with members: | |||
| properties List of endpoint properties to returned for each | properties List of endpoint properties to returned for each | |||
| endpoint. Each specified property MUST be included in the list of | endpoint. Each specified property MUST be included in the list of | |||
| supported properties indicated by this resource's capabilities ( | supported properties indicated by this resource's capabilities ( | |||
| Section 7.7.4.1.4). | Section 7.7.4.1.4). The ALTO Server MUST interpret entries | |||
| appearing multiple times as if they appeared only once. | ||||
| endpoints List of endpoint addresses for which the specified | endpoints List of endpoint addresses for which the specified | |||
| properties are to be returned. | properties are to be returned. The ALTO Server MUST interpret | |||
| entries appearing multiple times as if they appeared only once. | ||||
| 7.7.4.1.4. Capabilities | 7.7.4.1.4. Capabilities | |||
| This resource may be defined across multiple types of endpoint | This resource may be defined across multiple types of endpoint | |||
| properties. The capabilities of an ALTO Server URI providing | properties. The capabilities of an ALTO Server URI providing | |||
| Endpoint Properties are defined by a JSON Object of type | Endpoint Properties are defined by a JSON Object of type | |||
| EndpointPropertyCapability: | EndpointPropertyCapability: | |||
| object { | object { | |||
| EndpointProperty prop-types<0..*>; | EndpointProperty prop-types<0..*>; | |||
| skipping to change at page 49, line 7 ¶ | skipping to change at page 49, line 7 ¶ | |||
| The ALTO Server returns the value for each of the requested endpoint | The ALTO Server returns the value for each of the requested endpoint | |||
| properties for each of the endpoints listed in the input parameters. | properties for each of the endpoints listed in the input parameters. | |||
| If the ALTO Server does not define a requested property for a | If the ALTO Server does not define a requested property for a | |||
| particular endpoint, then it MUST omit it from the response for only | particular endpoint, then it MUST omit it from the response for only | |||
| that endpoint. | that endpoint. | |||
| 7.7.4.1.6. Example | 7.7.4.1.6. Example | |||
| POST /endpointprop/lookup HTTP/1.1 | POST /endpointprop/lookup HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-endpointpropparams+json | Content-Type: application/alto-endpointpropparams+json | |||
| Accept: application/alto-endpointprop+json | Accept: application/alto-endpointprop+json,application/alto-error+json | |||
| { | { | |||
| "properties" : [ "pid" ], | "properties" : [ "pid" ], | |||
| "endpoints" : [ "ipv4:192.0.2.34", "ipv4:203.0.113.129" ] | "endpoints" : [ "ipv4:192.0.2.34", "ipv4:203.0.113.129" ] | |||
| } | } | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-endpointprop+json | Content-Type: application/alto-endpointprop+json | |||
| { | { | |||
| "meta" : {}, | "meta" : {}, | |||
| "data": { | "data": { | |||
| "ipv4:192.0.2.34" : { "pid": "PID1" }, | "ipv4:192.0.2.34" : { "pid": "PID1" }, | |||
| "ipv4:203.0.113.129" : { "pid": "PID3" } | "ipv4:203.0.113.129" : { "pid": "PID3" } | |||
| } | } | |||
| } | } | |||
| 7.7.5. Endpoint Cost Service | 7.7.5. Endpoint Cost Service | |||
| The Endpoint Cost Service provides information about costs between | The Endpoint Cost Service provides information about costs between | |||
| individual endpoints. | individual endpoints. | |||
| In particular, this service allows lists of Endpoint prefixes (and | In particular, this service allows lists of Endpoint prefixes (and | |||
| addresses, as a special case) to be ranked (ordered) by an ALTO | addresses, as a special case) to be ranked (ordered) by an ALTO | |||
| Server. | Server. | |||
| skipping to change at page 50, line 49 ¶ | skipping to change at page 50, line 49 ¶ | |||
| cost-type The Cost Type ( Section 5.1.1) to use for returned costs. | cost-type The Cost Type ( Section 5.1.1) to use for returned costs. | |||
| This MUST be one of the Cost Types indicated in this resource's | This MUST be one of the Cost Types indicated in this resource's | |||
| capabilities ( Section 7.7.5.1.4). | capabilities ( Section 7.7.5.1.4). | |||
| constraints Defined equivalently to the "constraints" input | constraints Defined equivalently to the "constraints" input | |||
| parameter of a Filtered Cost Map (see Section 7.7.3.2). | parameter of a Filtered Cost Map (see Section 7.7.3.2). | |||
| endpoints A list of Source Endpoints and Destination Endpoints for | endpoints A list of Source Endpoints and Destination Endpoints for | |||
| which Path Costs are to be returned. If the list of Source | which Path Costs are to be returned. If the list of Source | |||
| Endpoints is empty (or not included), the ALTO Server MUST | Endpoints is empty (or not included), the ALTO Server MUST | |||
| interpret it as if it contained the Endpoint Address of the | interpret it as if it contained the Endpoint Address corresponding | |||
| requesting client. The list of destination Endpoints MUST NOT be | to the client IP address from the incoming connection (see | |||
| empty. | Section 10.3 for discussion and considerations regarding this | |||
| mode). The list of destination Endpoints MUST NOT be empty. The | ||||
| ALTO Server MUST interpret entries appearing multiple times in a | ||||
| list as if they appeared only once. | ||||
| 7.7.5.1.4. Capabilities | 7.7.5.1.4. Capabilities | |||
| See Section 7.7.2.2.4. | See Section 7.7.3.2.4. | |||
| 7.7.5.1.5. Response | 7.7.5.1.5. Response | |||
| The returned InfoResourceEntity object has "data" member equal to | The returned InfoResourceEntity object has "data" member equal to | |||
| InfoResourceEndpointCostMap, where: | InfoResourceEndpointCostMap, where: | |||
| object EndpointDstCosts { | object EndpointDstCosts { | |||
| JSONNumber [TypedEndpointAddr]; | JSONNumber [TypedEndpointAddr]; | |||
| ... | ... | |||
| }; | }; | |||
| skipping to change at page 52, line 7 ¶ | skipping to change at page 52, line 8 ¶ | |||
| single Source Endpoint specified in the input parameters; the name | single Source Endpoint specified in the input parameters; the name | |||
| for a member is the TypedEndpointAddr string identifying the | for a member is the TypedEndpointAddr string identifying the | |||
| corresponding Source Endpoint. For each Source Endpoint, a | corresponding Source Endpoint. For each Source Endpoint, a | |||
| EndpointDstCosts object denotes the associated cost to each | EndpointDstCosts object denotes the associated cost to each | |||
| Destination Endpoint specified in the input parameters; the name for | Destination Endpoint specified in the input parameters; the name for | |||
| each member in the object is the TypedEndpointAddr string identifying | each member in the object is the TypedEndpointAddr string identifying | |||
| the corresponding Destination Endpoint. | the corresponding Destination Endpoint. | |||
| 7.7.5.1.6. Example | 7.7.5.1.6. Example | |||
| POST /endpointcost/lookup HTTP/1.1 | POST /endpointcost/lookup HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
| Accept: application/alto-endpointcost+json | Accept: application/alto-endpointcost+json,application/alto-error+json | |||
| { | { | |||
| "cost-mode" : "ordinal", | "cost-mode" : "ordinal", | |||
| "cost-type" : "routingcost", | "cost-type" : "routingcost", | |||
| "endpoints" : { | "endpoints" : { | |||
| "srcs": [ "ipv4:192.0.2.2" ], | "srcs": [ "ipv4:192.0.2.2" ], | |||
| "dsts": [ | "dsts": [ | |||
| "ipv4:192.0.2.89", | "ipv4:192.0.2.89", | |||
| "ipv4:198.51.100.34", | "ipv4:198.51.100.34", | |||
| "ipv4:203.0.113.45" | "ipv4:203.0.113.45" | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: [TODO] | Content-Length: [TODO] | |||
| Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
| { | { | |||
| "meta" : {}, | "meta" : {}, | |||
| "data" : { | "data" : { | |||
| "map" : { | "cost-mode" : "ordinal", | |||
| "ipv4:192.0.2.2": { | "cost-type" : "routingcost", | |||
| "ipv4:192.0.2.89" : 1, | "map" : { | |||
| "ipv4:198.51.100.34" : 2, | "ipv4:192.0.2.2": { | |||
| "ipv4:203.0.113.45" : 3 | "ipv4:192.0.2.89" : 1, | |||
| } | "ipv4:198.51.100.34" : 2, | |||
| } | "ipv4:203.0.113.45" : 3 | |||
| } | } | |||
| } | } | |||
| } | ||||
| } | ||||
| 8. Redistributable Responses | 8. Redistributable Responses | |||
| This section defines how an ALTO Server enables certain Information | This section defines how an ALTO Server enables certain Information | |||
| Resources to be redistributed by ALTO Clients. Concepts are first | Resources to be redistributed by ALTO Clients. Concepts are first | |||
| introduced, followed by the protocol specification. | introduced, followed by the protocol specification. | |||
| 8.1. Concepts | 8.1. Concepts | |||
| 8.1.1. Service ID | 8.1.1. Service ID | |||
| skipping to change at page 56, line 30 ¶ | skipping to change at page 56, line 36 ¶ | |||
| mechanism for redistributing such information is not specified by the | mechanism for redistributing such information is not specified by the | |||
| ALTO Protocol, but one possibility is to add additional messages or | ALTO Protocol, but one possibility is to add additional messages or | |||
| fields to the application's native protocol. | fields to the application's native protocol. | |||
| 8.2. Protocol | 8.2. Protocol | |||
| An ALTO Server MAY indicate that a response is suitable for | An ALTO Server MAY indicate that a response is suitable for | |||
| redistribution by including the "redistribution" member in the | redistribution by including the "redistribution" member in the | |||
| RspMetaData JSON object of an Information Resource. This additional | RspMetaData JSON object of an Information Resource. This additional | |||
| member, called the Response Redistribution Descriptor, has type | member, called the Response Redistribution Descriptor, has type | |||
| RspRedistDesc: | InfoResourceRedistDesc: | |||
| object { | object { | |||
| JSONString service-id; | JSONString service-id; | |||
| JSONString request-uri; | JSONString request-uri; | |||
| JSONValue request-body; | JSONValue request-body; | |||
| JSONString media-type; | JSONString media-type; | |||
| JSONString expires; | JSONString expires; | |||
| } RspRedistDesc; | } InfoResourceRedistDesc; | |||
| The fields encoded in the Response Redistribution Descriptor allows | The fields encoded in the Response Redistribution Descriptor allows | |||
| an ALTO Client receiving redistributed ALTO Information to understand | an ALTO Client receiving redistributed ALTO Information to understand | |||
| the context of the query (the ALTO Service generating the response | the context of the query (the ALTO Service generating the response | |||
| and any input parameters) and to interpret the results. | and any input parameters) and to interpret the results. | |||
| Information about ALTO Client performing the request and any HTTP | Information about ALTO Client performing the request and any HTTP | |||
| Headers passed in the request are not included in the Response | Headers passed in the request are not included in the Response | |||
| Redistribution Descriptor. If any such information or headers | Redistribution Descriptor. If any such information or headers | |||
| influence the response generated by the ALTO Server, the response | influence the response generated by the ALTO Server, the response | |||
| skipping to change at page 62, line 39 ¶ | skipping to change at page 62, line 47 ¶ | |||
| 10.3. Network Address Translation Considerations | 10.3. Network Address Translation Considerations | |||
| At this day and age of NAT v4<->v4, v4<->v6 [RFC6144], and possibly | At this day and age of NAT v4<->v4, v4<->v6 [RFC6144], and possibly | |||
| v6<->v6[I-D.mrw-nat66], a protocol should strive to be NAT friendly | v6<->v6[I-D.mrw-nat66], a protocol should strive to be NAT friendly | |||
| and minimize carrying IP addresses in the payload, or provide a mode | and minimize carrying IP addresses in the payload, or provide a mode | |||
| of operation where the source IP address provide the information | of operation where the source IP address provide the information | |||
| necessary to the server. | necessary to the server. | |||
| The protocol specified in this document provides a mode of operation | The protocol specified in this document provides a mode of operation | |||
| where the source network location is computed by the ALTO Server (via | where the source network location is computed by the ALTO Server | |||
| the Endpoint Property Lookup interface) from the source IP address | (i.e., the the Endpoint Cost Service) from the source IP address | |||
| found in the ALTO Client query packets. This is similar to how some | found in the ALTO Client query packets. This is similar to how some | |||
| P2P Trackers (e.g., BitTorrent Trackers - see "Tracker HTTP/HTTPS | P2P Trackers (e.g., BitTorrent Trackers - see "Tracker HTTP/HTTPS | |||
| Protocol" in [BitTorrent]) operate. | Protocol" in [BitTorrent]) operate. | |||
| The ALTO client SHOULD use the Session Traversal Utilities for NAT | The ALTO client SHOULD use the Session Traversal Utilities for NAT | |||
| (STUN) [RFC5389] to determine a public IP address to use as a source | (STUN) [RFC5389] to determine a public IP address to use as a source | |||
| Endpoint address. If using this method, the host MUST use the | Endpoint address. If using this method, the host MUST use the | |||
| "Binding Request" message and the resulting "XOR-MAPPED-ADDRESS" | "Binding Request" message and the resulting "XOR-MAPPED-ADDRESS" | |||
| parameter that is returned in the response. Using STUN requires | parameter that is returned in the response. Using STUN requires | |||
| cooperation from a publicly accessible STUN server. Thus, the ALTO | cooperation from a publicly accessible STUN server. Thus, the ALTO | |||
| End of changes. 49 change blocks. | ||||
| 127 lines changed or deleted | 173 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/ | ||||