| rfc9275.original | rfc9275.txt | |||
|---|---|---|---|---|
| ALTO K. Gao | Internet Engineering Task Force (IETF) K. Gao | |||
| Internet-Draft Sichuan University | Request for Comments: 9275 Sichuan University | |||
| Intended status: Experimental Y. Lee | Category: Experimental Y. Lee | |||
| Expires: 21 September 2022 Samsung | ISSN: 2070-1721 Samsung | |||
| S. Randriamasy | S. Randriamasy | |||
| Nokia Bell Labs | Nokia Bell Labs | |||
| Y.R. Yang | Y. Yang | |||
| Yale University | Yale University | |||
| J. Zhang | J. Zhang | |||
| Tongji University | Tongji University | |||
| 20 March 2022 | August 2022 | |||
| An ALTO Extension: Path Vector | An Extension for Application-Layer Traffic Optimization (ALTO): | |||
| draft-ietf-alto-path-vector-25 | Path Vector | |||
| Abstract | Abstract | |||
| This document is an extension to the base Application-Layer Traffic | This document is an extension to the base Application-Layer Traffic | |||
| Optimization (ALTO) protocol. It extends the ALTO Cost Map and ALTO | Optimization (ALTO) protocol. It extends the ALTO cost map and ALTO | |||
| Property Map services so that an application can decide which | property map services so that an application can decide to which | |||
| endpoint(s) to connect based on not only numerical/ordinal cost | endpoint(s) to connect based not only on numerical/ordinal cost | |||
| values but also fine-grained abstract information of the paths. This | values but also on fine-grained abstract information regarding the | |||
| is useful for applications whose performance is impacted by specified | paths. This is useful for applications whose performance is impacted | |||
| components of a network on the end-to-end paths, e.g., they may infer | by specific components of a network on the end-to-end paths, e.g., | |||
| that several paths share common links and prevent traffic bottlenecks | they may infer that several paths share common links and prevent | |||
| by avoiding such paths. This extension introduces a new abstraction | traffic bottlenecks by avoiding such paths. This extension | |||
| called Abstract Network Element (ANE) to represent these components | introduces a new abstraction called the "Abstract Network Element" | |||
| and encodes a network path as a vector of ANEs. Thus, it provides a | (ANE) to represent these components and encodes a network path as a | |||
| more complete but still abstract graph representation of the | vector of ANEs. Thus, it provides a more complete but still abstract | |||
| underlying network(s) for informed traffic optimization among | graph representation of the underlying network(s) for informed | |||
| endpoints. | traffic optimization among endpoints. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
| provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
| evaluation. | ||||
| Internet-Drafts are working documents of the Internet Engineering | This document defines an Experimental Protocol for the Internet | |||
| Task Force (IETF). Note that other groups may also distribute | community. This document is a product of the Internet Engineering | |||
| working documents as Internet-Drafts. The list of current Internet- | Task Force (IETF). It represents the consensus of the IETF | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | community. It has received public review and has been approved for | |||
| publication by the Internet Engineering Steering Group (IESG). Not | ||||
| all documents approved by the IESG are candidates for any level of | ||||
| Internet Standard; see Section 2 of RFC 7841. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
| and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
| time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9275. | |||
| material or to cite them other than as "work in progress." | ||||
| This Internet-Draft will expire on 21 September 2022. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
| 2. Requirements Languages . . . . . . . . . . . . . . . . . . . 6 | 2. Requirements Language | |||
| 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Terminology | |||
| 4. Requirements and Use Cases . . . . . . . . . . . . . . . . . 7 | 4. Requirements and Use Cases | |||
| 4.1. Design Requirements . . . . . . . . . . . . . . . . . . . 7 | 4.1. Design Requirements | |||
| 4.2. Sample Use Cases . . . . . . . . . . . . . . . . . . . . 10 | 4.2. Sample Use Cases | |||
| 4.2.1. Exposing Network Bottlenecks . . . . . . . . . . . . 11 | 4.2.1. Exposing Network Bottlenecks | |||
| 4.2.2. Resource Exposure for CDN and Service Edge . . . . . 15 | 4.2.2. Resource Exposure for CDNs and Service Edges | |||
| 5. Path Vector Extension: Overview . . . . . . . . . . . . . . . 17 | 5. Path Vector Extension: Overview | |||
| 5.1. Abstract Network Element (ANE) . . . . . . . . . . . . . 18 | 5.1. Abstract Network Element (ANE) | |||
| 5.1.1. ANE Entity Domain . . . . . . . . . . . . . . . . . . 19 | 5.1.1. ANE Entity Domain | |||
| 5.1.2. Ephemeral and Persistent ANEs . . . . . . . . . . . . 19 | 5.1.2. Ephemeral and Persistent ANEs | |||
| 5.1.3. Property Filtering . . . . . . . . . . . . . . . . . 20 | 5.1.3. Property Filtering | |||
| 5.2. Path Vector Cost Type . . . . . . . . . . . . . . . . . . 20 | 5.2. Path Vector Cost Type | |||
| 5.3. Multipart Path Vector Response . . . . . . . . . . . . . 21 | 5.3. Multipart Path Vector Response | |||
| 5.3.1. Identifying the Media Type of the Root Object . . . . 22 | 5.3.1. Identifying the Media Type of the Object Root | |||
| 5.3.2. References to Part Messages . . . . . . . . . . . . . 22 | 5.3.2. References to Part Messages | |||
| 6. Specification: Basic Data Types . . . . . . . . . . . . . . . 23 | 6. Specification: Basic Data Types | |||
| 6.1. ANE Name . . . . . . . . . . . . . . . . . . . . . . . . 23 | 6.1. ANE Name | |||
| 6.2. ANE Entity Domain . . . . . . . . . . . . . . . . . . . . 23 | 6.2. ANE Entity Domain | |||
| 6.2.1. Entity Domain Type . . . . . . . . . . . . . . . . . 23 | 6.2.1. Entity Domain Type | |||
| 6.2.2. Domain-Specific Entity Identifier . . . . . . . . . . 23 | 6.2.2. Domain-Specific Entity Identifier | |||
| 6.2.3. Hierarchy and Inheritance . . . . . . . . . . . . . . 23 | 6.2.3. Hierarchy and Inheritance | |||
| 6.2.4. Media Type of Defining Resource . . . . . . . . . . . 23 | 6.2.4. Media Type of Defining Resource | |||
| 6.3. ANE Property Name . . . . . . . . . . . . . . . . . . . . 24 | 6.3. ANE Property Name | |||
| 6.4. Initial ANE Property Types . . . . . . . . . . . . . . . 24 | 6.4. Initial ANE Property Types | |||
| 6.4.1. Maximum Reservable Bandwidth . . . . . . . . . . . . 24 | 6.4.1. Maximum Reservable Bandwidth | |||
| 6.4.2. Persistent Entity ID . . . . . . . . . . . . . . . . 25 | 6.4.2. Persistent Entity ID | |||
| 6.4.3. Examples . . . . . . . . . . . . . . . . . . . . . . 25 | 6.4.3. Examples | |||
| 6.5. Path Vector Cost Type . . . . . . . . . . . . . . . . . . 26 | 6.5. Path Vector Cost Type | |||
| 6.5.1. Cost Metric: ane-path . . . . . . . . . . . . . . . . 26 | 6.5.1. Cost Metric: "ane-path" | |||
| 6.5.2. Cost Mode: array . . . . . . . . . . . . . . . . . . 27 | 6.5.2. Cost Mode: "array" | |||
| 6.6. Part Resource ID and Part Content ID . . . . . . . . . . 27 | 6.6. Part Resource ID and Part Content ID | |||
| 7. Specification: Service Extensions . . . . . . . . . . . . . . 27 | 7. Specification: Service Extensions | |||
| 7.1. Notations . . . . . . . . . . . . . . . . . . . . . . . . 27 | 7.1. Notation | |||
| 7.2. Multipart Filtered Cost Map for Path Vector . . . . . . . 28 | 7.2. Multipart Filtered Cost Map for Path Vector | |||
| 7.2.1. Media Type . . . . . . . . . . . . . . . . . . . . . 28 | 7.2.1. Media Type | |||
| 7.2.2. HTTP Method . . . . . . . . . . . . . . . . . . . . . 28 | 7.2.2. HTTP Method | |||
| 7.2.3. Accept Input Parameters . . . . . . . . . . . . . . . 28 | 7.2.3. Accept Input Parameters | |||
| 7.2.4. Capabilities . . . . . . . . . . . . . . . . . . . . 29 | 7.2.4. Capabilities | |||
| 7.2.5. Uses . . . . . . . . . . . . . . . . . . . . . . . . 30 | 7.2.5. Uses | |||
| 7.2.6. Response . . . . . . . . . . . . . . . . . . . . . . 30 | 7.2.6. Response | |||
| 7.3. Multipart Endpoint Cost Service for Path Vector . . . . . 34 | 7.3. Multipart Endpoint Cost Service for Path Vector | |||
| 7.3.1. Media Type . . . . . . . . . . . . . . . . . . . . . 34 | 7.3.1. Media Type | |||
| 7.3.2. HTTP Method . . . . . . . . . . . . . . . . . . . . . 34 | 7.3.2. HTTP Method | |||
| 7.3.3. Accept Input Parameters . . . . . . . . . . . . . . . 34 | 7.3.3. Accept Input Parameters | |||
| 7.3.4. Capabilities . . . . . . . . . . . . . . . . . . . . 35 | 7.3.4. Capabilities | |||
| 7.3.5. Uses . . . . . . . . . . . . . . . . . . . . . . . . 35 | 7.3.5. Uses | |||
| 7.3.6. Response . . . . . . . . . . . . . . . . . . . . . . 35 | 7.3.6. Response | |||
| 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | 8. Examples | |||
| 8.1. Sample Setup . . . . . . . . . . . . . . . . . . . . . . 39 | 8.1. Sample Setup | |||
| 8.2. Information Resource Directory . . . . . . . . . . . . . 39 | 8.2. Information Resource Directory | |||
| 8.3. Multipart Filtered Cost Map . . . . . . . . . . . . . . . 42 | 8.3. Multipart Filtered Cost Map | |||
| 8.4. Multipart Endpoint Cost Service Resource . . . . . . . . 43 | 8.4. Multipart Endpoint Cost Service Resource | |||
| 8.5. Incremental Updates . . . . . . . . . . . . . . . . . . . 48 | 8.5. Incremental Updates | |||
| 8.6. Multi-cost . . . . . . . . . . . . . . . . . . . . . . . 50 | 8.6. Multi-Cost | |||
| 9. Compatibility with Other ALTO Extensions . . . . . . . . . . 52 | 9. Compatibility with Other ALTO Extensions | |||
| 9.1. Compatibility with Legacy ALTO Clients/Servers . . . . . 53 | 9.1. Compatibility with Legacy ALTO Clients/Servers | |||
| 9.2. Compatibility with Multi-Cost Extension . . . . . . . . . 53 | 9.2. Compatibility with Multi-Cost Extension | |||
| 9.3. Compatibility with Incremental Update . . . . . . . . . . 53 | 9.3. Compatibility with Incremental Update Extension | |||
| 9.4. Compatibility with Cost Calendar . . . . . . . . . . . . 53 | 9.4. Compatibility with Cost Calendar Extension | |||
| 10. General Discussions . . . . . . . . . . . . . . . . . . . . . 54 | 10. General Discussion | |||
| 10.1. Constraint Tests for General Cost Types . . . . . . . . 54 | 10.1. Constraint Tests for General Cost Types | |||
| 10.2. General Multi-Resource Query . . . . . . . . . . . . . . 54 | 10.2. General Multi-Resource Query | |||
| 11. Security Considerations . . . . . . . . . . . . . . . . . . . 55 | 11. Security Considerations | |||
| 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 57 | 12. IANA Considerations | |||
| 12.1. ALTO Cost Metric Registry . . . . . . . . . . . . . . . 57 | 12.1. "ALTO Cost Metrics" Registry | |||
| 12.2. ALTO Cost Mode Registry . . . . . . . . . . . . . . . . 58 | 12.2. "ALTO Cost Modes" Registry | |||
| 12.3. ALTO Entity Domain Type Registry . . . . . . . . . . . . 58 | 12.3. "ALTO Entity Domain Types" Registry | |||
| 12.4. ALTO Entity Property Type Registry . . . . . . . . . . . 59 | 12.4. "ALTO Entity Property Types" Registry | |||
| 12.4.1. New ANE Property Type: Maximum Reservable | 12.4.1. New ANE Property Type: Maximum Reservable Bandwidth | |||
| Bandwidth . . . . . . . . . . . . . . . . . . . . . . 59 | 12.4.2. New ANE Property Type: Persistent Entity ID | |||
| 12.4.2. New ANE Property Type: Persistent Entity ID . . . . 60 | 13. References | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 60 | 13.1. Normative References | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 60 | 13.2. Informative References | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 61 | Acknowledgments | |||
| Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 64 | Authors' Addresses | |||
| Appendix B. Revision Logs (To be removed before publication) . . 64 | ||||
| B.1. Changes since -20 . . . . . . . . . . . . . . . . . . . . 64 | ||||
| B.2. Changes since -19 . . . . . . . . . . . . . . . . . . . . 65 | ||||
| B.3. Changes since -18 . . . . . . . . . . . . . . . . . . . . 65 | ||||
| B.4. Changes since -17 . . . . . . . . . . . . . . . . . . . . 65 | ||||
| B.5. Changes since -16 . . . . . . . . . . . . . . . . . . . . 65 | ||||
| B.6. Changes since -15 . . . . . . . . . . . . . . . . . . . . 65 | ||||
| B.7. Changes since -14 . . . . . . . . . . . . . . . . . . . . 65 | ||||
| B.8. Changes since -13 . . . . . . . . . . . . . . . . . . . . 66 | ||||
| B.9. Changes since -12 . . . . . . . . . . . . . . . . . . . . 66 | ||||
| B.10. Changes since -11 . . . . . . . . . . . . . . . . . . . . 66 | ||||
| B.11. Changes since -10 . . . . . . . . . . . . . . . . . . . . 66 | ||||
| B.12. Changes since -09 . . . . . . . . . . . . . . . . . . . . 67 | ||||
| B.13. Changes since -08 . . . . . . . . . . . . . . . . . . . . 67 | ||||
| B.14. Changes Since Version -06 . . . . . . . . . . . . . . . . 67 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 68 | ||||
| 1. Introduction | 1. Introduction | |||
| Network performance metrics are crucial to assess the Quality of | Network performance metrics are crucial for assessing the Quality of | |||
| Experience (QoE) of applications. The ALTO protocol allows Internet | Experience (QoE) of applications. The Application-Layer Traffic | |||
| Service Providers (ISPs) to provide guidance, such as topological | Optimization (ALTO) protocol allows Internet Service Providers (ISPs) | |||
| distance between different end hosts, to overlay applications. Thus, | to provide guidance, such as topological distances between different | |||
| the overlay applications can potentially improve the perceived QoE by | end hosts, to overlay applications. Thus, the overlay applications | |||
| better orchestrating their traffic to utilize the resources in the | can potentially improve the perceived QoE by better orchestrating | |||
| underlying network infrastructure. | their traffic to utilize the resources in the underlying network | |||
| infrastructure. | ||||
| Existing ALTO Cost Map (Section 11.2.3 of [RFC7285]) and Endpoint | The existing ALTO cost map (Section 11.2.3 of [RFC7285]) and Endpoint | |||
| Cost Service (Section 11.5 of [RFC7285]) provide only cost | Cost Service (Section 11.5 of [RFC7285]) provide only cost | |||
| information on an end-to-end path defined by its <source, | information for an end-to-end path defined by its <source, | |||
| destination> endpoints: The base protocol [RFC7285] allows the | destination> endpoints: the base protocol [RFC7285] allows the | |||
| services to expose the topological distances of end-to-end paths, | services to expose the topological distances of end-to-end paths, | |||
| while various extensions have been proposed to extend the capability | while various extensions have been proposed to extend the capability | |||
| of these services, e.g., to express other performance metrics | of these services, e.g., to express other performance metrics | |||
| [I-D.ietf-alto-performance-metrics], to query multiple costs | [ALTO-PERF-METRICS], to query multiple costs simultaneously | |||
| simultaneously [RFC8189], and to obtain the time-varying values | [RFC8189], and to obtain time-varying values [RFC8896]. | |||
| [RFC8896]. | ||||
| While the existing extensions are sufficient for many overlay | While numerical/ordinal cost values for end-to-end paths provided by | |||
| applications, the QoE of some overlay applications depends not only | the existing extensions are sufficient to optimize the QoE of many | |||
| on the cost information of end-to-end paths, but also on particular | overlay applications, the QoE of some overlay applications also | |||
| components of a network on the paths and their properties. For | depends on the properties of particular components on the paths. For | |||
| example, job completion time, which is an important QoE metric for a | example, job completion time, which is an important QoE metric for a | |||
| large-scale data analytics application, is impacted by shared | large-scale data analytics application, is impacted by shared | |||
| bottleneck links inside the carrier network as link capacity may | bottleneck links inside the carrier network, as link capacity may | |||
| impact the rate of data input/output to the job. We refer to such | impact the rate of data input/output to the job. We refer to such | |||
| components of a network as Abstract Network Elements (ANE). | components of a network as Abstract Network Elements (ANEs). | |||
| Predicting such information can be very complex without the help of | Predicting such information can be very complex without the help of | |||
| ISPs, for example, [BOXOPT] has shown that finding the optimal | ISPs; for example, [BOXOPT] has shown that finding the optimal | |||
| bandwidth reservation for multiple flows can be NP-hard without | bandwidth reservation for multiple flows can be NP-hard without | |||
| further information than whether a reservation succeeds. With proper | further information than whether a reservation succeeds. With proper | |||
| guidance from the ISP, an overlay application may be able to schedule | guidance from the ISP, an overlay application may be able to schedule | |||
| its traffic for better QoE. In the meantime, it may be helpful as | its traffic for better QoE. In the meantime, it may be helpful as | |||
| well for ISPs if applications could avoid using bottlenecks or | well for ISPs if applications could avoid using bottlenecks or | |||
| challenging the network with poorly scheduled traffic. | challenging the network with poorly scheduled traffic. | |||
| Despite the claimed benefits, ISPs are not likely to expose raw | Despite the claimed benefits, ISPs are not likely to expose raw | |||
| details on their network paths: first for the sake of topology hiding | details on their network paths: first because ISPs have requirements | |||
| requirement, second because it may increase volume and computation | to hide their network topologies, second because these details may | |||
| overhead, and last because applications do not necessarily need all | increase volume and computation overhead, and last because | |||
| the network path details and are likely not able to understand them. | applications do not necessarily need all the network path details and | |||
| are likely not able to understand them. | ||||
| Therefore, it is beneficial for both ISPs and applications if an ALTO | Therefore, it is beneficial for both ISPs and applications if an ALTO | |||
| server provides ALTO clients with an "abstract network state" that | server provides ALTO clients with an "abstract network state" that | |||
| provides the necessary information to applications, while hiding the | provides the necessary information to applications, while hiding | |||
| network complexity and confidential information. An "abstract | network complexity and confidential information. An "abstract | |||
| network state" is a selected set of abstract representations of | network state" is a selected set of abstract representations of ANEs | |||
| Abstract Network Elements traversed by the paths between <source, | traversed by the paths between <source, destination> pairs combined | |||
| destination> pairs combined with properties of these Abstract Network | with properties of these ANEs that are relevant to the overlay | |||
| Elements that are relevant to the overlay applications' QoE. Both an | applications' QoE. Both an application via its ALTO client and the | |||
| application via its ALTO client and the ISP via the ALTO server can | ISP via the ALTO server can achieve better confidentiality and | |||
| achieve better confidentiality and resource utilization by | resource utilization by appropriately abstracting relevant ANEs. | |||
| appropriately abstracting relevant Abstract Network Elements. Server | Server scalability can also be improved by combining ANEs and their | |||
| scalability can also be improved by combining Abstract Network | properties in a single response. | |||
| Elements and their properties in a single response. | ||||
| This document extends [RFC7285] to allow an ALTO server to convey | This document extends the ALTO base protocol [RFC7285] to allow an | |||
| "abstract network state", for paths defined by their <source, | ALTO server to convey "abstract network state" for paths defined by | |||
| destination> pairs. To this end, it introduces a new cost type | their <source, destination> pairs. To this end, it introduces a new | |||
| called "Path Vector" following the cost metric registration specified | cost type called a "Path Vector", following the cost metric | |||
| in [RFC7285] and the updated cost mode registration specified in | registration specified in [RFC7285] and the updated cost mode | |||
| [I-D.bw-alto-cost-mode]. A Path Vector is an array of identifiers | registration specified in [RFC9274]. A Path Vector is an array of | |||
| that identifies an Abstract Network Element, which can be associated | identifiers that identifies an ANE, which can be associated with | |||
| with various properties. The associations between ANEs and their | various properties. The associations between ANEs and their | |||
| properties are encoded in an ALTO information resource called Unified | properties are encoded in an ALTO information resource called the | |||
| Property Map, which is specified in | "entity property map", which is specified in [RFC9240]. | |||
| [I-D.ietf-alto-unified-props-new]. | ||||
| For better confidentiality, this document aims to minimize | For better confidentiality, this document aims to minimize | |||
| information exposure of an ALTO server when providing Path Vector | information exposure of an ALTO server when providing Path Vector | |||
| service. In particular, this document enables and recommends that | services. In particular, this document enables the capability, and | |||
| first ANEs are constructed on demand, and second an ANE is only | also recommends that 1) ANEs be constructed on demand and 2) an ANE | |||
| associated with properties that are requested by an ALTO client. A | only be associated with properties that are requested by an ALTO | |||
| Path Vector response involves two ALTO Maps: the Cost Map that | client. A Path Vector response involves two ALTO maps: the cost map, | |||
| contains the Path Vector results and the up-to-date Unified Property | which contains the Path Vector results; and the up-to-date entity | |||
| Map that contains the properties requested for these ANEs. To | property map, which contains the properties requested for these ANEs. | |||
| enforce consistency and improve server scalability, this document | To enforce consistency and improve server scalability, this document | |||
| uses the "multipart/related" content type defined in [RFC2387] to | uses the "multipart/related" content type as defined in [RFC2387] to | |||
| return the two maps in a single response. | return the two maps in a single response. | |||
| As a single ISP may not have the knowledge of the full Internet paths | As a single ISP may not have knowledge of the full Internet paths | |||
| between arbitrary endpoints, this document is mainly applicable 1) | between arbitrary endpoints, this document is mainly applicable when | |||
| when there is a single ISP between the requested source and | ||||
| destination PIDs or endpoints, for example, ISP-hosted CDN/edge, | ||||
| tenant interconnection in a single public cloud platform, etc.; or 2) | ||||
| when the Path Vectors are generated from end-to-end measurement data. | ||||
| 2. Requirements Languages | * there is a single ISP between the requested source and destination | |||
| Provider-defined Identifiers (PIDs) or endpoints -- for example, | ||||
| ISP-hosted Content Delivery Network (CDN) / edge, tenant | ||||
| interconnection in a single public cloud platform, etc., or | ||||
| * the Path Vectors are generated from end-to-end measurement data. | ||||
| 2. Requirements Language | ||||
| 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 BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 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. | |||
| When the words appear in lower case, they are to be interpreted with | ||||
| their natural language meanings. | ||||
| 3. Terminology | 3. Terminology | |||
| This document extends the ALTO base protocol [RFC7285] and the | This document extends the ALTO base protocol [RFC7285] and the entity | |||
| Unified Property Map extension [I-D.ietf-alto-unified-props-new]. In | property map extension [RFC9240]. In addition to the terms defined | |||
| addition to the terms defined in these documents, this document also | in those documents, this document also uses the following terms: | |||
| uses the following additional terms: | ||||
| Abstract Network Element (ANE): An abstract representation for a | Abstract Network Element (ANE): An abstract representation for a | |||
| component in a network that handles data packets and whose | component in a network that handles data packets and whose | |||
| properties can potentially have an impact on the end-to-end | properties can potentially have an impact on the end-to-end | |||
| performance of traffic. An ANE can be a physical device such as a | performance of traffic. An ANE can be a physical device such as a | |||
| router, a link or an interface, or an aggregation of devices such | router, a link, or an interface; or an aggregation of devices such | |||
| as a subnetwork or a data center. | as a subnetwork or a data center. | |||
| The definition of Abstract Network Element is similar to Network | The definition of an ANE is similar to that for a network element | |||
| Element defined in [RFC2216] in the sense that they both provide | as defined in [RFC2216] in the sense that they both provide an | |||
| an abstract representation of specific components of a network. | abstract representation of specific components of a network. | |||
| However, they have different criteria on how these particular | However, they have different criteria on how these particular | |||
| components are selected. Specifically, a Network Element requires | components are selected. Specifically, a network element requires | |||
| the components to be capable of exercising QoS control, while | the components to be capable of exercising QoS control, while an | |||
| Abstract Network Element only requires the components to have an | ANE only requires the components to have an impact on end-to-end | |||
| impact on the end-to-end performance. | performance. | |||
| ANE Name: A string that uniquely identifies an ANE in a specific | ANE name: A string that uniquely identifies an ANE in a specific | |||
| scope. An ANE can be constructed either statically in advance or | scope. An ANE can be constructed either statically in advance or | |||
| on demand based on the requested information. Thus, different | on demand based on the requested information. Thus, different | |||
| ANEs may only be valid within a particular scope, either ephemeral | ANEs may only be valid within a particular scope, either ephemeral | |||
| or persistent. Within each scope, an ANE is uniquely identified | or persistent. Within each scope, an ANE is uniquely identified | |||
| by an ANE Name, as defined in Section 6.1. Note that an ALTO | by an ANE name, as defined in Section 6.1. Note that an ALTO | |||
| client must not assume ANEs in different scopes but with the same | client must not assume ANEs in different scopes but with the same | |||
| ANE Name refer to the same component(s) of the network. | ANE name refer to the same component(s) of the network. | |||
| Path Vector: Path Vector, or ANE Path Vector, refers to a JSON array | Path Vector (or ANE Path Vector): Refers to a JSON array of ANE | |||
| of ANE Names. It is a generalization of BGP path vector. While | names. It is a generalization of a BGP path vector. While a | |||
| standard BGP path vector (Section 5.1.2 of [RFC4271]) specifies a | standard BGP path vector (Section 5.1.2 of [RFC4271]) specifies a | |||
| sequence of autonomous systems for a destination IP prefix, the | sequence of Autonomous Systems (ASes) for a destination IP prefix, | |||
| Path Vector defined in this extension specifies a sequence of ANEs | the Path Vector defined in this extension specifies a sequence of | |||
| either for a source Provider-Defined Identifier (PID) and a | ANEs for either 1) a source PID and a destination PID, as in the | |||
| destination PID as in the CostMapData (11.2.3.6 in [RFC7285]), or | CostMapData object (Section 11.2.3.6 of [RFC7285]) or 2) a source | |||
| for a source endpoint and a destination endpoint as in the | endpoint and a destination endpoint, as in the EndpointCostMapData | |||
| EndpointCostMapData object (Section 11.5.1.6 of [RFC7285]). | object (Section 11.5.1.6 of [RFC7285]). | |||
| Path Vector resource: An ALTO information resource (Section 8.1 of | Path Vector resource: An ALTO information resource (Section 8.1 of | |||
| [RFC7285]) which supports the extension defined in this document. | [RFC7285]) that supports the extension defined in this document. | |||
| Path Vector cost type: A special cost type, which is specified in | Path Vector cost type: A special cost type, which is specified in | |||
| Section 6.5. When this cost type is present in an IRD entry, it | Section 6.5. When this cost type is present in an Information | |||
| indicates that the information resource is a Path Vector resource. | Resource Directory (IRD) entry, it indicates that the information | |||
| When this cost type is present in a Filtered Cost Map request or | resource is a Path Vector resource. When this cost type is | |||
| an Endpoint Cost Service request, it indicates each cost value | present in a filtered cost map request or an Endpoint Cost Service | |||
| must be interpreted as a Path Vector. | request, it indicates that each cost value must be interpreted as | |||
| a Path Vector. | ||||
| Path Vector request: The POST message sent to an ALTO Path Vector | Path Vector request: The POST message sent to an ALTO Path Vector | |||
| resource. | resource. | |||
| Path Vector response: A Path Vector response refers to the | Path Vector response: Refers to the multipart/related message | |||
| multipart/related message returned by a Path Vector resource. | returned by a Path Vector resource. | |||
| 4. Requirements and Use Cases | 4. Requirements and Use Cases | |||
| 4.1. Design Requirements | 4.1. Design Requirements | |||
| This section gives an illustrative example of how an overlay | This section gives an illustrative example of how an overlay | |||
| application can benefit from the extension defined in this document. | application can benefit from the extension defined in this document. | |||
| Assume that an application has control over a set of flows, which may | Assume that an application has control over a set of flows, which may | |||
| go through shared links/nodes and share bottlenecks. The application | go through shared links/nodes and share bottlenecks. The application | |||
| seeks to schedule the traffic among multiple flows to get better | seeks to schedule the traffic among multiple flows to get better | |||
| performance. The constraints of feasible rate allocations of those | performance. The constraints of feasible rate allocations of those | |||
| flows will benefit the scheduling. However, Cost Maps as defined in | flows will benefit the scheduling. However, cost maps as defined in | |||
| [RFC7285] can not reveal such information. | [RFC7285] cannot reveal such information. | |||
| Specifically, consider a network as shown in Figure 1. The network | Specifically, consider the example network shown in Figure 1. The | |||
| has 7 switches (sw1 to sw7) forming a dumb-bell topology. Switches | network has seven switches ("sw1" to "sw7") forming a dumbbell | |||
| "sw1", "sw2", "sw3" and "sw4" are access switches, and sw5-sw7 form | topology. Switches "sw1", "sw2", "sw3", and "sw4" are access | |||
| the backbone. End hosts eh1 to eh4 are connected to access switches | switches, and "sw5-sw7" form the backbone. End hosts "eh1" to "eh4" | |||
| sw1 to sw4 respectively. Assume that the bandwidth of link eh1 -> | are connected to access switches "sw1" to "sw4", respectively. | |||
| sw1 and link sw1 -> sw5 is 150 Mbps, and the bandwidth of the other | Assume that the bandwidth of link "eh1 -> sw1" and link "sw1 -> sw5" | |||
| links is 100 Mbps. | is 150 Mbps and the bandwidth of the other links is 100 Mbps. | |||
| +-----+ | +-----+ | |||
| | | | | | | |||
| --+ sw6 +-- | --+ sw6 +-- | |||
| / | | \ | / | | \ | |||
| PID1 +-----+ / +-----+ \ +-----+ PID2 | PID1 +-----+ / +-----+ \ +-----+ PID2 | |||
| eh1__| |_ / \ ____| |__eh2 | eh1__| |_ / \ ____| |__eh2 | |||
| 192.0.2.2 | sw1 | \ +--|--+ +--|--+ / | sw2 | 192.0.2.3 | 192.0.2.2 | sw1 | \ +--|--+ +--|--+ / | sw2 | 192.0.2.3 | |||
| +-----+ \ | | | |/ +-----+ | +-----+ \ | | | |/ +-----+ | |||
| \_| sw5 +---------+ sw7 | | \_| sw5 +---------+ sw7 | | |||
| skipping to change at page 8, line 35 ¶ | skipping to change at line 350 ¶ | |||
| +-----+ +-----+ | +-----+ +-----+ | |||
| bw(eh1--sw1) = bw(sw1--sw5) = 150 Mbps | bw(eh1--sw1) = bw(sw1--sw5) = 150 Mbps | |||
| bw(eh2--sw2) = bw(eh3--sw3) = bw(eh4--sw4) = 100 Mbps | bw(eh2--sw2) = bw(eh3--sw3) = bw(eh4--sw4) = 100 Mbps | |||
| bw(sw1--sw5) = bw(sw3--sw5) = bw(sw2--sw7) = bw(sw4--sw7) = 100 Mbps | bw(sw1--sw5) = bw(sw3--sw5) = bw(sw2--sw7) = bw(sw4--sw7) = 100 Mbps | |||
| bw(sw5--sw6) = bw(sw5--sw7) = bw(sw6--sw7) = 100 Mbps | bw(sw5--sw6) = bw(sw5--sw7) = bw(sw6--sw7) = 100 Mbps | |||
| Figure 1: Raw Network Topology | Figure 1: Raw Network Topology | |||
| The base ALTO topology abstraction of the network is shown in | The base ALTO topology abstraction of the network is shown in | |||
| Figure 2. Assume the cost map returns an hypothetical cost type | Figure 2. Assume that the cost map returns a hypothetical cost type | |||
| representing the available bandwidth between a source and a | representing the available bandwidth between a source and a | |||
| destination. | destination. | |||
| +----------------------+ | +----------------------+ | |||
| {eh1} | | {eh2} | {eh1} | | {eh2} | |||
| PID1 | | PID2 | PID1 | | PID2 | |||
| +------+ +------+ | +------+ +------+ | |||
| | | | | | | |||
| | | | | | | |||
| {eh3} | | {eh4} | {eh3} | | {eh4} | |||
| PID3 | | PID4 | PID3 | | PID4 | |||
| +------+ +------+ | +------+ +------+ | |||
| | | | | | | |||
| +----------------------+ | +----------------------+ | |||
| Figure 2: Base Topology Abstraction | Figure 2: Base Topology Abstraction | |||
| Now assume the application wants to maximize the total rate of the | Now, assume that the application wants to maximize the total rate of | |||
| traffic among a set of <source, destination> pairs, say "eh1 -> eh2" | the traffic among a set of <source, destination> pairs -- say, "eh1 | |||
| and "eh1 -> eh4". Let "x" denote the transmission rate of "eh1 -> | -> eh2" and "eh1 -> eh4". Let "x" denote the transmission rate of | |||
| eh2" and "y" denote the rate of "eh1 -> eh4". The objective function | "eh1 -> eh2" and "y" denote the rate of "eh1 -> eh4". The objective | |||
| is | function is | |||
| max(x + y). | max(x + y). | |||
| With the ALTO Cost Map, the cost between PID1 and PID2 and between | With the ALTO cost map, the costs between PID1 and PID2 and between | |||
| PID1 and PID4 will both be 100 Mbps. The client can get a capacity | PID1 and PID4 will both be 100 Mbps. The client can get a capacity | |||
| region of | region of | |||
| x <= 100 Mbps, | x <= 100 Mbps | |||
| y <= 100 Mbps. | y <= 100 Mbps. | |||
| With this information, the client may mistakenly think it can achieve | With this information, the client may mistakenly think it can achieve | |||
| a maximum total rate of 200 Mbps. However, this rate is infeasible, | a maximum total rate of 200 Mbps. However, this rate is infeasible, | |||
| as there are only two potential cases: | as there are only two potential cases: | |||
| * Case 1: "eh1 -> eh2" and "eh1 -> eh4" take different path segments | Case 1: "eh1 -> eh2" and "eh1 -> eh4" take different path segments | |||
| from "sw5" to "sw7". For example, if "eh1 -> eh2" uses path "eh1 | from "sw5" to "sw7". For example, if "eh1 -> eh2" uses path "eh1 | |||
| -> sw1 -> sw5 -> sw6 -> sw7 -> sw2 -> eh2" and "eh1 -> eh4" uses | -> sw1 -> sw5 -> sw6 -> sw7 -> sw2 -> eh2" and "eh1 -> eh4" uses | |||
| path "eh1 -> sw1 -> sw5 -> sw7 -> sw4 -> eh4", then the shared | path "eh1 -> sw1 -> sw5 -> sw7 -> sw4 -> eh4", then the shared | |||
| bottleneck links are "eh1 -> sw1" and "sw1 -> sw5". In this case, | bottleneck links are "eh1 -> sw1" and "sw1 -> sw5". In this case, | |||
| the capacity region is: | the capacity region is: | |||
| x <= 100 Mbps | x <= 100 Mbps | |||
| y <= 100 Mbps | y <= 100 Mbps | |||
| x + y <= 150 Mbps | x + y <= 150 Mbps | |||
| and the real optimal total rate is 150 Mbps. | and the real optimal total rate is 150 Mbps. | |||
| * Case 2: "eh1 -> eh2" and "eh1 -> eh4" take the same path segment | Case 2: "eh1 -> eh2" and "eh1 -> eh4" take the same path segment | |||
| from "sw5" to "sw7". For example, if "eh1 -> eh2" uses path "eh1 | from "sw5" to "sw7". For example, if "eh1 -> eh2" uses path "eh1 | |||
| -> sw1 -> sw5 -> sw7 -> sw2 -> eh2" and "eh1 -> eh4" also uses | -> sw1 -> sw5 -> sw7 -> sw2 -> eh2" and "eh1 -> eh4" also uses | |||
| path "eh1 -> sw1 -> sw5 -> sw7 -> sw4 -> eh4", then the shared | path "eh1 -> sw1 -> sw5 -> sw7 -> sw4 -> eh4", then the shared | |||
| bottleneck link is "sw5 -> sw7". In this case, the capacity | bottleneck link is "sw5 -> sw7". In this case, the capacity | |||
| region is: | region is: | |||
| x <= 100 Mbps | x <= 100 Mbps | |||
| y <= 100 Mbps | y <= 100 Mbps | |||
| x + y <= 100 Mbps | x + y <= 100 Mbps | |||
| and the real optimal total rate is 100 Mbps. | and the real optimal total rate is 100 Mbps. | |||
| Clearly, with more accurate and fine-grained information, the | Clearly, with more accurate and fine-grained information, the | |||
| application can gain a better prediction of its traffic and may | application can better predict its traffic and may orchestrate its | |||
| orchestrate its resources accordingly. However, to provide such | resources accordingly. However, to provide such information, the | |||
| information, the network needs to expose abstract information beyond | network needs to expose abstract information beyond the simple cost | |||
| the simple cost map abstraction. In particular: | map abstraction. In particular: | |||
| * The ALTO server must expose abstract information about the network | * The ALTO server must expose abstract information about the network | |||
| paths that are traversed by the traffic between a source and a | paths that are traversed by the traffic between a source and a | |||
| destination beyond a simple numerical value, which allows the | destination beyond a simple numerical value, which allows the | |||
| overlay application to distinguish between Cases 1 and 2 and to | overlay application to distinguish between Cases 1 and 2 and to | |||
| compute the optimal total rate accordingly. | compute the optimal total rate accordingly. | |||
| * The ALTO server must allow the client to distinguish the common | * The ALTO server must allow the client to distinguish the common | |||
| ANE shared by "eh1 -> eh2" and "eh1 -> eh4", e.g., "eh1 - sw1" and | ANE shared by "eh1 -> eh2" and "eh1 -> eh4", e.g., "eh1--sw1" and | |||
| "sw1 - sw5" in Case 1. | "sw1--sw5" in Case 1. | |||
| * The ALTO server must expose abstract information on the properties | * The ALTO server must expose abstract information on the properties | |||
| of the ANEs used by "eh1 -> eh2" and "eh1 -> eh4". For example, | of the ANEs used by "eh1 -> eh2" and "eh1 -> eh4". For example, | |||
| an ALTO server can either expose the available bandwidth between | an ALTO server can either expose the available bandwidth between | |||
| "eh1 - sw1", "sw1 - sw5", "sw5 - sw7", "sw5 - sw6", "sw6 - sw7", | "eh1--sw1", "sw1--sw5", "sw5--sw7", "sw5--sw6", "sw6--sw7", | |||
| "sw7 - sw2", "sw7 - sw4", "sw2 - eh2", "sw4 - eh4" in Case 1, or | "sw7--sw2", "sw7--sw4", "sw2--eh2", "sw4--eh4" in Case 1 or expose | |||
| expose 3 abstract elements "A", "B" and "C", which represent the | three abstract elements "A", "B", and "C", which represent the | |||
| linear constraints that define the same capacity region in Case 1. | linear constraints that define the same capacity region in Case 1. | |||
| In general, we can conclude that to support the multiple flow | In general, we can conclude that to support the use case for multiple | |||
| scheduling use case, the ALTO framework must be extended to satisfy | flow scheduling, the ALTO framework must be extended to satisfy the | |||
| the following additional requirements: | following additional requirements (ARs): | |||
| AR1: An ALTO server must provide the ANEs that are important to | AR1: An ALTO server must provide the ANEs that are important for | |||
| assess the QoE of the overlay application on the path of a | assessing the QoE of the overlay application on the path of a | |||
| <source, destination> pair. | <source, destination> pair. | |||
| AR2: An ALTO server must provide information to identify how ANEs | AR2: An ALTO server must provide information to identify how ANEs | |||
| are shared on the paths of different <source, destination> pairs. | are shared on the paths of different <source, destination> pairs. | |||
| AR3: An ALTO server must provide information on the properties that | AR3: An ALTO server must provide information on the properties that | |||
| are important to assess the QoE of the application for ANEs. | are important for assessing the QoE of the application for ANEs. | |||
| The extension defined in this document specifies a solution to expose | The extension defined in this document specifies a solution to expose | |||
| such abstract information. | such abstract information. | |||
| 4.2. Sample Use Cases | 4.2. Sample Use Cases | |||
| While the multiple flow scheduling problem is used to help identify | While the problem related to multiple flow scheduling is used to help | |||
| the additional requirements, the extension defined in this document | identify the additional requirements, the extension defined in this | |||
| can be applied to a wide range of applications. This section | document can be applied to a wide range of applications. This | |||
| highlights some use cases that are reported. | section highlights some of the reported use cases. | |||
| 4.2.1. Exposing Network Bottlenecks | 4.2.1. Exposing Network Bottlenecks | |||
| An important use case of the Path Vector extension is to expose | One important use case for the Path Vector extension is to expose | |||
| network bottlenecks. Applications which need to perform large scale | network bottlenecks. Applications that need to perform large-scale | |||
| data transfers can benefit from being aware of the resource | data transfers can benefit from being aware of the resource | |||
| constraints exposed by this extension even if they have different | constraints exposed by this extension even if they have different | |||
| objectives. One such example is the Worldwide LHC Computing Grid | objectives. One such example is the Worldwide LHC Computing Grid | |||
| (WLCG), the largest example of a distributed computation | (WLCG) (where "LHC" means "Large Hadron Collider"), which is the | |||
| collaboration in the research and education world. | largest example of a distributed computation collaboration in the | |||
| research and education world. | ||||
| Figure 3 illustrates an example of using ALTO Path Vector as an | Figure 3 illustrates an example of using an ALTO Path Vector as an | |||
| interface between the job optimizer for a data analytics system and | interface between the job optimizer for a data analytics system and | |||
| the network manager. In particular, we assume the objective of the | the network manager. In particular, we assume that the objective of | |||
| job optimizer is to minimize the job completion time. | the job optimizer is to minimize the job completion time. | |||
| In such a setting, the network-aware job optimizer (e.g., [CLARINET]) | In such a setting, the network-aware job optimizer (e.g., [CLARINET]) | |||
| takes a query and generates multiple query execution plans (QEP). It | takes a query and generates multiple query execution plans (QEPs). | |||
| can encode the QEPs as Path Vector requests that are send to an ALTO | It can encode the QEPs as Path Vector requests that are sent to an | |||
| server. The ALTO server obtains the routing information for the | ALTO server. The ALTO server obtains the routing information for the | |||
| flows in a QEP and finds links, routers, or middleboxes (e.g., a | flows in a QEP and finds links, routers, or middleboxes (e.g., a | |||
| stateful firewall) that can potentially become bottlenecks of the QEP | stateful firewall) that can potentially become bottlenecks for the | |||
| (e.g., see [NOVA] and [G2] for mechanisms to identify bottleneck | QEP (e.g., see [NOVA] and [G2] for mechanisms to identify bottleneck | |||
| links under different settings). The resource constraint information | links under different settings). The resource constraint information | |||
| is encoded in a Path Vector response and returned to the ALTO client. | is encoded in a Path Vector response and returned to the ALTO client. | |||
| With the network resource constraints, the job optimizer may choose | With the network resource constraints, the job optimizer may choose | |||
| the QEP with the optimal job completion time to be executed. It must | the QEP with the optimal job completion time to be executed. It must | |||
| be noted that the ALTO framework itself does not offer the capability | be noted that the ALTO framework itself does not offer the capability | |||
| to control the traffic. However, certain network managers may offer | to control the traffic. However, certain network managers may offer | |||
| ways to enforce resource guarantees, such as on-demand tunnels (e.g., | ways to enforce resource guarantees, such as on-demand tunnels (e.g., | |||
| [SWAN]), demand vector (e.g., [HUG], [UNICORN]), etc. The traffic | [SWAN]), demand vectors (e.g., [HUG], [UNICORN]), etc. The traffic | |||
| control interfaces and mechanisms are out of the scope of this | control interfaces and mechanisms are out of scope for this document. | |||
| document. | ||||
| Data schema Queries | Data schema Queries | |||
| | | | | | | |||
| \ / | \ / | |||
| +-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
| | ALTO Client | <===============> | Job Optimizer | | | ALTO Client | <===============> | Job Optimizer | | |||
| +-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
| PV | ^ PV | | PV | ^ PV | | |||
| Request | | Response | | Request | | Response | | |||
| | | On-demand resource | | | | On-demand resource | | |||
| (Data | | (Network allocation, demand | | (Potential | | (Network allocation, demand | | |||
| Transfer | | Resource vector, etc. | | Data | | Resource vectors, etc. | | |||
| Intents) | | Constraints) (Non-ALTO interfaces)| | Transfers) | | Constraints) (Non-ALTO interfaces)| | |||
| v | v | v | v | |||
| +-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
| | ALTO Server | <===============> | Network Manager | | | ALTO Server | <===============> | Network Manager | | |||
| +-------------+ +-----------------+ | +-------------+ +-----------------+ | |||
| / | \ | / | \ | |||
| | | | | | | | | |||
| WAN DC1 DC2 | WAN DC1 DC2 | |||
| Figure 3: Example Use Case for Data Analytics | Figure 3: Example Use Case for Data Analytics | |||
| Another example is as illustrated in Figure 4. Consider a network | Another example is illustrated in Figure 4. Consider a network | |||
| consisting of multiple sites and a non-blocking core network, i.e., | consisting of multiple sites and a non-blocking core network, i.e., | |||
| the links in the core network have sufficient bandwidth that they | the links in the core network have sufficient bandwidth that they | |||
| will not become the bottleneck of the data transfers. | will not become a bottleneck for the data transfers. | |||
| On-going transfers New transfer requests | Ongoing transfers New transfer requests | |||
| \----\ | | \----\ | | |||
| | | | | | | |||
| v v | v v | |||
| +-------------+ +---------------+ | +-------------+ +---------------+ | |||
| | ALTO Client | <===========> | Data Transfer | | | ALTO Client | <===========> | Data Transfer | | |||
| +-------------+ | Scheduler | | +-------------+ | Scheduler | | |||
| ^ | ^ | PV request +---------------+ | ^ | ^ | PV Request +---------------+ | |||
| | | | \--------------\ | | | | \--------------\ | |||
| | | \--------------\ | | | | \--------------\ | | |||
| | v PV response | v | | v PV Response | v | |||
| +-------------+ +-------------+ | +-------------+ +-------------+ | |||
| | ALTO Server | | ALTO Server | | | ALTO Server | | ALTO Server | | |||
| +-------------+ +-------------+ | +-------------+ +-------------+ | |||
| || || | || || | |||
| +---------+ +---------+ | +---------+ +---------+ | |||
| | Network | | Network | | | Network | | Network | | |||
| | Manager | | Manager | | | Manager | | Manager | | |||
| +---------+ +---------+ | +---------+ +---------+ | |||
| . . | . . | |||
| . _~_ __ . . . | . _~_ __ . . . | |||
| . ( )( ) .___ | . ( )( ) .___ | |||
| ~v~v~ /--( )------------( ) | ~v~v~ /--( )------------( ) | |||
| ( )-----/ ( ) ( ) | ( )-----/ ( ) ( ) | |||
| ~w~w~ ~^~^~^~ ~v~v~ | ~w~w~ ~^~^~^~ ~v~v~ | |||
| Site 1 Non-blocking Core Site 2 | Site 1 Non-blocking Core Site 2 | |||
| Figure 4: Example Use Case for Cross-site Bottleneck Discovery | Figure 4: Example Use Case for Cross-Site Bottleneck Discovery | |||
| With the Path Vector extension, a site can reveal the bottlenecks | ||||
| inside its own network with necessary information (such as link | ||||
| capacities) to the ALTO client, instead of providing the full | ||||
| topology and routing information, or no bottleneck information at | ||||
| all. The bottleneck information can be used to analyze the impact of | ||||
| adding/removing data transfer flows, e.g., using the framework | ||||
| defined in [G2]. For example, assume that hosts "a", "b", and "c" | ||||
| are in Site 1 and hosts "d", "e", and "f" are in Site 2, and there | ||||
| are three flows in two sites: "a -> b", "c -> d", and "e -> f" | ||||
| (Figure 5). | ||||
| Site 1: | Site 1: | |||
| [c] | [c] | |||
| . | . | |||
| ........................................> [d] | ........................................> [d] | |||
| +---+ 10 Gbps +---+ 10 Gbps +----+ 50 Gbps | +---+ 10 Gbps +---+ 10 Gbps +----+ 50 Gbps | |||
| | A |---------| B |---------| GW |--------- Core | | A |---------| B |---------| GW |--------- Core | |||
| +---+ +---+ +----+ | +---+ +---+ +----+ | |||
| ................... | ................... | |||
| skipping to change at page 14, line 31 ¶ | skipping to change at line 588 ¶ | |||
| +---+ 5 Gbps +---+ 10 Gbps +----+ 20 Gbps | +---+ 5 Gbps +---+ 10 Gbps +----+ 20 Gbps | |||
| | X |--------| Y |---------| GW |--------- Core | | X |--------| Y |---------| GW |--------- Core | |||
| +---+ +---+ +----+ | +---+ +---+ +----+ | |||
| .................... | .................... | |||
| . . | . . | |||
| . v | . v | |||
| [e] [f] | [e] [f] | |||
| Figure 5: Example: Three Flows in Two Sites | Figure 5: Example: Three Flows in Two Sites | |||
| With the Path Vector extension, a site can reveal the bottlenecks | For these flows, Site 1 returns: | |||
| inside its own network with necessary information (such as link | ||||
| capacities) to the ALTO client, instead of providing the full | ||||
| topology and routing information, or no bottleneck information at | ||||
| all. The bottleneck information can be used to analyze the impact of | ||||
| adding/removing data transfer flows, e.g., using the [G2] framework. | ||||
| For example, assume hosts "a", "b", "c" are in site 1 and hosts "d", | ||||
| "e", "f" are in site 2, and there are 3 flows in two sites: "a -> b", | ||||
| "c -> d", "e -> f". For these flows, site 1 returns: | ||||
| a: { b: [ane1] }, | a: { b: [ane1] }, | |||
| c: { d: [ane1, ane2, ane3] } | c: { d: [ane1, ane2, ane3] } | |||
| ane1: bw = 10 Gbps (link: A->B) | ane1: bw = 10 Gbps (link: A->B) | |||
| ane2: bw = 10 Gbps (link: B->GW) | ane2: bw = 10 Gbps (link: B->GW) | |||
| ane3: bw = 50 Gbps (link: GW->Core) | ane3: bw = 50 Gbps (link: GW->Core) | |||
| and site 2 returns: | and Site 2 returns: | |||
| c: { d: [anei, aneii, aneiii] } | c: { d: [anei, aneii, aneiii] } | |||
| e: { f: [aneiv] } | e: { f: [aneiv] } | |||
| anei: bw = 5 Gbps (link Y->X) | anei: bw = 5 Gbps (link Y->X) | |||
| aneii: bw = 10 Gbps (link GW->Y) | aneii: bw = 10 Gbps (link GW->Y) | |||
| aneiii: bw = 20 Gbps (link Core->GW) | aneiii: bw = 20 Gbps (link Core->GW) | |||
| aneiv: bw = 10 Gbps (link Y->GW) | aneiv: bw = 10 Gbps (link Y->GW) | |||
| With the information, the data transfer scheduler can use algorithms | With this information, the data transfer scheduler can use algorithms | |||
| such as the theory on bottleneck structure [G2] to predict the | such as the theory on bottleneck structure [G2] to predict the | |||
| potential throughput of the flows. | potential throughput of the flows. | |||
| 4.2.2. Resource Exposure for CDN and Service Edge | 4.2.2. Resource Exposure for CDNs and Service Edges | |||
| A growing trend in today's applications (2021) is to bring storage | At the time of this writing, a growing trend in today's applications | |||
| and computation closer to the end users for better QoE, such as | is to bring storage and computation closer to the end users for | |||
| Content Delivery Network (CDN), AR/VR, and cloud gaming, as reported | better QoE, such as CDNs, augmented reality / virtual reality, and | |||
| in various documents (e.g., [SEREDGE] and [MOWIE]). Internet Service | cloud gaming, as reported in various documents (e.g., [SEREDGE] and | |||
| Providers may deploy multiple layers of CDN caches, or more generally | [MOWIE]). ISPs may deploy multiple layers of CDN caches or, more | |||
| service edges, with different latency and available resources | generally, service edges, with different latencies and available | |||
| including number of CPU cores, memory, and storage. | resources, including the number of CPU cores, memory, and storage. | |||
| For example, Figure 6 illustrates a typical edge-cloud scenario where | For example, Figure 6 illustrates a typical edge-cloud scenario where | |||
| memory is measured in Gigabytes (G) and storage is measured in | memory is measured in gigabytes (GB) and storage is measured in | |||
| Terabytes (T). The "on-premise" edge nodes are closest to the end | terabytes (TB). The "on-premise" edge nodes are closest to the end | |||
| hosts and have the smallest latency, and the site-radio edge node and | hosts and have the lowest latency, and the site-radio edge node and | |||
| access central office (CO) have larger latency but more available | access central office (CO) have higher latencies but more available | |||
| resources. | resources. | |||
| +-------------+ +----------------------+ | +-------------+ +----------------------+ | |||
| | ALTO Client | <==========> | Application Provider | | | ALTO Client | <==========> | Application Provider | | |||
| +-------------+ +----------------------+ | +-------------+ +----------------------+ | |||
| PV | ^ PV | | PV | ^ PV | | |||
| Request | | Response | Resource allocation, | Request | | Response | Resource allocation, | |||
| | | | service establishment, | | | | service establishment, | |||
| (End hosts | | (Edge nodes | etc. | (End hosts | | (Edge nodes | etc. | |||
| and cloud | | and metrics) | | and cloud | | and metrics) | | |||
| skipping to change at page 17, line 5 ¶ | skipping to change at line 665 ¶ | |||
| Site-radio /_\ / | Site-radio /_\ / | |||
| Edge Node 2(/\_/\)-----/ | Edge Node 2(/\_/\)-----/ | |||
| /(_____)\ | /(_____)\ | |||
| ___ / \ --- | ___ / \ --- | |||
| b--|_| -/ \--|_|--c | b--|_| -/ \--|_|--c | |||
| /---\ /---\ | /---\ /---\ | |||
| On premise On premise | On premise On premise | |||
| Figure 6: Example Use Case for Service Edge Exposure | Figure 6: Example Use Case for Service Edge Exposure | |||
| With the extension defined in this document, an ALTO server can | ||||
| selectively reveal the CDNs and service edges that reside along the | ||||
| paths between different end hosts and/or the cloud servers, together | ||||
| with their properties (e.g., storage capabilities or Graphics | ||||
| Processing Unit (GPU) capabilities) and available Service Level | ||||
| Agreement (SLA) plans. See Figure 7 for an example where the query | ||||
| is made for sources [a, b] and destinations [b, c, DC]. Here, each | ||||
| ANE represents a service edge, and the properties include access | ||||
| latency, available resources, etc. Note that the properties here are | ||||
| only used for illustration purposes and are not part of this | ||||
| extension. | ||||
| a: { b: [ane1, ane2, ane3, ane4, ane5], | a: { b: [ane1, ane2, ane3, ane4, ane5], | |||
| c: [ane1, ane2, ane3, ane4, ane6], | c: [ane1, ane2, ane3, ane4, ane6], | |||
| DC: [ane1, ane2, ane3] } | DC: [ane1, ane2, ane3] } | |||
| b: { c: [ane5, ane4, ane6], DC: [ane5, ane4, ane3] } | b: { c: [ane5, ane4, ane6], DC: [ane5, ane4, ane3] } | |||
| ane1: latency=5ms cpu=2 memory=8G storage=10T | ane1: latency = 5 ms cpu = 2 memory = 8 GB storage = 10 TB | |||
| (on premise, a) | (On premise, a) | |||
| ane2: latency=20ms cpu=4 memory=8G storage=10T | ane2: latency = 20 ms cpu = 4 memory = 8 GB storage = 10 TB | |||
| (Site-radio Edge Node 1) | (Site-radio Edge Node 1) | |||
| ane3: latency=100ms cpu=8 memory=128G storage=100T | ane3: latency = 100 ms cpu = 8 memory = 128 GB storage = 100 TB | |||
| (Access CO) | (Access CO) | |||
| ane4: latency=20ms cpu=4 memory=8G storage=10T | ane4: latency = 20 ms cpu = 4 memory = 8 GB storage = 10 TB | |||
| (Site-radio Edge Node 2) | (Site-radio Edge Node 2) | |||
| ane5: latency=5ms cpu=2 memory=8G storage=10T | ane5: latency = 5 ms cpu = 2 memory = 8 GB storage = 10 TB | |||
| (on premise, b) | (On premise, b) | |||
| ane6: latency=5ms cpu=2 memory=8G storage=10T | ane6: latency = 5 ms cpu = 2 memory = 8 GB storage = 10 TB | |||
| (on premise, c) | (On premise, c) | |||
| Figure 7: Example Service Edge Query Results | Figure 7: Example Service Edge Query Results | |||
| With the extension defined in this document, an ALTO server can | ||||
| selectively reveal the CDNs and service edges that reside along the | ||||
| paths between different end hosts and/or the cloud servers, together | ||||
| with their properties such as capabilities (e.g., storage, GPU) and | ||||
| available Service Level Agreement (SLA) plans. See Figure 7 for an | ||||
| example where the query is made for sources [a, b] and destinations | ||||
| [b, c, DC]. Here each ANE represents a service edge and the | ||||
| properties include access latency, available resources, etc. Note | ||||
| the properties here are only used for illustration purposes and are | ||||
| not part of this extension. | ||||
| With the service edge information, an ALTO client may better conduct | With the service edge information, an ALTO client may better conduct | |||
| CDN request routing or offload functionalities from the user | CDN request routing or offload functionalities from the user | |||
| equipment to the service edge, with considerations on customized | equipment to the service edge, with considerations in place for | |||
| quality of experience. | customized quality of experience. | |||
| 5. Path Vector Extension: Overview | 5. Path Vector Extension: Overview | |||
| This section provides a non-normative overview of the Path Vector | This section provides a non-normative overview of the Path Vector | |||
| extension defined in this document. It is assumed that the readers | extension defined in this document. It is assumed that readers are | |||
| are familiar with both the base protocol [RFC7285] and the Unified | familiar with both the base protocol [RFC7285] and the entity | |||
| Property Map extension [I-D.ietf-alto-unified-props-new]. | property map extension [RFC9240]. | |||
| To satisfy the additional requirements listed in Section 4.1, this | To satisfy the additional requirements listed in Section 4.1, this | |||
| extension: | extension: | |||
| 1. introduces the concept of Abstract Network Element (ANE) as the | 1. introduces the concept of an ANE as the abstraction of components | |||
| abstraction of components in a network whose properties may have | in a network whose properties may have an impact on end-to-end | |||
| an impact on the end-to-end performance of the traffic handled by | performance of the traffic handled by those components, | |||
| those components, | ||||
| 2. extends the Cost Map and Endpoint Cost Service to convey the ANEs | 2. extends the cost map and Endpoint Cost Service to convey the ANEs | |||
| traversed by the path of a <source, destination> pair as Path | traversed by the path of a <source, destination> pair as Path | |||
| Vectors, and | Vectors, and | |||
| 3. uses the Unified Property Map to convey the association between | 3. uses the entity property map to convey the association between | |||
| the ANEs and their properties. | the ANEs and their properties. | |||
| Thus, an ALTO client can learn about the ANEs that are important to | Thus, an ALTO client can learn about the ANEs that are important for | |||
| assess the QoE of different <source, destination> pairs by | assessing the QoE of different <source, destination> pairs by | |||
| investigating the corresponding Path Vector value (AR1), identify | investigating the corresponding Path Vector value (AR1) and can also | |||
| common ANEs if an ANE appears in the Path Vectors of multiple | (1) identify common ANEs if an ANE appears in the Path Vectors of | |||
| <source, destination> pairs (AR2), and retrieve the properties of the | multiple <source, destination> pairs (AR2) and (2) retrieve the | |||
| ANEs by searching the Unified Property Map (AR3). | properties of the ANEs by searching the entity property map (AR3). | |||
| 5.1. Abstract Network Element (ANE) | 5.1. Abstract Network Element (ANE) | |||
| This extension introduces ANE as an indirect and network-agnostic way | This extension introduces the ANE as an indirect and network-agnostic | |||
| to specify a component or an aggregation of components of a network | way to specify a component or an aggregation of components of a | |||
| whose properties have an impact on the end-to-end performance for | network whose properties have an impact on end-to-end performance for | |||
| application traffic between endpoints. | application traffic between endpoints. | |||
| ANEs allow ALTO servers to focus on common properties of different | ANEs allow ALTO servers to focus on common properties of different | |||
| types of network components. For example, the throughput of a flow | types of network components. For example, the throughput of a flow | |||
| can be constrained by different components in a network: the capacity | can be constrained by different components in a network: the capacity | |||
| of a physical link, the maximum throughput of a firewall, the | of a physical link, the maximum throughput of a firewall, the | |||
| reserved bandwidth of an MPLS tunnel, etc. See the example below, | reserved bandwidth of an MPLS tunnel, etc. In the example below, | |||
| assume the throughput of the firewall is 100 Mbps and the capacity | assume that the throughput of the firewall is 100 Mbps and the | |||
| for link (A, B) is also 100 Mbps, they result in the same constraint | capacity for link (A, B) is also 100 Mbps; they result in the same | |||
| on the total throughput of f1 and f2. Thus, they are identical when | constraint on the total throughput of f1 and f2. Thus, they are | |||
| treated as an ANE. | identical when treated as an ANE. | |||
| f1 | ^ f1 | f1 | ^ f1 | |||
| | | -----------------> | | | -----------------> | |||
| +----------+ +---+ +---+ | +----------+ +---+ +---+ | |||
| | Firewall | | A |-----| B | | | Firewall | | A |-----| B | | |||
| +----------+ +---+ +---+ | +----------+ +---+ +---+ | |||
| | | -----------------> | | | -----------------> | |||
| v | f2 f2 | v | f2 f2 | |||
| When an ANE is defined by an ALTO server, it is assigned an | When an ANE is defined by an ALTO server, it is assigned an | |||
| identifier by the ALTO server, i.e., a string of type ANEName as | identifier by the ALTO server, i.e., a string of type ANEName as | |||
| specified in Section 6.1, and a set of associated properties. | specified in Section 6.1, and a set of associated properties. | |||
| 5.1.1. ANE Entity Domain | 5.1.1. ANE Entity Domain | |||
| In this extension, the associations between ANE and the properties | In this extension, the associations between ANEs and their properties | |||
| are conveyed in a Unified Property Map. Thus, ANEs must constitute an | are conveyed in an entity property map. Thus, ANEs must constitute | |||
| entity domain (Section 5.1 of [I-D.ietf-alto-unified-props-new]), and | an "entity domain" (Section 5.1 of [RFC9240]), and each ANE property | |||
| each ANE property must be an entity property (Section 5.2 of | must be an entity property (Section 5.2 of [RFC9240]). | |||
| [I-D.ietf-alto-unified-props-new]). | ||||
| Specifically, this document defines a new entity domain called "ane" | Specifically, this document defines a new entity domain called "ane" | |||
| as specified in Section 6.2 and defines two initial properties for | as specified in Section 6.2; Section 6.4 defines two initial property | |||
| the ANE entity domain. | types for the ANE entity domain. | |||
| 5.1.2. Ephemeral and Persistent ANEs | 5.1.2. Ephemeral and Persistent ANEs | |||
| By design, ANEs are ephemeral and not to be used in further requests | By design, ANEs are ephemeral and not to be used in further requests | |||
| to other ALTO resources. More precisely, the corresponding ANE names | to other ALTO resources. More precisely, the corresponding ANE names | |||
| are no longer valid beyond the scope of a Path Vector response or the | are no longer valid beyond the scope of a Path Vector response or the | |||
| incremental update stream for a Path Vector request. Compared with | incremental update stream for a Path Vector request. Compared with | |||
| globally unique ANE names, ephemeral ANE has several benefits | globally unique ANE names, ephemeral ANEs have several benefits, | |||
| including better privacy of the ISP's internal structure and more | including better privacy for the ISP's internal structure and more | |||
| flexible ANE computation. | flexible ANE computation. | |||
| For example, an ALTO server may define an ANE for each aggregated | For example, an ALTO server may define an ANE for each aggregated | |||
| bottleneck link between the sources and destinations specified in the | bottleneck link between the sources and destinations specified in the | |||
| request. For requests with different sources and destinations, the | request. For requests with different sources and destinations, the | |||
| bottlenecks may be different but can safely reuse the same ANE names. | bottlenecks may be different but can safely reuse the same ANE names. | |||
| The client can still adjust its traffic based on the information but | The client can still adjust its traffic based on the information, but | |||
| is difficult to infer the underlying topology with multiple queries. | it is difficult to infer the underlying topology with multiple | |||
| queries. | ||||
| However, sometimes an ISP may intend to selectively reveal some | However, sometimes an ISP may intend to selectively reveal some | |||
| "persistent" network components which, opposite to being ephemeral, | "persistent" network components that, as opposed to being ephemeral, | |||
| have a longer life cycle. For example, an ALTO server may define an | have a longer life cycle. For example, an ALTO server may define an | |||
| ANE for each service edge cluster. Once a client chooses to use a | ANE for each service edge cluster. Once a client chooses to use a | |||
| service edge, e.g., by deploying some user-defined functions, it may | service edge, e.g., by deploying some user-defined functions, it may | |||
| want to stick to the service edge to avoid the complexity of state | want to stick to the service edge to avoid the complexity of state | |||
| transition or synchronization, and continuously query the properties | transition or synchronization, and continuously query the properties | |||
| of the edge cluster. | of the edge cluster. | |||
| This document provides a mechanism to expose such network components | This document provides a mechanism to expose such network components | |||
| as persistent ANEs. A persistent ANE has a persistent ID that is | as persistent ANEs. A persistent ANE has a persistent ID that is | |||
| registered in a Property Map, together with their properties. See | registered in a property map, together with its properties. See | |||
| Section 6.2.4 and Section 6.4.2 for more detailed instructions on how | Sections 6.2.4 and 6.4.2 for more detailed instructions on how to | |||
| to identify ephemeral ANEs and persistent ANEs. | identify ephemeral ANEs and persistent ANEs. | |||
| 5.1.3. Property Filtering | 5.1.3. Property Filtering | |||
| Resource-constrained ALTO clients (see Section 4.1.2 of [RFC7285]) | Resource-constrained ALTO clients (see Section 4.1.2 of [RFC7285]) | |||
| may benefit from the filtering of Path Vector query results at the | may benefit from the filtering of Path Vector query results at the | |||
| ALTO server, as an ALTO client may only require a subset of the | ALTO server, as an ALTO client may only require a subset of the | |||
| available properties. | available properties. | |||
| Specifically, the available properties for a given resource are | Specifically, the available properties for a given resource are | |||
| announced in the Information Resource Directory as a new capability | announced in the Information Resource Directory (IRD) as a new | |||
| called "ane-property-names". The properties selected by a client as | filtering capability called "ane-property-names". The properties | |||
| being of interest are specified in the subsequent Path Vector queries | selected by a client as being of interest are specified in the | |||
| using the filter called 'ane-property-names'. The response includes | subsequent Path Vector queries using the "ane-property-names" filter. | |||
| and only includes the selected properties for the ANEs in the | The response only includes the selected properties for the ANEs. | |||
| response. | ||||
| The "ane-property-names" capability for Cost Map and for Endpoint | The "ane-property-names" capability for the cost map and the Endpoint | |||
| Cost Service is specified in Section 7.2.4 and Section 7.3.4 | Cost Service is specified in Sections 7.2.4 and 7.3.4, respectively. | |||
| respectively. The "ane-property-names" filter for Cost Map and | The "ane-property-names" filter for the cost map and the Endpoint | |||
| Endpoint Cost Service is specified in Section 7.2.3 and Section 7.3.3 | Cost Service is specified in Sections 7.2.3 and 7.3.3 accordingly. | |||
| accordingly. | ||||
| 5.2. Path Vector Cost Type | 5.2. Path Vector Cost Type | |||
| For an ALTO client to correctly interpret the Path Vector, this | For an ALTO client to correctly interpret the Path Vector, this | |||
| extension specifies a new cost type called the Path Vector cost type. | extension specifies a new cost type called the "Path Vector cost | |||
| type". | ||||
| The Path Vector cost type must convey both the interpretation and | The Path Vector cost type must convey both the interpretation and | |||
| semantics in the "cost-mode" and "cost-metric" respectively. | semantics in the "cost-mode" and "cost-metric" parameters, | |||
| Unfortunately, a single "cost-mode" value cannot fully specify the | respectively. Unfortunately, a single "cost-mode" value cannot fully | |||
| interpretation of a Path Vector, which is a compound data type. For | specify the interpretation of a Path Vector, which is a compound data | |||
| example, in programming languages such as C++ where there existed a | type. For example, in programming languages such as C++, if there | |||
| JSON array type named JSONArray, a Path Vector will have the type of | existed a JSON array type named JSONArray, a Path Vector would have | |||
| JSONArray<ANEName>. | the type of JSONArray<ANEName>. | |||
| Instead of extending the "type system" of ALTO, this document takes a | Instead of extending the "type system" of ALTO, this document takes a | |||
| simple and backward compatible approach. Specifically, the "cost- | simple and backward-compatible approach. Specifically, the "cost- | |||
| mode" of the Path Vector cost type is "array", which indicates the | mode" of the Path Vector cost type is "array", which indicates that | |||
| value is a JSON array. Then, an ALTO client must check the value of | the value is a JSON array. Then, an ALTO client must check the value | |||
| the "cost-metric". If the value is "ane-path", it means that the | of the "cost-metric" parameter. If the value is "ane-path", it means | |||
| JSON array should be further interpreted as a path of ANENames. | that the JSON array should be further interpreted as a path of | |||
| ANENames. | ||||
| The Path Vector cost type is specified in Section 6.5. | The Path Vector cost type is specified in Section 6.5. | |||
| 5.3. Multipart Path Vector Response | 5.3. Multipart Path Vector Response | |||
| For a basic ALTO information resource, a response contains only one | For a basic ALTO information resource, a response contains only one | |||
| type of ALTO resources, e.g., Network Map, Cost Map, or Property Map. | type of ALTO resource, e.g., network map, cost map, or property | |||
| Thus, only one round of communication is required: An ALTO client | map. Thus, only one round of communication is required: an ALTO | |||
| sends a request to an ALTO server, and the ALTO server returns a | client sends a request to an ALTO server, and the ALTO server returns | |||
| response, as shown in Figure 8. | a response, as shown in Figure 8. | |||
| ALTO client ALTO server | ALTO client ALTO server | |||
| |-------------- Request ---------------->| | |-------------- Request ---------------->| | |||
| |<------------- Response ----------------| | |<------------- Response ----------------| | |||
| Figure 8: A Typical ALTO Request and Response | Figure 8: A Typical ALTO Request and Response | |||
| The extension defined in this document, on the other hand, involves | The extension defined in this document, on the other hand, involves | |||
| two types of information resources: Path Vectors conveyed in an | two types of information resources: Path Vectors conveyed in an | |||
| InfoResourceCostMap (defined in Section 11.2.3.6 of [RFC7285]) or an | InfoResourceCostMap data component (defined in Section 11.2.3.6 of | |||
| InfoResourceEndpointCostMap (defined in Section 11.5.1.6 of | [RFC7285]) or an InfoResourceEndpointCostMap data component (defined | |||
| [RFC7285]), and ANE properties conveyed in an InfoResourceProperties | in Section 11.5.1.6 of [RFC7285]), and ANE properties conveyed in an | |||
| (defined in Section 7.6 of [I-D.ietf-alto-unified-props-new]). | InfoResourceProperties data component (defined in Section 7.6 of | |||
| [RFC9240]). | ||||
| Instead of two consecutive message exchanges, the extension defined | Instead of two consecutive message exchanges, the extension defined | |||
| in this document enforces one round of communication. Specifically, | in this document enforces one round of communication. Specifically, | |||
| the ALTO client must include the source and destination pairs and the | the ALTO client must include the source and destination pairs and the | |||
| requested ANE properties in a single request, and the ALTO server | requested ANE properties in a single request, and the ALTO server | |||
| must return a single response containing both the Path Vectors and | must return a single response containing both the Path Vectors and | |||
| properties associated with the ANEs in the Path Vectors, as shown in | properties associated with the ANEs in the Path Vectors, as shown in | |||
| Figure 9. Since the two parts are bundled together in one response | Figure 9. Since the two parts are bundled together in one response | |||
| message, their orders are interchangeable. See Section 7.2.6 and | message, their orders are interchangeable. See Sections 7.2.6 and | |||
| Section 7.3.6 for details. | 7.3.6 for details. | |||
| ALTO client ALTO server | ALTO client ALTO server | |||
| |------------- PV Request -------------->| | |------------- PV Request -------------->| | |||
| |<----- PV Response (Cost Map Part) -----| | |<----- PV Response (Cost Map Part) -----| | |||
| |<--- PV Response (Property Map Part) ---| | |<--- PV Response (Property Map Part) ---| | |||
| Figure 9: The Path Vector Extension Request and Response | Figure 9: The Path Vector Extension Request and Response | |||
| This design is based on the following considerations: | This design is based on the following considerations: | |||
| 1. ANEs may be constructed on demand, and potentially based on the | 1. ANEs may be constructed on demand and, potentially, based on the | |||
| requested properties (See Section 5.1 for more details). If | requested properties (see Section 5.1 for more details). If | |||
| sources and destinations are not in the same request as the | sources and destinations are not in the same request as the | |||
| properties, an ALTO server either cannot construct ANEs on- | properties, an ALTO server either cannot construct ANEs on demand | |||
| demand, or must wait until both requests are received. | or must wait until both requests are received. | |||
| 2. As ANEs may be constructed on demand, mappings of each ANE to its | 2. As ANEs may be constructed on demand, mappings of each ANE to its | |||
| underlying network devices and resources can be specific to the | underlying network devices and resources can be specific to the | |||
| request. In order to respond to the Property Map request | request. In order to respond to the property map request | |||
| correctly, an ALTO server must store the mapping of each Path | correctly, an ALTO server must store the mapping of each Path | |||
| Vector request until the client fully retrieves the property | Vector request until the client fully retrieves the property | |||
| information. The "stateful" behavior may substantially harm the | information. This "stateful" behavior may substantially harm | |||
| server scalability and potentially lead to Denial-of-Service | server scalability and potentially lead to denial-of-service | |||
| attacks. | attacks. | |||
| One approach to realize the one-round communication is to define a | One approach for realizing the one-round communication is to define a | |||
| new media type to contain both objects, but this violates modular | new media type to contain both objects, but this violates modular | |||
| design. This document follows the standard-conforming usage of | design. This document follows the standard-conforming usage of the | |||
| "multipart/related" media type defined in [RFC2387] to elegantly | "multipart/related" media type as defined in [RFC2387] to elegantly | |||
| combine the objects. Path Vectors are encoded in an | combine the objects. Path Vectors are encoded in an | |||
| InfoResourceCostMap or an InfoResourceEndpointCostMap, and the | InfoResourceCostMap data component or InfoResourceEndpointCostMap | |||
| Property Map is encoded in an InfoResourceProperties. They are | data component, and the property map is encoded in an | |||
| encapsulated as parts of a multipart message. The modular | InfoResourceProperties data component. They are encapsulated as | |||
| composition allows ALTO servers and clients to reuse the data models | parts of a multipart message. This modular composition allows ALTO | |||
| of the existing information resources. Specifically, this document | servers and clients to reuse the data models of the existing | |||
| addresses the following practical issues using "multipart/related". | information resources. Specifically, this document addresses the | |||
| following practical issues using "multipart/related". | ||||
| 5.3.1. Identifying the Media Type of the Root Object | 5.3.1. Identifying the Media Type of the Object Root | |||
| ALTO uses media type to indicate the type of an entry in the | ALTO uses a media type to indicate the type of an entry in the IRD | |||
| Information Resource Directory (IRD) (e.g., "application/alto- | (e.g., "application/alto-costmap+json" for the cost map and | |||
| costmap+json" for Cost Map and "application/alto-endpointcost+json" | "application/alto-endpointcost+json" for the Endpoint Cost Service). | |||
| for Endpoint Cost Service). Simply putting "multipart/related" as | Simply using "multipart/related" as the media type, however, makes it | |||
| the media type, however, makes it impossible for an ALTO client to | impossible for an ALTO client to identify the type of service | |||
| identify the type of service provided by related entries. | provided by related entries. | |||
| To address this issue, this document uses the "type" parameter to | To address this issue, this document uses the "type" parameter to | |||
| indicate the root object of a multipart/related message. For a Cost | indicate the object root of a multipart/related message. For a cost | |||
| Map resource, the "media-type" field in the IRD entry is "multipart/ | map resource, the "media-type" field in the IRD entry is "multipart/ | |||
| related" with the parameter "type=application/alto-costmap+json"; for | related" with the parameter "type=application/alto-costmap+json"; for | |||
| an Endpoint Cost Service, the parameter is "type=application/alto- | an Endpoint Cost Service, the parameter is "type=application/alto- | |||
| endpointcost+json". | endpointcost+json". | |||
| 5.3.2. References to Part Messages | 5.3.2. References to Part Messages | |||
| As the response of a Path Vector resource is a multipart message with | As the response of a Path Vector resource is a multipart message with | |||
| two different parts, it is important that each part can be uniquely | two different parts, it is important that each part can be uniquely | |||
| identified. Following the designs of [RFC8895], this extension | identified. Following the design provided in [RFC8895], this | |||
| requires that an ALTO server assigns a unique identifier to each part | extension requires that an ALTO server assign a unique identifier to | |||
| of the multipart response message. This identifier, referred to as a | each part of the multipart response message. This identifier, | |||
| Part Resource ID (See Section 6.6 for details), is present in the | referred to as a Part Resource ID (see Section 6.6 for details), is | |||
| part message's "Content-ID" header. By concatenating the Part | present in the part message's "Content-ID" header field. By | |||
| Resource ID to the identifier of the Path Vector request, an ALTO | concatenating the Part Resource ID to the identifier of the Path | |||
| server/client can uniquely identify the Path Vector Part or the | Vector request, an ALTO server/client can uniquely identify the Path | |||
| Property Map part. | Vector part or the property map part. | |||
| 6. Specification: Basic Data Types | 6. Specification: Basic Data Types | |||
| 6.1. ANE Name | 6.1. ANE Name | |||
| An ANE Name is encoded as a JSON string with the same format as that | An ANE name is encoded as a JSON string with the same format as that | |||
| of the type PIDName (Section 10.1 of [RFC7285]). | of the type PIDName (Section 10.1 of [RFC7285]). | |||
| The type ANEName is used in this document to indicate a string of | The type ANEName is used in this document to indicate a string of | |||
| this format. | this format. | |||
| 6.2. ANE Entity Domain | 6.2. ANE Entity Domain | |||
| The ANE entity domain associates property values with the Abstract | The ANE entity domain associates property values with the ANEs in a | |||
| Network Elements in a Property Map. Accordingly, the ANE entity | property map. Accordingly, the ANE entity domain always depends on a | |||
| domain always depends on a Property Map. | property map. | |||
| It must be noted that the term "domain" here does not refer to a | It must be noted that the term "domain" here does not refer to a | |||
| network domain. Rather, it is inherited from the "entity domain" | network domain. Rather, it is inherited from the entity domain as | |||
| defined in Sec 3.2 in [I-D.ietf-alto-unified-props-new] that | defined in Section 3.2 of [RFC9240]; the entity domain represents the | |||
| represents the set of valid entities defined by an ALTO information | set of valid entities defined by an ALTO information resource (called | |||
| resource (called the defining information resource). | the "defining information resource"). | |||
| 6.2.1. Entity Domain Type | 6.2.1. Entity Domain Type | |||
| The Entity Domain Type is "ane". | The entity domain type is "ane". | |||
| 6.2.2. Domain-Specific Entity Identifier | 6.2.2. Domain-Specific Entity Identifier | |||
| The entity identifiers are the ANE Names in the associated Property | The entity identifiers are the ANE names in the associated property | |||
| Map. | map. | |||
| 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 | |||
| ANEs. | ANEs. | |||
| 6.2.4. Media Type of Defining Resource | 6.2.4. Media Type of Defining Resource | |||
| The defining resource for entity domain type "ane" MUST be a Property | The defining resource for entity domain type "ane" MUST be a property | |||
| Map, i.e., the media type of defining resources is: | map, i.e., the media type of defining resources is: | |||
| application/alto-propmap+json | application/alto-propmap+json | |||
| Specifically, for ephemeral ANEs that appear in a Path Vector | Specifically, for ephemeral ANEs that appear in a Path Vector | |||
| response, their entity domain names MUST be exactly ".ane" and the | response, their entity domain names MUST be exactly ".ane", and the | |||
| defining resource of these ANEs is the Property Map part of the | defining resource of these ANEs is the property map part of the | |||
| multipart response. Meanwhile, for any persistent ANE whose defining | multipart response. Meanwhile, for any persistent ANE whose defining | |||
| resource is a Property Map resource, its entity domain name MUST have | resource is a property map resource, its entity domain name MUST have | |||
| the format of "PROPMAP.ane" where PROPMAP is the resource ID of the | the format of "PROPMAP.ane", where PROPMAP is the resource ID of the | |||
| defining resource. Persistent entities are "persistent" because | defining resource. Persistent entities are "persistent" because | |||
| standalone queries can be made by an ALTO client to their defining | standalone queries can be made by an ALTO client to their defining | |||
| resource(s) when the connection to the Path Vector service is closed. | resource(s) when the connection to the Path Vector service is closed. | |||
| For example, the defining resource of an ephemeral ANE whose entity | For example, the defining resource of an ephemeral ANE whose entity | |||
| identifier is ".ane:NET1" is the Property Map part that contains this | identifier is ".ane:NET1" is the property map part that contains this | |||
| identifier. The defining resource of a persistent ANE whose entity | identifier. The defining resource of a persistent ANE whose entity | |||
| identifier is "dc-props.ane:DC1" is the Property Map with the | identifier is "dc-props.ane:DC1" is the property map with the | |||
| resource ID "dc-props". | resource ID "dc-props". | |||
| 6.3. ANE Property Name | 6.3. ANE Property Name | |||
| An ANE Property Name is encoded as a JSON string with the same format | An ANE property name is encoded as a JSON string with the same format | |||
| as that of Entity Property Name (Section 5.2.2 of | as that of an entity property name (Section 5.2.2 of [RFC9240]). | |||
| [I-D.ietf-alto-unified-props-new]). | ||||
| 6.4. Initial ANE Property Types | 6.4. Initial ANE Property Types | |||
| Two initial ANE property types are specified, "max-reservable- | Two initial ANE property types are specified: "max-reservable- | |||
| bandwidth" and "persistent-entity-id". | bandwidth" and "persistent-entity-id". | |||
| Note that these property types do not depend on any information | Note that these property types do not depend on any information | |||
| resource. As such, the EntityPropertyName MUST only have the | resources. As such, the "EntityPropertyName" parameter MUST only | |||
| EntityPropertyType part. | have the EntityPropertyType part. | |||
| 6.4.1. Maximum Reservable Bandwidth | 6.4.1. Maximum Reservable Bandwidth | |||
| The maximum reservable bandwidth property ("max-reservable- | The maximum reservable bandwidth property ("max-reservable- | |||
| bandwidth") stands for the maximum bandwidth that can be reserved for | bandwidth") stands for the maximum bandwidth that can be reserved for | |||
| all the traffic that traverses an ANE. The value MUST be encoded as | all the traffic that traverses an ANE. The value MUST be encoded as | |||
| a non-negative numerical cost value as defined in Section 6.1.2.1 of | a non-negative numerical cost value as defined in Section 6.1.2.1 of | |||
| [RFC7285] and the unit is bit per second (bps). If this property is | [RFC7285], and the unit is bits per second (bps). If this property | |||
| requested by the ALTO client but not present for an ANE in the server | is requested by the ALTO client but is not present for an ANE in the | |||
| response, it MUST be interpreted as that the property is not defined | server response, it MUST be interpreted as meaning that the property | |||
| for the ANE. | is not defined for the ANE. | |||
| This property can be offered in a setting where the ALTO server is | This property can be offered in a setting where the ALTO server is | |||
| part of a network system that provides on-demand resource allocation | part of a network system that provides on-demand resource allocation | |||
| and the ALTO client is part of a user application. One existing | and the ALTO client is part of a user application. One existing | |||
| example is [NOVA]: the ALTO server is part of an SDN controller and | example is [NOVA]: the ALTO server is part of a Software-Defined | |||
| exposes a list of traversed network elements and associated link | Networking (SDN) controller and exposes a list of traversed network | |||
| bandwidth to the client. The encoding in [NOVA] differs from the | elements and associated link bandwidth to the client. The encoding | |||
| Path Vector response defined in this document that the Path Vector | in [NOVA] differs from the Path Vector response defined in this | |||
| part and Property Map part are put in the same JSON object. | document in that the Path Vector part and property map part are | |||
| placed in the same JSON object. | ||||
| In such a framework, the ALTO server exposes resource (e.g., | In such a framework, the ALTO server exposes resource availability | |||
| reservable bandwidth) availability information to the ALTO client. | information (e.g., reservable bandwidth) to the ALTO client. How the | |||
| How the client makes resource requests based on the information and | client makes resource requests based on the information, and how the | |||
| how the resource allocation is achieved respectively depend on | resource allocation is achieved, respectively, depend on interfaces | |||
| interfaces between the management system and the users or a higher- | between the management system and the users or a higher-layer | |||
| layer protocol (e.g., SDN network intents or MPLS tunnels), which are | protocol (e.g., SDN network intents [INTENT-BASED-NETWORKING] or MPLS | |||
| out of the scope of this document. | tunnels), which are out of scope for this document. | |||
| 6.4.2. Persistent Entity ID | 6.4.2. Persistent Entity ID | |||
| The persistent entity ID property is the entity identifier of the | This document enables the discovery of a persistent ANE by exposing | |||
| persistent ANE which an ephemeral ANE presents (See Section 5.1.2 for | its entity identifier as the persistent entity ID property of an | |||
| details). The value of this property is encoded with the format | ephemeral ANE in the path vector response. The value of this | |||
| EntityID defined in Section 5.1.3 of | property is encoded with the EntityID format defined in Section 5.1.3 | |||
| [I-D.ietf-alto-unified-props-new]. | of [RFC9240]. | |||
| In this format, the entity ID combines: | In this format, the entity ID combines: | |||
| * a defining information resource for the ANE on which a | * a defining information resource for the ANE on which a | |||
| "persistent-entity-id" is queried, which is the Property Map | "persistent-entity-id" is queried, which is the property map | |||
| resource defining the ANE as a persistent entity, together with | resource defining the ANE as a persistent entity, together with | |||
| the properties; | the properties. | |||
| * the persistent name of the ANE in that Property Map. | * the persistent name of the ANE in that property map. | |||
| With this format, the client has all the needed information for | With this format, the client has all the needed information for | |||
| further standalone query properties on the persistent ANE. | further standalone query properties on the persistent ANE. | |||
| 6.4.3. Examples | 6.4.3. Examples | |||
| To illustrate the use of "max-reservable-bandwidth", consider the | To illustrate the use of "max-reservable-bandwidth", consider the | |||
| following network with 5 nodes. Assume the client wants to query the | following network with five nodes. Assume that the client wants to | |||
| maximum reservable bandwidth from H1 to H2. An ALTO server may split | query the maximum reservable bandwidth from H1 to H2. An ALTO server | |||
| the network into two ANEs: "ane1" that represents the subnetwork with | may split the network into two ANEs: "ane1", which represents the | |||
| routers A, B, and C, and "ane2" that represents the subnetwork with | subnetwork with routers A, B, and C; and "ane2", which represents the | |||
| routers B, D and E. The maximum reservable bandwidth for "ane1" is | subnetwork with routers B, D, and E. The maximum reservable | |||
| 15 Mbps (using path A->C->B) and the maximum reservable bandwidth for | bandwidth for "ane1" is 15 Mbps (using path A->C->B), and the maximum | |||
| "ane2" is 20 Mbps (using path B->D->E). | reservable bandwidth for "ane2" is 20 Mbps (using path B->D->E). | |||
| 20 Mbps 20 Mbps | 20 Mbps 20 Mbps | |||
| 10 Mbps +---+ +---+ +---+ | 10 Mbps +---+ +---+ +---+ | |||
| /----| B |---| D |----| E |---- H2 | /----| B |---| D |----| E |---- H2 | |||
| +---+/ +---+ +---+ +---+ | +---+/ +---+ +---+ +---+ | |||
| H1 ----| A | 15 Mbps| | H1 ----| A | 15 Mbps| | |||
| +---+\ +---+ | +---+\ +---+ | |||
| \----| C | | \----| C | | |||
| 15 Mbps +---+ | 15 Mbps +---+ | |||
| To illustrate the use of "persistent-entity-id", consider the | To illustrate the use of "persistent-entity-id", consider the | |||
| scenario in Figure 6. As the life cycle of service edges are | scenario in Figure 6. As the life cycles of service edges are | |||
| typically long, they may contain information that is not specific to | typically long, the service edges may contain information that is not | |||
| the query. Such information can be stored in an individual unified | specific to the query. Such information can be stored in an | |||
| property map and later be accessed by an ALTO client. | individual entity property map and can later be accessed by an ALTO | |||
| client. | ||||
| For example, "ane1" in Figure 7 represents the on-premise service | For example, "ane1" in Figure 7 represents the on-premise service | |||
| edge closest to host a. Assume the properties of the service edges | edge closest to host "a". Assume that the properties of the service | |||
| are provided in a unified property map called "se-props" and the ID | edges are provided in an entity property map called "se-props" and | |||
| of the on-premise service edge is "9a0b55f7-7442-4d56-8a2c- | the ID of the on-premise service edge is "9a0b55f7-7442-4d56-8a2c- | |||
| b4cc6a8e3aa1", the "persistent-entity-id" of "ane1" will be "se- | b4cc6a8e3aa1"; the "persistent-entity-id" setting for "ane1" will be | |||
| props.ane:9a0b55f7-7442-4d56-8a2c-b4cc6a8e3aa1". With this | "se-props.ane:9a0b55f7-7442-4d56-8a2c-b4cc6a8e3aa1". With this | |||
| persistent entity ID, an ALTO client may send queries to the "se- | persistent entity ID, an ALTO client may send queries to the "se- | |||
| props" resource with the entity ID ".ane:9a0b55f7-7442-4d56-8a2c- | props" resource with the entity ID ".ane:9a0b55f7-7442-4d56-8a2c- | |||
| b4cc6a8e3aa1". | b4cc6a8e3aa1". | |||
| 6.5. Path Vector Cost Type | 6.5. Path Vector Cost Type | |||
| This document defines a new cost type, which is referred to as the | This document defines a new cost type, which is referred to as the | |||
| Path Vector cost type. An ALTO server MUST offer this cost type if | Path Vector cost type. An ALTO server MUST offer this cost type if | |||
| it supports the extension defined in this document. | it supports the extension defined in this document. | |||
| 6.5.1. Cost Metric: ane-path | 6.5.1. Cost Metric: "ane-path" | |||
| The cost metric "ane-path" indicates the value of such a cost type | The cost metric "ane-path" indicates that the value of such a cost | |||
| conveys an array of ANE names, where each ANE name uniquely | type conveys an array of ANE names, where each ANE name uniquely | |||
| represents an ANE traversed by traffic from a source to a | represents an ANE traversed by traffic from a source to a | |||
| destination. | destination. | |||
| An ALTO client MUST interpret the Path Vector as if the traffic | An ALTO client MUST interpret the Path Vector as if the traffic | |||
| between a source and a destination logically traverses the ANEs in | between a source and a destination logically traverses the ANEs in | |||
| the same order as they appear in the Path Vector. | the same order as they appear in the Path Vector. | |||
| When the Path Vector procedures defined in this document are in use, | When the Path Vector procedures defined in this document are in use, | |||
| an ALTO server using the "ane-path" cost metric and the "array" cost | an ALTO server using the "ane-path" cost metric and the "array" cost | |||
| mode (see Section 6.5.2) MUST return as the cost value a JSON array | mode (see Section 6.5.2) MUST return as the cost value a JSON array | |||
| of ANEName and the client MUST also check that each element contained | of data type ANEName, and the client MUST also check that each | |||
| in the array is an ANEName (Section 6.1). Otherwise, the client MUST | element contained in the array is an ANEName (Section 6.1). | |||
| discard the response and SHOULD follow the instructions in | Otherwise, the client MUST discard the response and SHOULD follow the | |||
| Section 8.3.4.3 of [RFC7285] to handle the error. | guidance in Section 8.3.4.3 of [RFC7285] to handle the error. | |||
| 6.5.2. Cost Mode: array | 6.5.2. Cost Mode: "array" | |||
| The cost mode "array" indicates that every cost value in the response | The cost mode "array" indicates that every cost value in the response | |||
| body of a (Filtered) Cost Map or an Endpoint Cost Service MUST be | body of a (filtered) cost map or an Endpoint Cost Service MUST be | |||
| interpreted as a JSON array object. While this cost mode can be | interpreted as a JSON array object. While this cost mode can be | |||
| applied to all cost metrics, additional specifications will be needed | applied to all cost metrics, additional specifications will be needed | |||
| to clarify the semantics of the array cost mode when combined with | to clarify the semantics of the "array" cost mode when combined with | |||
| cost metrics other than 'ane-path'. | cost metrics other than "ane-path". | |||
| 6.6. Part Resource ID and Part Content ID | 6.6. Part Resource ID and Part Content ID | |||
| A Part Resource ID is encoded as a JSON string with the same format | A Part Resource ID is encoded as a JSON string with the same format | |||
| as that of the type ResourceID (Section 10.2 of [RFC7285]). | as that of the type ResourceID (Section 10.2 of [RFC7285]). | |||
| Even though the client-id assigned to a Path Vector request and the | Even though the "client-id" assigned to a Path Vector request and the | |||
| Part Resource ID MAY contain up to 64 characters by their own | Part Resource ID MAY contain up to 64 characters by their own | |||
| definition, their concatenation (see Section 5.3.2) MUST also conform | definition, their concatenation (see Section 5.3.2) MUST also conform | |||
| to the same length constraint. The same requirement applies to the | to the same length constraint. The same requirement applies to the | |||
| resource ID of the Path Vector resource, too. Thus, it is | resource ID of the Path Vector resource, too. Thus, it is | |||
| RECOMMENDED to limit the length of resource ID and client ID related | RECOMMENDED to limit the length of the resource ID and client ID | |||
| to a Path Vector resource to 31 characters. | related to a Path Vector resource to 31 characters. | |||
| A Part Content ID conforms to the format of msg-id as specified in | A Part Content ID conforms to the format of "msg-id" as specified in | |||
| [RFC2387] and [RFC5322]. Specifically, it has the following format: | [RFC2387] and [RFC5322]. Specifically, it has the following format: | |||
| "<" PART-RESOURCE-ID "@" DOMAIN-NAME ">" | "<" PART-RESOURCE-ID "@" DOMAIN-NAME ">" | |||
| PART-RESOURCE-ID: PART-RESOURCE-ID has the same format as the Part | PART-RESOURCE-ID: PART-RESOURCE-ID has the same format as the Part | |||
| Resource ID. It is used to identify whether a part message is a | Resource ID. It is used to identify whether a part message is a | |||
| Path Vector or a Property Map. | Path Vector or a property map. | |||
| DOMAIN-NAME: DOMAIN-NAME has the same format as dot-atom-text | DOMAIN-NAME: DOMAIN-NAME has the same format as "dot-atom-text" as | |||
| specified in Section 3.2.3 of [RFC5322]. It must be the domain | specified in Section 3.2.3 of [RFC5322]. It must be the domain | |||
| name of the ALTO server. | name of the ALTO server. | |||
| 7. Specification: Service Extensions | 7. Specification: Service Extensions | |||
| 7.1. Notations | 7.1. Notation | |||
| This document uses the same syntax and notations as introduced in | This document uses the same syntax and notation as those introduced | |||
| Section 8.2 of RFC 7285 [RFC7285] to specify the extensions to | in Section 8.2 of [RFC7285] to specify the extensions to existing | |||
| existing ALTO resources and services. | ALTO resources and services. | |||
| 7.2. Multipart Filtered Cost Map for Path Vector | 7.2. Multipart Filtered Cost Map for Path Vector | |||
| This document introduces a new ALTO resource called multipart | This document introduces a new ALTO resource called the "multipart | |||
| Filtered Cost Map resource, which allows an ALTO server to provide | filtered cost map resource", which allows an ALTO server to provide | |||
| other ALTO resources associated with the Cost Map resource in the | other ALTO resources associated with the cost map resource in the | |||
| same response. | same response. | |||
| 7.2.1. Media Type | 7.2.1. Media Type | |||
| The media type of the multipart Filtered Cost Map resource is | The media type of the multipart filtered cost map resource is | |||
| "multipart/related" and the required "type" parameter MUST have a | "multipart/related", and the required "type" parameter MUST have a | |||
| value of "application/alto-costmap+json". | value of "application/alto-costmap+json". | |||
| 7.2.2. HTTP Method | 7.2.2. HTTP Method | |||
| The multipart Filtered Cost Map is requested using the HTTP POST | The multipart filtered cost map is requested using the HTTP POST | |||
| method. | method. | |||
| 7.2.3. Accept Input Parameters | 7.2.3. Accept Input Parameters | |||
| The input parameters of the multipart Filtered Cost Map are supplied | The input parameters of the multipart filtered cost map are supplied | |||
| in the body of an HTTP POST request. This document extends the input | in the body of an HTTP POST request. This document extends the input | |||
| parameters to a Filtered Cost Map, which is defined as a JSON object | parameters to a filtered cost map, which is defined as a JSON object | |||
| of type ReqFilteredCostMap in Section 4.1.2 of RFC 8189 [RFC8189], | of type ReqFilteredCostMap in Section 4.1.2 of [RFC8189], with a data | |||
| with a data format indicated by the media type "application/alto- | format indicated by the media type "application/alto- | |||
| costmapfilter+json", which is a JSON object of type | costmapfilter+json", which is a JSON object of type | |||
| PVReqFilteredCostMap: | PVReqFilteredCostMap: | |||
| object { | object { | |||
| [EntityPropertyName ane-property-names<0..*>;] | [EntityPropertyName ane-property-names<0..*>;] | |||
| } PVReqFilteredCostMap : ReqFilteredCostMap; | } PVReqFilteredCostMap : ReqFilteredCostMap; | |||
| with fields: | with field: | |||
| ane-property-names: A list of selected ANE properties to be included | ane-property-names: This field provides a list of selected ANE | |||
| in the response. Each property in this list MUST match one of the | properties to be included in the response. Each property in this | |||
| supported ANE properties indicated in the resource's "ane- | list MUST match one of the supported ANE properties indicated in | |||
| property-names" capability (Section 7.2.4). If the field is not | the resource's "ane-property-names" capability (Section 7.2.4). | |||
| present, it MUST be interpreted as an empty list. | If the field is not present, it MUST be interpreted as an empty | |||
| list. | ||||
| Example: Consider the network in Figure 1. If an ALTO client wants | Example: Consider the network in Figure 1. If an ALTO client wants | |||
| to query the "max-reservable-bandwidth" between PID1 and PID2, it can | to query the "max-reservable-bandwidth" setting between PID1 and | |||
| submit the following request. | PID2, it can submit the following request. | |||
| POST /costmap/pv HTTP/1.1 | POST /costmap/pv HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: multipart/related;type=application/alto-costmap+json, | Accept: multipart/related;type=application/alto-costmap+json, | |||
| application/alto-error+json | application/alto-error+json | |||
| Content-Length: 201 | Content-Length: 212 | |||
| Content-Type: application/alto-costmapfilter+json | Content-Type: application/alto-costmapfilter+json | |||
| { | { | |||
| "cost-type": { | "cost-type": { | |||
| "cost-mode": "array", | "cost-mode": "array", | |||
| "cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
| }, | }, | |||
| "pids": { | "pids": { | |||
| "srcs": [ "PID1" ], | "srcs": [ "PID1" ], | |||
| "dsts": [ "PID2" ] | "dsts": [ "PID2" ] | |||
| }, | }, | |||
| "ane-property-names": [ "max-reservable-bandwidth" ] | "ane-property-names": [ "max-reservable-bandwidth" ] | |||
| } | } | |||
| 7.2.4. Capabilities | 7.2.4. Capabilities | |||
| The multipart Filtered Cost Map resource extends the capabilities | The multipart filtered cost map resource extends the capabilities | |||
| defined in Section 4.1.1 of [RFC8189]. The capabilities are defined | defined in Section 4.1.1 of [RFC8189]. The capabilities are defined | |||
| by a JSON object of type PVFilteredCostMapCapabilities: | by a JSON object of type PVFilteredCostMapCapabilities: | |||
| object { | object { | |||
| [EntityPropertyName ane-property-names<0..*>;] | [EntityPropertyName ane-property-names<0..*>;] | |||
| } PVFilteredCostMapCapabilities : FilteredCostMapCapabilities; | } PVFilteredCostMapCapabilities : FilteredCostMapCapabilities; | |||
| with fields: | with field: | |||
| ane-property-names: Defines a list of ANE properties that can be | ane-property-names: This field provides a list of ANE properties | |||
| returned. If the field is not present, it MUST be interpreted as | that can be returned. If the field is not present, it MUST be | |||
| an empty list, indicating the ALTO server cannot provide any ANE | interpreted as an empty list, indicating that the ALTO server | |||
| property. | cannot provide any ANE properties. | |||
| This extension also introduces additional restrictions for the | This extension also introduces additional restrictions for the | |||
| following fields: | following fields: | |||
| cost-type-names: The "cost-type-names" field MUST include the Path | cost-type-names: The "cost-type-names" field MUST include the Path | |||
| Vector cost type, unless explicitly documented by a future | Vector cost type, unless explicitly documented by a future | |||
| extension. This also implies that the Path Vector cost type MUST | extension. This also implies that the Path Vector cost type MUST | |||
| be defined in the "cost-types" of the Information Resource | be defined in the "cost-types" of the IRD's "meta" field. | |||
| Directory's "meta" field. | ||||
| cost-constraints: If the "cost-type-names" field includes the Path | cost-constraints: If the "cost-type-names" field includes the Path | |||
| Vector cost type, "cost-constraints" field MUST be "false" or not | Vector cost type, the "cost-constraints" field MUST be either | |||
| present unless specifically instructed by a future document. | "false" or not present, unless specifically instructed by a future | |||
| document. | ||||
| testable-cost-type-names (Section 4.1.1 of [RFC8189]): If the "cost- | testable-cost-type-names (Section 4.1.1 of [RFC8189]): If the "cost- | |||
| type-names" field includes the Path Vector cost type and the | type-names" field includes the Path Vector cost type and the | |||
| "testable-cost-type-names" field is present, the Path Vector cost | "testable-cost-type-names" field is present, the Path Vector cost | |||
| type MUST NOT be included in the "testable-cost-type-names" field | type MUST NOT be included in the "testable-cost-type-names" field | |||
| unless specifically instructed by a future document. | unless specifically instructed by a future document. | |||
| 7.2.5. Uses | 7.2.5. Uses | |||
| This member MUST include the resource ID of the network map based on | This member MUST include the resource ID of the network map based on | |||
| which the PIDs are defined. If this resource supports "persistent- | which the PIDs are defined. If this resource supports "persistent- | |||
| entity-id", it MUST also include the defining resources of persistent | entity-id", it MUST also include the defining resources of persistent | |||
| ANEs that may appear in the response. | ANEs that may appear in the response. | |||
| 7.2.6. Response | 7.2.6. 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. | |||
| The "Content-Type" header of the response MUST be "multipart/related" | The "Content-Type" header field of the response MUST be "multipart/ | |||
| as defined by [RFC2387] with the following parameters: | related" as defined by [RFC2387], with the following parameters: | |||
| type: The type parameter is mandatory and MUST be "application/alto- | type: The "type" parameter is mandatory and MUST be "application/ | |||
| costmap+json". Note that [RFC2387] permits both parameters with | alto-costmap+json". Note that [RFC2387] permits parameters both | |||
| and without the double quotes. | with and without double quotes. | |||
| start: The start parameter is as defined in [RFC2387] and is | start: The "start" parameter is as defined in [RFC2387] and is | |||
| optional. If present, it MUST have the same value as the | optional. If present, it MUST have the same value as the | |||
| "Content-ID" header of the Path Vector part. | "Content-ID" header field of the Path Vector part. | |||
| boundary: The boundary parameter is as defined in Section 5.1.1 of | boundary: The "boundary" parameter is as defined in Section 5.1.1 of | |||
| [RFC2046] and is mandatory. | [RFC2046] and is mandatory. | |||
| The body of the response MUST consist of two parts: | The body of the response MUST consist of two parts: | |||
| * The Path Vector part MUST include "Content-ID" and "Content-Type" | * The Path Vector part MUST include "Content-ID" and "Content-Type" | |||
| in its header. The "Content-Type" MUST be "application/alto- | in its header. The "Content-Type" MUST be "application/alto- | |||
| costmap+json". The value of "Content-ID" MUST have the same | costmap+json". The value of "Content-ID" MUST have the same | |||
| format as the Part Content ID as specified in Section 6.6. | format as the Part Content ID as specified in Section 6.6. | |||
| The body of the Path Vector part MUST be a JSON object with the | The body of the Path Vector part MUST be a JSON object with the | |||
| same format as defined in Section 11.2.3.6 of [RFC7285] when the | same format as that defined in Section 11.2.3.6 of [RFC7285] when | |||
| "cost-type" field is present in the input parameters and MUST be a | the "cost-type" field is present in the input parameters and MUST | |||
| JSON object with the same format as defined in Section 4.1.3 of | be a JSON object with the same format as that defined in | |||
| [RFC8189] if the "multi-cost-types" field is present. The JSON | Section 4.1.3 of [RFC8189] if the "multi-cost-types" field is | |||
| object MUST include the "vtag" field in the "meta" field, which | present. The JSON object MUST include the "vtag" field in the | |||
| provides the version tag of the returned CostMapData. The | "meta" field, which provides the version tag of the returned | |||
| resource ID of the version tag MUST follow the format of | CostMapData object. The resource ID of the version tag MUST | |||
| follow the format of | ||||
| resource-id '.' part-resource-id | resource-id '.' part-resource-id | |||
| where "resource-id" is the resource Id of the Path Vector | where "resource-id" is the resource ID of the Path Vector resource | |||
| resource, and "part-resource-id" has the same value as the PART- | and "part-resource-id" has the same value as the PART-RESOURCE-ID | |||
| RESOURCE-ID in the "Content-ID" of the Path Vector part. The | in the "Content-ID" of the Path Vector part. The "meta" field | |||
| "meta" field MUST also include the "dependent-vtags" field, whose | MUST also include the "dependent-vtags" field, whose value is a | |||
| value is a single-element array to indicate the version tag of the | single-element array to indicate the version tag of the network | |||
| network map used, where the network map is specified in the "uses" | map used, where the network map is specified in the "uses" | |||
| attribute of the multipart Filtered Cost Map resource in IRD. | attribute of the multipart filtered cost map resource in the IRD. | |||
| * The Unified Property Map part MUST also include "Content-ID" and | * The entity property map part MUST also include "Content-ID" and | |||
| "Content-Type" in its header. The "Content-Type" MUST be | "Content-Type" in its header. The "Content-Type" MUST be | |||
| "application/alto-propmap+json". The value of "Content-ID" MUST | "application/alto-propmap+json". The value of "Content-ID" MUST | |||
| have the same format as the Part Content ID as specified in | have the same format as the Part Content ID as specified in | |||
| Section 6.6. | Section 6.6. | |||
| The body of the Unified Property Map part is a JSON object with | The body of the entity property map part is a JSON object with the | |||
| the same format as defined in Section 7.6 of | same format as that defined in Section 7.6 of [RFC9240]. The JSON | |||
| [I-D.ietf-alto-unified-props-new]. The JSON object MUST include | object MUST include the "dependent-vtags" field in the "meta" | |||
| the "dependent-vtags" field in the "meta" field. The value of the | field. The value of the "dependent-vtags" field MUST be an array | |||
| "dependent-vtags" field MUST be an array of VersionTag objects as | of VersionTag objects as defined by Section 10.3 of [RFC7285]. | |||
| defined by Section 10.3 of [RFC7285]. The "vtag" of the Path | The "vtag" of the Path Vector part MUST be included in the | |||
| Vector part MUST be included in the "dependent-vtags". If | "dependent-vtags" field. If "persistent-entity-id" is requested, | |||
| "persistent-entity-id" is requested, the version tags of the | the version tags of the dependent resources that may expose the | |||
| dependent resources that may expose the entities in the response | entities in the response MUST also be included. | |||
| MUST also be included. | ||||
| The PropertyMapData has one member for each ANEName that appears | The PropertyMapData object has one member for each ANEName that | |||
| in the Path Vector part, which is an entity identifier belonging | appears in the Path Vector part, which is an entity identifier | |||
| to the self-defined entity domain as defined in Section 5.1.2.3 of | belonging to the self-defined entity domain as defined in | |||
| [I-D.ietf-alto-unified-props-new]. The EntityProps for each ANE | Section 5.1.2.3 of [RFC9240]. The EntityProps object for each ANE | |||
| has one member for each property that is both 1) associated with | has one member for each property that is both 1) associated with | |||
| the ANE, and 2) specified in the "ane-property-names" in the | the ANE and 2) specified in the "ane-property-names" field in the | |||
| request. If the Path Vector cost type is not included in the | request. If the Path Vector cost type is not included in the | |||
| "cost-type" field or the "multi-cost-type" field, the "property- | "cost-type" field or the "multi-cost-type" field, the "property- | |||
| map" field MUST be present and the value MUST be an empty object | map" field MUST be present and the value MUST be an empty object | |||
| ({}). | ({}). | |||
| A complete and valid response MUST include both the Path Vector part | A complete and valid response MUST include both the Path Vector part | |||
| and the Property Map part in the multipart message. If any part is | and the property map part in the multipart message. If any part is | |||
| NOT present, the client MUST discard the received information and | *not* present, the client MUST discard the received information and | |||
| send another request if necessary. | send another request if necessary. | |||
| According to [RFC2387], the Path Vector part, whose media type is the | The Path Vector part, whose media type is the same as the "type" | |||
| same as the "type" parameter of the multipart response message, is | parameter of the multipart response message, is the root body part as | |||
| the root object. Thus, it is the element the application processes | defined in [RFC2387]. Thus, it is the element that the application | |||
| first. Even though the "start" parameter allows it to be placed | processes first. Even though the "start" parameter allows it to be | |||
| anywhere in the part sequence, it is RECOMMENDED that the parts | placed anywhere in the part sequence, it is RECOMMENDED that the | |||
| arrive in the same order as they are processed, i.e., the Path Vector | parts arrive in the same order as they are processed, i.e., the Path | |||
| part is always put as the first part, followed by the Property Map | Vector part is always placed as the first part, followed by the | |||
| part. When doing so, an ALTO server MAY choose not to set the | property map part. When doing so, an ALTO server MAY choose not to | |||
| "start" parameter, which implies the first part is the root object. | set the "start" parameter, which implies that the first part is the | |||
| object root. | ||||
| Example: Consider the network in Figure 1. The response of the | Example: Consider the network in Figure 1. The response to the | |||
| example request in Section 7.2.3 is as follows, where "ANE1" | example request in Section 7.2.3 is as follows, where "ANE1" | |||
| represents the aggregation of all the switches in the network. | represents the aggregation of all the switches in the network. | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: 859 | Content-Length: 911 | |||
| Content-Type: multipart/related; boundary=example-1; | Content-Type: multipart/related; boundary=example-1; | |||
| type=application/alto-costmap+json | type=application/alto-costmap+json | |||
| --example-1 | --example-1 | |||
| Content-ID: <costmap@alto.example.com> | Content-ID: <costmap@alto.example.com> | |||
| Content-Type: application/alto-costmap+json | Content-Type: application/alto-costmap+json | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "vtag": { | "vtag": { | |||
| skipping to change at page 33, line 29 ¶ | skipping to change at line 1401 ¶ | |||
| }, | }, | |||
| "dependent-vtags": [ | "dependent-vtags": [ | |||
| { | { | |||
| "resource-id": "my-default-networkmap", | "resource-id": "my-default-networkmap", | |||
| "tag": "75ed013b3cb58f896e839582504f6228" | "tag": "75ed013b3cb58f896e839582504f6228" | |||
| } | } | |||
| ], | ], | |||
| "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" } | "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" } | |||
| }, | }, | |||
| "cost-map": { | "cost-map": { | |||
| "PID1": { "PID2": ["ANE1"] } | "PID1": { "PID2": [ "ANE1" ] } | |||
| } | } | |||
| } | } | |||
| --example-1 | --example-1 | |||
| Content-ID: <propmap@alto.example.com> | Content-ID: <propmap@alto.example.com> | |||
| Content-Type: application/alto-propmap+json | Content-Type: application/alto-propmap+json | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "dependent-vtags": [ | "dependent-vtags": [ | |||
| { | { | |||
| "resource-id": "filtered-cost-map-pv.costmap", | "resource-id": "filtered-cost-map-pv.costmap", | |||
| "tag": "fb20b76204814e9db37a51151faaaef2" | "tag": "fb20b76204814e9db37a51151faaaef2" | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "property-map": { | "property-map": { | |||
| ".ane:ANE1": { "max-reservable-bandwidth": 100000000 } | ".ane:ANE1": { "max-reservable-bandwidth": 100000000 } | |||
| } | } | |||
| } | } | |||
| --example-1 | ||||
| 7.3. Multipart Endpoint Cost Service for Path Vector | 7.3. Multipart Endpoint Cost Service for Path Vector | |||
| This document introduces a new ALTO resource called multipart | This document introduces a new ALTO resource called the "multipart | |||
| Endpoint Cost Service, which allows an ALTO server to provide other | Endpoint Cost Service", which allows an ALTO server to provide other | |||
| ALTO resources associated with the Endpoint Cost Service resource in | ALTO resources associated with the Endpoint Cost Service resource in | |||
| the same response. | the same response. | |||
| 7.3.1. Media Type | 7.3.1. Media Type | |||
| The media type of the multipart Endpoint Cost Service resource is | The media type of the multipart Endpoint Cost Service resource is | |||
| "multipart/related" and the required "type" parameter MUST have a | "multipart/related", and the required "type" parameter MUST have a | |||
| value of "application/alto-endpointcost+json". | value of "application/alto-endpointcost+json". | |||
| 7.3.2. HTTP Method | 7.3.2. HTTP Method | |||
| The multipart Endpoint Cost Service resource is requested using the | The multipart Endpoint Cost Service resource is requested using the | |||
| HTTP POST method. | HTTP POST method. | |||
| 7.3.3. Accept Input Parameters | 7.3.3. Accept Input Parameters | |||
| The input parameters of the multipart Endpoint Cost Service resource | The input parameters of the multipart Endpoint Cost Service resource | |||
| are supplied in the body of an HTTP POST request. This document | are supplied in the body of an HTTP POST request. This document | |||
| extends the input parameters to an Endpoint Cost Service, which is | extends the input parameters to an Endpoint Cost Service, which is | |||
| defined as a JSON object of type ReqEndpointCost in Section 4.2.2 of | defined as a JSON object of type ReqEndpointCostMap in Section 4.2.2 | |||
| [RFC8189], with a data format indicated by the media type | of [RFC8189], with a data format indicated by the media type | |||
| "application/alto-endpointcostparams+json", which is a JSON object of | "application/alto-endpointcostparams+json", which is a JSON object of | |||
| type PVReqEndpointCost: | type PVReqEndpointCostMap: | |||
| object { | object { | |||
| [EntityPropertyName ane-property-names<0..*>;] | [EntityPropertyName ane-property-names<0..*>;] | |||
| } PVReqEndpointcost : ReqEndpointcostMap; | } PVReqEndpointCostMap : ReqEndpointCostMap; | |||
| with fields: | with field: | |||
| ane-property-names: This document defines the "ane-property-names" | ane-property-names: This document defines the "ane-property-names" | |||
| in PVReqEndpointcost as the same as in PVReqFilteredCostMap. See | field in PVReqEndpointCostMap as being the same as in | |||
| Section 7.2.3. | PVReqFilteredCostMap. See Section 7.2.3. | |||
| Example: Consider the network in Figure 1. If an ALTO client wants | Example: Consider the network in Figure 1. If an ALTO client wants | |||
| to query the "max-reservable-bandwidth" between eh1 and eh2, it can | to query the "max-reservable-bandwidth" setting between "eh1" and | |||
| submit the following request. | "eh2", it can submit the following request. | |||
| POST /ecs/pv HTTP/1.1 | POST /ecs/pv HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: multipart/related;type=application/alto-endpointcost+json, | Accept: multipart/related;type=application/alto-endpointcost+json, | |||
| application/alto-error+json | application/alto-error+json | |||
| Content-Length: 227 | Content-Length: 238 | |||
| Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
| { | { | |||
| "cost-type": { | "cost-type": { | |||
| "cost-mode": "array", | "cost-mode": "array", | |||
| "cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
| }, | }, | |||
| "endpoints": { | "endpoints": { | |||
| "srcs": [ "ipv4:192.0.2.2" ], | "srcs": [ "ipv4:192.0.2.2" ], | |||
| "dsts": [ "ipv4:192.0.2.18" ] | "dsts": [ "ipv4:192.0.2.18" ] | |||
| }, | }, | |||
| "ane-property-names": [ "max-reservable-bandwidth" ] | "ane-property-names": [ "max-reservable-bandwidth" ] | |||
| } | } | |||
| 7.3.4. Capabilities | 7.3.4. Capabilities | |||
| The capabilities of the multipart Endpoint Cost Service resource are | The capabilities of the multipart Endpoint Cost Service resource are | |||
| defined by a JSON object of type PVEndpointcostCapabilities, which is | defined by a JSON object of type PVEndpointCostCapabilities, which is | |||
| defined as the same as PVFilteredCostMapCapabilities. See | defined as being the same as PVFilteredCostMapCapabilities. See | |||
| Section 7.2.4. | Section 7.2.4. | |||
| 7.3.5. Uses | 7.3.5. Uses | |||
| If this resource supports "persistent-entity-id", it MUST also | If this resource supports "persistent-entity-id", it MUST also | |||
| include the defining resources of persistent ANEs that may appear in | include the defining resources of persistent ANEs that may appear in | |||
| the response. | the response. | |||
| 7.3.6. Response | 7.3.6. 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. | |||
| The "Content-Type" header of the response MUST be "multipart/related" | The "Content-Type" header field of the response MUST be "multipart/ | |||
| as defined by [RFC7285] with the following parameters: | related" as defined by [RFC2387], with the following parameters: | |||
| type: The type parameter MUST be "application/alto- | type: The "type" parameter MUST be "application/alto- | |||
| endpointcost+json" and is mandatory. | endpointcost+json" and is mandatory. | |||
| start: The start parameter is as defined in Section 7.2.6. | start: The "start" parameter is as defined in Section 7.2.6. | |||
| boundary: The boundary parameter is as defined in Section 5.1.1 of | boundary: The "boundary" parameter is as defined in Section 5.1.1 of | |||
| [RFC2046] and is mandatory. | [RFC2046] and is mandatory. | |||
| The body MUST consist of two parts: | The body of the response MUST consist of two parts: | |||
| * The Path Vector part MUST include "Content-ID" and "Content-Type" | * The Path Vector part MUST include "Content-ID" and "Content-Type" | |||
| in its header. The "Content-Type" MUST be "application/alto- | in its header. The "Content-Type" MUST be "application/alto- | |||
| endpointcost+json". The value of "Content-ID" MUST have the same | endpointcost+json". The value of "Content-ID" MUST have the same | |||
| format as the Part Content ID as specified in Section 6.6. | format as the Part Content ID as specified in Section 6.6. | |||
| The body of the Path Vector part MUST be a JSON object with the | The body of the Path Vector part MUST be a JSON object with the | |||
| same format as defined in Section 11.5.1.6 of [RFC7285] when the | same format as that defined in Section 11.5.1.6 of [RFC7285] when | |||
| "cost-type" field is present in the input parameters and MUST be a | the "cost-type" field is present in the input parameters and MUST | |||
| JSON object with the same format as defined in Section 4.2.3 of | be a JSON object with the same format as that defined in | |||
| [RFC8189] if the "multi-cost-types" field is present. The JSON | Section 4.2.3 of [RFC8189] if the "multi-cost-types" field is | |||
| object MUST include the "vtag" field in the "meta" field, which | present. The JSON object MUST include the "vtag" field in the | |||
| provides the version tag of the returned EndpointCostMapData. The | "meta" field, which provides the version tag of the returned | |||
| resource ID of the version tag MUST follow the format of | EndpointCostMapData object. The resource ID of the version tag | |||
| MUST follow the format of | ||||
| resource-id '.' part-resource-id | resource-id '.' part-resource-id | |||
| where "resource-id" is the resource Id of the Path Vector | where "resource-id" is the resource ID of the Path Vector resource | |||
| resource, and "part-resource-id" has the same value as the PART- | and "part-resource-id" has the same value as the PART-RESOURCE-ID | |||
| RESOURCE-ID in the "Content-ID" of the Path Vector part. | in the "Content-ID" of the Path Vector part. | |||
| * The Unified Property Map part MUST also include "Content-ID" and | * The entity property map part MUST also include "Content-ID" and | |||
| "Content-Type" in its header. The "Content-Type" MUST be | "Content-Type" in its header. The "Content-Type" MUST be | |||
| "application/alto-propmap+json". The value of "Content-ID" MUST | "application/alto-propmap+json". The value of "Content-ID" MUST | |||
| have the same format as the Part Content ID as specified in | have the same format as the Part Content ID as specified in | |||
| Section 6.6. | Section 6.6. | |||
| The body of the Unified Property Map part MUST be a JSON object | The body of the entity property map part MUST be a JSON object | |||
| with the same format as defined in Section 7.6 of | with the same format as that defined in Section 7.6 of [RFC9240]. | |||
| [I-D.ietf-alto-unified-props-new]. The JSON object MUST include | The JSON object MUST include the "dependent-vtags" field in the | |||
| the "dependent-vtags" field in the "meta" field. The value of the | "meta" field. The value of the "dependent-vtags" field MUST be an | |||
| "dependent-vtags" field MUST be an array of VersionTag objects as | array of VersionTag objects as defined by Section 10.3 of | |||
| defined by Section 10.3 of [RFC7285]. The "vtag" of the Path | [RFC7285]. The "vtag" of the Path Vector part MUST be included in | |||
| Vector part MUST be included in the "dependent-vtags". If | the "dependent-vtags" field. If "persistent-entity-id" is | |||
| "persistent-entity-id" is requested, the version tags of the | requested, the version tags of the dependent resources that may | |||
| dependent resources that may expose the entities in the response | expose the entities in the response MUST also be included. | |||
| MUST also be included. | ||||
| The PropertyMapData has one member for each ANEName that appears | The PropertyMapData object has one member for each ANEName that | |||
| in the Path Vector part, which is an entity identifier belonging | appears in the Path Vector part, which is an entity identifier | |||
| to the self-defined entity domain as defined in Section 5.1.2.3 of | belonging to the self-defined entity domain as defined in | |||
| [I-D.ietf-alto-unified-props-new]. The EntityProps for each ANE | Section 5.1.2.3 of [RFC9240]. The EntityProps object for each ANE | |||
| has one member for each property that is both 1) associated with | has one member for each property that is both 1) associated with | |||
| the ANE, and 2) specified in the "ane-property-names" in the | the ANE and 2) specified in the "ane-property-names" field in the | |||
| request. If the Path Vector cost type is not included in the | request. If the Path Vector cost type is not included in the | |||
| "cost-type" field or the "multi-cost-type" field, the "property- | "cost-type" field or the "multi-cost-type" field, the "property- | |||
| map" field MUST be present and the value MUST be an empty object | map" field MUST be present and the value MUST be an empty object | |||
| ({}). | ({}). | |||
| A complete and valid response MUST include both the Path Vector part | A complete and valid response MUST include both the Path Vector part | |||
| and the Property Map part in the multipart message. If any part is | and the property map part in the multipart message. If any part is | |||
| NOT present, the client MUST discard the received information and | *not* present, the client MUST discard the received information and | |||
| send another request if necessary. | send another request if necessary. | |||
| According to [RFC2387], the Path Vector part, whose media type is the | The Path Vector part, whose media type is the same as the "type" | |||
| same as the "type" parameter of the multipart response message, is | parameter of the multipart response message, is the root body part as | |||
| the root object. Thus, it is the element the application processes | defined in [RFC2387]. Thus, it is the element that the application | |||
| first. Even though the "start" parameter allows it to be placed | processes first. Even though the "start" parameter allows it to be | |||
| anywhere in the part sequence, it is RECOMMENDED that the parts | placed anywhere in the part sequence, it is RECOMMENDED that the | |||
| arrive in the same order as they are processed, i.e., the Path Vector | parts arrive in the same order as they are processed, i.e., the Path | |||
| part is always put as the first part, followed by the Property Map | Vector part is always placed as the first part, followed by the | |||
| part. When doing so, an ALTO server MAY choose not to set the | property map part. When doing so, an ALTO server MAY choose not to | |||
| "start" parameter, which implies the first part is the root object. | set the "start" parameter, which implies that the first part is the | |||
| object root. | ||||
| Example: Consider the network in Figure 1. The response of the | Example: Consider the network in Figure 1. The response to the | |||
| example request in Section 7.3.3 is as follows. | example request in Section 7.3.3 is as follows. | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: 845 | Content-Length: 899 | |||
| Content-Type: multipart/related; boundary=example-1; | Content-Type: multipart/related; boundary=example-1; | |||
| type=application/alto-endpointcost+json | type=application/alto-endpointcost+json | |||
| --example-1 | --example-1 | |||
| Content-ID: <ecs@alto.example.com> | Content-ID: <ecs@alto.example.com> | |||
| Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "vtag": { | "vtag": { | |||
| skipping to change at page 38, line 29 ¶ | skipping to change at line 1607 ¶ | |||
| }, | }, | |||
| "dependent-vtags": [ | "dependent-vtags": [ | |||
| { | { | |||
| "resource-id": "my-default-networkmap", | "resource-id": "my-default-networkmap", | |||
| "tag": "677fe5f4066848d282ece213a84f9429" | "tag": "677fe5f4066848d282ece213a84f9429" | |||
| } | } | |||
| ], | ], | |||
| "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" } | "cost-type": { "cost-mode": "array", "cost-metric": "ane-path" } | |||
| }, | }, | |||
| "cost-map": { | "cost-map": { | |||
| "ipv4:192.0.2.2": { "ipv4:192.0.2.18": ["ANE1"] } | "ipv4:192.0.2.2": { "ipv4:192.0.2.18": [ "ANE1" ] } | |||
| } | } | |||
| } | } | |||
| --example-1 | --example-1 | |||
| Content-ID: <propmap@alto.example.com> | Content-ID: <propmap@alto.example.com> | |||
| Content-Type: application/alto-propmap+json | Content-Type: application/alto-propmap+json | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "dependent-vtags": [ | "dependent-vtags": [ | |||
| { | { | |||
| "resource-id": "ecs-pv.ecs", | "resource-id": "ecs-pv.ecs", | |||
| "tag": "ec137bb78118468c853d5b622ac003f1" | "tag": "ec137bb78118468c853d5b622ac003f1" | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "property-map": { | "property-map": { | |||
| ".ane:ANE1": { "max-reservable-bandwidth": 100000000 } | ".ane:ANE1": { "max-reservable-bandwidth": 100000000 } | |||
| } | } | |||
| } | } | |||
| --example-1 | ||||
| 8. Examples | 8. Examples | |||
| This section lists some examples of Path Vector queries and the | This section lists some examples of Path Vector queries and the | |||
| corresponding responses. Some long lines are truncated for better | corresponding responses. Some long lines are truncated for better | |||
| readability. | readability. | |||
| 8.1. Sample Setup | 8.1. Sample Setup | |||
| Figure 10 illustrates the network properties and thus the message | ||||
| contents. There are three subnetworks (NET1, NET2, and NET3) and two | ||||
| interconnection links (L1 and L2). It is assumed that each | ||||
| subnetwork has sufficiently large bandwidth to be reserved. | ||||
| ----- L1 | ----- L1 | |||
| / | / | |||
| PID1 +----------+ 10 Gbps +----------+ PID3 | PID1 +----------+ 10 Gbps +----------+ PID3 | |||
| 192.0.2.0/28+-+ +------+ +---------+ +--+192.0.2.32/28 | 192.0.2.0/28+-+ +------+ +---------+ +--+192.0.2.32/28 | |||
| | | MEC1 | | | | 2001:db8::3:0/16 | | | MEC1 | | | | 2001:db8::3:0/16 | |||
| | +------+ | +-----+ | | | +------+ | +-----+ | | |||
| PID2 | | | +----------+ | PID2 | | | +----------+ | |||
| 192.0.2.16/28+-+ | | NET3 | 192.0.2.16/28+-+ | | NET3 | |||
| | | | 15 Gbps | | | | 15 Gbps | |||
| | | | \ | | | | \ | |||
| skipping to change at page 39, line 34 ¶ | skipping to change at line 1663 ¶ | |||
| NET1 | | NET1 | | |||
| +----------+ | +----------+ | |||
| | +------+ | PID4 | | +------+ | PID4 | |||
| | | MEC2 | +--+192.0.2.48/28 | | | MEC2 | +--+192.0.2.48/28 | |||
| | +------+ | 2001:db8::4:0/16 | | +------+ | 2001:db8::4:0/16 | |||
| +----------+ | +----------+ | |||
| NET2 | NET2 | |||
| Figure 10: Examples of ANE Properties | Figure 10: Examples of ANE Properties | |||
| In this document, Figure 10 is used to illustrate the message | ||||
| contents. There are 3 sub-networks (NET1, NET2 and NET3) and two | ||||
| interconnection links (L1 and L2). It is assumed that each sub- | ||||
| network has sufficiently large bandwidth to be reserved. | ||||
| 8.2. Information Resource Directory | 8.2. Information Resource Directory | |||
| To give a comprehensive example of the extension defined in this | To give a comprehensive example of the extension defined in this | |||
| document, we consider the network in Figure 10. Assume that the ALTO | document, we consider the network in Figure 10. Assume that the ALTO | |||
| server provides the following information resources: | server provides the following information resources: | |||
| * "my-default-networkmap": A Network Map resource which contains the | "my-default-networkmap": A network map resource that contains the | |||
| PIDs in the network. | PIDs in the network. | |||
| * "filtered-cost-map-pv": A Multipart Filtered Cost Map resource for | "filtered-cost-map-pv": A multipart filtered cost map resource for | |||
| Path Vector, which exposes the "max-reservable-bandwidth" property | the Path Vector. Exposes the "max-reservable-bandwidth" property | |||
| for the PIDs in "my-default-networkmap". | for the PIDs in "my-default-networkmap". | |||
| * "ane-props": A filtered Unified Property resource that exposes the | "ane-props": A filtered entity property resource that exposes the | |||
| information for persistent ANEs in the network. | information for persistent ANEs in the network. | |||
| * "endpoint-cost-pv": A Multipart Endpoint Cost Service for Path | "endpoint-cost-pv": A multipart Endpoint Cost Service for the Path | |||
| Vector, which exposes the "max-reservable-bandwidth" and the | Vector. Exposes the "max-reservable-bandwidth" and "persistent- | |||
| "persistent-entity-id" properties. | entity-id" properties. | |||
| * "update-pv": An Update Stream service, which provides the | "update-pv": An update stream service that provides the incremental | |||
| incremental update service for the "endpoint-cost-pv" service. | update service for the "endpoint-cost-pv" service. | |||
| * "multicost-pv": A Multipart Endpoint Cost Service with both Multi- | "multicost-pv": A multipart Endpoint Cost Service with both the | |||
| Cost and Path Vector. | Multi-Cost extension and Path Vector extension enabled. | |||
| Below is the Information Resource Directory of the example ALTO | Below is the IRD of the example ALTO server. To enable the extension | |||
| server. To enable the extension defined in this document, the "path- | defined in this document, the Path Vector cost type (Section 6.5), | |||
| vector" cost type (Section 6.5) is defined in the "cost-types" of the | represented by "path-vector" below, is defined in the "cost-types" of | |||
| "meta" field, and is included in the "cost-type-names" of resources | the "meta" field and is included in the "cost-type-names" of | |||
| "filtered-cost-map-pv" and "endpoint-cost-pv". | resources "filtered-cost-map-pv" and "endpoint-cost-pv". | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "cost-types": { | "cost-types": { | |||
| "path-vector": { | "path-vector": { | |||
| "cost-mode": "array", | "cost-mode": "array", | |||
| "cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
| }, | }, | |||
| "num-rc": { | "num-rc": { | |||
| "cost-mode": "numerical", | "cost-mode": "numerical", | |||
| skipping to change at page 42, line 4 ¶ | skipping to change at line 1772 ¶ | |||
| "cost-type-names": [ "path-vector", "num-rc" ], | "cost-type-names": [ "path-vector", "num-rc" ], | |||
| "max-cost-types": 2, | "max-cost-types": 2, | |||
| "testable-cost-type-names": [ "num-rc" ], | "testable-cost-type-names": [ "num-rc" ], | |||
| "ane-property-names": [ | "ane-property-names": [ | |||
| "max-reservable-bandwidth", "persistent-entity-id" | "max-reservable-bandwidth", "persistent-entity-id" | |||
| ] | ] | |||
| }, | }, | |||
| "uses": [ "ane-props" ] | "uses": [ "ane-props" ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 8.3. Multipart Filtered Cost Map | 8.3. Multipart Filtered Cost Map | |||
| The following examples demonstrate the request to the "filtered-cost- | The following examples demonstrate the request to the "filtered-cost- | |||
| map-pv" resource and the corresponding response. | map-pv" resource and the corresponding response. | |||
| The request uses the "path-vector" cost type in the "cost-type" | The request uses the "path-vector" cost type in the "cost-type" | |||
| field. The "ane-property-names" field is missing, indicating that | field. The "ane-property-names" field is missing, indicating that | |||
| the client only requests for the Path Vector but not the ANE | the client only requests the Path Vector and not the ANE properties. | |||
| properties. | ||||
| The response consists of two parts. The first part returns the array | The response consists of two parts: | |||
| of ANEName for each source and destination pair. There are two ANEs, | ||||
| where "L1" represents the interconnection link L1, and "L2" | ||||
| represents the interconnection link L2. | ||||
| The second part returns an empty Property Map. Note that the ANE | * The first part returns the array of data type ANEName for each | |||
| entries are omitted since they have no properties (See Section 3.1 of | source and destination pair. There are two ANEs, where "L1" | |||
| [I-D.ietf-alto-unified-props-new]). | represents interconnection link L1 and "L2" represents | |||
| interconnection link L2. | ||||
| * The second part returns the property map. Note that the | ||||
| properties of the ANE entries are equal to the literal string "{}" | ||||
| (see Section 8.3 of [RFC9240]). | ||||
| POST /costmap/pv HTTP/1.1 | POST /costmap/pv HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: multipart/related;type=application/alto-costmap+json, | Accept: multipart/related;type=application/alto-costmap+json, | |||
| application/alto-error+json | application/alto-error+json | |||
| Content-Length: 153 | Content-Length: 163 | |||
| Content-Type: application/alto-costmapfilter+json | Content-Type: application/alto-costmapfilter+json | |||
| { | { | |||
| "cost-type": { | "cost-type": { | |||
| "cost-mode": "array", | "cost-mode": "array", | |||
| "cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
| }, | }, | |||
| "pids": { | "pids": { | |||
| "srcs": [ "PID1" ], | "srcs": [ "PID1" ], | |||
| "dsts": [ "PID3", "PID4" ] | "dsts": [ "PID3", "PID4" ] | |||
| } | } | |||
| } | } | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: 855 | Content-Length: 952 | |||
| Content-Type: multipart/related; boundary=example-1; | Content-Type: multipart/related; boundary=example-1; | |||
| type=application/alto-costmap+json | type=application/alto-costmap+json | |||
| --example-1 | --example-1 | |||
| Content-ID: <costmap@alto.example.com> | Content-ID: <costmap@alto.example.com> | |||
| Content-Type: application/alto-costmap+json | Content-Type: application/alto-costmap+json | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "vtag": { | "vtag": { | |||
| "resource-id": "filtered-cost-map-pv.costmap", | "resource-id": "filtered-cost-map-pv.costmap", | |||
| "tag": "d827f484cb66ce6df6b5077cb8562b0a" | "tag": "d827f484cb66ce6df6b5077cb8562b0a" | |||
| }, | }, | |||
| "dependent-vtags": [ | "dependent-vtags": [ | |||
| { | { | |||
| "resource-id": "my-default-networkmap", | "resource-id": "my-default-networkmap", | |||
| "tag": "c04bc5da49534274a6daeee8ea1dec62" | "tag": "c04bc5da49534274a6daeee8ea1dec62" | |||
| skipping to change at page 43, line 42 ¶ | skipping to change at line 1859 ¶ | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "dependent-vtags": [ | "dependent-vtags": [ | |||
| { | { | |||
| "resource-id": "filtered-cost-map-pv.costmap", | "resource-id": "filtered-cost-map-pv.costmap", | |||
| "tag": "d827f484cb66ce6df6b5077cb8562b0a" | "tag": "d827f484cb66ce6df6b5077cb8562b0a" | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "property-map": { | "property-map": { | |||
| ".ane:L1": {}, | ||||
| ".ane:L2": {} | ||||
| } | } | |||
| } | } | |||
| --example-1 | ||||
| 8.4. Multipart Endpoint Cost Service Resource | 8.4. Multipart Endpoint Cost Service Resource | |||
| The following examples demonstrate the request to the "endpoint-cost- | The following examples demonstrate the request to the "endpoint-cost- | |||
| pv" resource and the corresponding response. | pv" resource and the corresponding response. | |||
| The request uses the Path Vector cost type in the "cost-type" field, | The request uses the "path-vector" cost type in the "cost-type" field | |||
| and queries the Maximum Reservable Bandwidth ANE property and the | and queries the maximum reservable bandwidth ANE property and the | |||
| Persistent Entity property for two IPv4 source and destination pairs | persistent entity ID property for two IPv4 source and destination | |||
| (192.0.2.34 -> 192.0.2.2 and 192.0.2.34 -> 192.0.2.50) and one IPv6 | pairs (192.0.2.34 -> 192.0.2.2 and 192.0.2.34 -> 192.0.2.50) and one | |||
| source and destination pair (2001:db8::3:1 -> 2001:db8::4:1). | IPv6 source and destination pair (2001:db8::3:1 -> 2001:db8::4:1). | |||
| The response consists of two parts. The first part returns the array | The response consists of two parts: | |||
| of ANEName for each valid source and destination pair. As one can | ||||
| see in Figure 10, flow 192.0.2.34 -> 192.0.2.2 traverses NET2, L1 and | ||||
| NET1, and flows 192.0.2.34 -> 192.0.2.50 and 2001:db8::3:1 -> | ||||
| 2001:db8::4:1 traverse NET2, L2 and NET3. | ||||
| The second part returns the requested properties of ANEs. Assume | * The first part returns the array of data type ANEName for each | |||
| NET1, NET2 and NET3 has sufficient bandwidth and their "max- | valid source and destination pair. As one can see in Figure 10, | |||
| reservable-bandwidth" values are set to a sufficiently large number | flow 192.0.2.34 -> 192.0.2.2 traverses NET3, L1, and NET1; and | |||
| (50 Gbps in this case). On the other hand, assume there are no prior | flows 192.0.2.34 -> 192.0.2.50 and 2001:db8::3:1 -> 2001:db8::4:1 | |||
| reservation on L1 and L2, and their "max-reservable-bandwidth" values | traverse NET2, L2, and NET3. | |||
| are the corresponding link capacity (10 Gbps for L1 and 15 Gbps for | ||||
| L2). | * The second part returns the requested properties of ANEs. Assume | |||
| that NET1, NET2, and NET3 have sufficient bandwidth and their | ||||
| "max-reservable-bandwidth" values are set to a sufficiently large | ||||
| number (50 Gbps in this case). On the other hand, assume that | ||||
| there are no prior reservations on L1 and L2 and their "max- | ||||
| reservable-bandwidth" values are the corresponding link capacity | ||||
| (10 Gbps for L1 and 15 Gbps for L2). | ||||
| Both NET1 and NET2 have a mobile edge deployed, i.e., MEC1 in NET1 | Both NET1 and NET2 have a mobile edge deployed, i.e., MEC1 in NET1 | |||
| and MEC2 in NET2. Assume the ANEName for MEC1 and MEC2 are "MEC1" | and MEC2 in NET2. Assume that the ANEName values for MEC1 and MEC2 | |||
| and "MEC2" and their properties can be retrieved from the Property | are "MEC1" and "MEC2" and their properties can be retrieved from the | |||
| Map "ane-props". Thus, the "persistent-entity-id" property of NET1 | property map "ane-props". Thus, the "persistent-entity-id" property | |||
| and NET3 are "ane-props.ane:MEC1" and "ane-props.ane:MEC2" | values for NET1 and NET2 are "ane-props.ane:MEC1" and "ane- | |||
| respectively. | props.ane:MEC2", respectively. | |||
| POST /endpointcost/pv HTTP/1.1 | POST /endpointcost/pv HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: multipart/related; | Accept: multipart/related; | |||
| type=application/alto-endpointcost+json, | type=application/alto-endpointcost+json, | |||
| application/alto-error+json | application/alto-error+json | |||
| Content-Length: 362 | Content-Length: 383 | |||
| Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
| { | { | |||
| "cost-type": { | "cost-type": { | |||
| "cost-mode": "array", | "cost-mode": "array", | |||
| "cost-metric": "ane-path" | "cost-metric": "ane-path" | |||
| }, | }, | |||
| "endpoints": { | "endpoints": { | |||
| "srcs": [ | "srcs": [ | |||
| "ipv4:192.0.2.34", | "ipv4:192.0.2.34", | |||
| skipping to change at page 45, line 36 ¶ | skipping to change at line 1930 ¶ | |||
| "ipv6:2001:db8::4:1" | "ipv6:2001:db8::4:1" | |||
| ] | ] | |||
| }, | }, | |||
| "ane-property-names": [ | "ane-property-names": [ | |||
| "max-reservable-bandwidth", | "max-reservable-bandwidth", | |||
| "persistent-entity-id" | "persistent-entity-id" | |||
| ] | ] | |||
| } | } | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: 1432 | Content-Length: 1508 | |||
| Content-Type: multipart/related; boundary=example-2; | Content-Type: multipart/related; boundary=example-2; | |||
| type=application/alto-endpointcost+json | type=application/alto-endpointcost+json | |||
| --example-2 | --example-2 | |||
| Content-ID: <ecs@alto.example.com> | Content-ID: <ecs@alto.example.com> | |||
| Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "vtags": { | "vtags": { | |||
| skipping to change at page 47, line 4 ¶ | skipping to change at line 1995 ¶ | |||
| ".ane:NET3": { | ".ane:NET3": { | |||
| "max-reservable-bandwidth": 50000000000 | "max-reservable-bandwidth": 50000000000 | |||
| }, | }, | |||
| ".ane:L1": { | ".ane:L1": { | |||
| "max-reservable-bandwidth": 10000000000 | "max-reservable-bandwidth": 10000000000 | |||
| }, | }, | |||
| ".ane:L2": { | ".ane:L2": { | |||
| "max-reservable-bandwidth": 15000000000 | "max-reservable-bandwidth": 15000000000 | |||
| } | } | |||
| } | } | |||
| } | } | |||
| --example-2 | ||||
| Under certain scenarios where the traversal order is not crucial, an | In certain scenarios where the traversal order is not crucial, an | |||
| ALTO server implementation may choose to not follow strictly the | ALTO server implementation may choose not to strictly follow the | |||
| physical traversal order and may even obfuscate the order | physical traversal order and may even obfuscate the order | |||
| intentionally to preserve its own privacy or conform to its own | intentionally to preserve its own privacy or conform to its own | |||
| policies. For example, an ALTO server may choose to aggregate NET1 | policies. For example, an ALTO server may choose to aggregate NET1 | |||
| and L1 as a new ANE with ANE name "AGGR1", and aggregate NET2 and L2 | and L1 as a new ANE with ANE name "AGGR1" and aggregate NET2 and L2 | |||
| as a new ANE with ANE name "AGGR2". The "max-reservable-bandwidth" | as a new ANE with ANE name "AGGR2". The "max-reservable-bandwidth" | |||
| of "AGGR1" takes the value of L1, which is smaller than that of NET1, | property of "AGGR1" takes the value of L1, which is smaller than that | |||
| and the "persistent-entity-id" of "AGGR1" takes the value of NET1. | of NET1, and the "persistent-entity-id" property of "AGGR1" takes the | |||
| The properties of "AGGR2" are computed in a similar way and the | value of NET1. The properties of "AGGR2" are computed in a similar | |||
| obfuscated response is as shown below. Note that the obfuscation of | way; the obfuscated response is as shown below. Note that the | |||
| Path Vector responses is implementation-specific and is out of the | obfuscation of Path Vector responses is implementation specific and | |||
| scope of this document, and developers may refer to Section 11 for | is out of scope for this document. Developers may refer to | |||
| further references. | Section 11 for further references. | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: 1263 | Content-Length: 1333 | |||
| Content-Type: multipart/related; boundary=example-2; | Content-Type: multipart/related; boundary=example-2; | |||
| type=application/alto-endpointcost+json | type=application/alto-endpointcost+json | |||
| --example-2 | --example-2 | |||
| Content-ID: <ecs@alto.example.com> | Content-ID: <ecs@alto.example.com> | |||
| Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "vtags": { | "vtags": { | |||
| skipping to change at page 48, line 34 ¶ | skipping to change at line 2074 ¶ | |||
| }, | }, | |||
| ".ane:AGGR2": { | ".ane:AGGR2": { | |||
| "max-reservable-bandwidth": 15000000000, | "max-reservable-bandwidth": 15000000000, | |||
| "persistent-entity-id": "ane-props.ane:MEC2" | "persistent-entity-id": "ane-props.ane:MEC2" | |||
| }, | }, | |||
| ".ane:NET3": { | ".ane:NET3": { | |||
| "max-reservable-bandwidth": 50000000000 | "max-reservable-bandwidth": 50000000000 | |||
| } | } | |||
| } | } | |||
| } | } | |||
| --example-2 | ||||
| 8.5. Incremental Updates | 8.5. Incremental Updates | |||
| In this example, an ALTO client subscribes to the incremental update | In this example, an ALTO client subscribes to the incremental update | |||
| for the multipart Endpoint Cost Service resource "endpoint-cost-pv". | for the multipart Endpoint Cost Service resource "endpoint-cost-pv". | |||
| POST /updates/pv HTTP/1.1 | POST /updates/pv HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: text/event-stream | Accept: text/event-stream | |||
| Content-Type: application/alto-updatestreamparams+json | Content-Type: application/alto-updatestreamparams+json | |||
| Content-Length: 112 | Content-Length: 120 | |||
| { | { | |||
| "add": { | "add": { | |||
| "ecspvsub1": { | "ecspvsub1": { | |||
| "resource-id": "endpoint-cost-pv", | "resource-id": "endpoint-cost-pv", | |||
| "input": <ecs-input> | "input": <ecs-input> | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Based on the server-side process defined in [RFC8895], the ALTO | Based on the server-side process defined in [RFC8895], the ALTO | |||
| server will send the "control-uri" first using Server-Sent Event | server will send the "control-uri" first, using a Server-Sent Event | |||
| (SSE), followed by the full response of the multipart message. | (SSE) followed by the full response of the multipart message. | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Connection: keep-alive | Connection: keep-alive | |||
| Content-Type: text/event-stream | Content-Type: text/event-stream | |||
| event: application/alto-updatestreamcontrol+json | event: application/alto-updatestreamcontrol+json | |||
| data: {"control-uri": "https://alto.example.com/updates/streams/123"} | data: {"control-uri": "https://alto.example.com/updates/streams/123"} | |||
| event: multipart/related;boundary=example-3; | event: multipart/related;boundary=example-3; | |||
| type=application/alto-endpointcost+json,ecspvsub1 | type=application/alto-endpointcost+json,ecspvsub1 | |||
| skipping to change at page 50, line 5 ¶ | skipping to change at line 2125 ¶ | |||
| data: Content-ID: <propmap@alto.example.com> | data: Content-ID: <propmap@alto.example.com> | |||
| data: Content-Type: application/alto-propmap+json | data: Content-Type: application/alto-propmap+json | |||
| data: | data: | |||
| data: <property-map-entry> | data: <property-map-entry> | |||
| data: --example-3-- | data: --example-3-- | |||
| When the contents change, the ALTO server will publish the updates | When the contents change, the ALTO server will publish the updates | |||
| for each node in this tree separately, based on Section 6.7.3 of | for each node in this tree separately, based on Section 6.7.3 of | |||
| [RFC8895]. | [RFC8895]. | |||
| event: application/merge-patch+json, ecspvsub1.ecsmap@alto.example.com | event: application/merge-patch+json, | |||
| data: <Merge patch for endpoint-cost-map-update> | ecspvsub1.ecsmap@alto.example.com | |||
| data: <Merge patch for endpoint-cost-map-update> | ||||
| event: application/merge-patch+json, ecspvsub1.propmap@alto.example.com | event: application/merge-patch+json, | |||
| data: <Merge patch for property-map-update> | ecspvsub1.propmap@alto.example.com | |||
| data: <Merge patch for property-map-update> | ||||
| 8.6. Multi-cost | 8.6. Multi-Cost | |||
| The following examples demonstrate the request to the "multicost-pv" | The following examples demonstrate the request to the "multicost-pv" | |||
| resource and the corresponding response. | resource and the corresponding response. | |||
| The request asks for two cost types: the first is the Path Vector | The request asks for two cost types: the first is the Path Vector | |||
| cost type, and the second is a numerical routing cost. It also | cost type, and the second is a numerical routing cost. It also | |||
| queries the Maximum Reservable Bandwidth ANE property and the | queries the maximum reservable bandwidth ANE property and the | |||
| Persistent Entity property for two IPv4 source and destination pairs | persistent entity ID property for two IPv4 source and destination | |||
| (192.0.2.34 -> 192.0.2.2 and 192.0.2.34 -> 192.0.2.50) and one IPv6 | pairs (192.0.2.34 -> 192.0.2.2 and 192.0.2.34 -> 192.0.2.50) and one | |||
| source and destination pair (2001:db8::3:1 -> 2001:db8::4:1). | IPv6 source and destination pair (2001:db8::3:1 -> 2001:db8::4:1). | |||
| The response consists of two parts. The first part returns a | The response consists of two parts: | |||
| JSONArray that contains two JSONValue for each requested source and | ||||
| destination pair: the first JSONValue is a JSONArray of ANENames, | * The first part returns a JSONArray that contains two JSONValue | |||
| which is the value of the Path Vector cost type, and the second | entries for each requested source and destination pair: the first | |||
| JSONValue is a JSONNumber which is the value of the routing cost. | JSONValue is a JSONArray of ANENames, which is the value of the | |||
| The second part contains a Property Map that maps the ANEs to their | Path Vector cost type; and the second JSONValue is a JSONNumber, | |||
| requested properties. | which is the value of the routing cost. | |||
| * The second part contains a property map that maps the ANEs to | ||||
| their requested properties. | ||||
| POST /endpointcost/mcpv HTTP/1.1 | POST /endpointcost/mcpv HTTP/1.1 | |||
| Host: alto.example.com | Host: alto.example.com | |||
| Accept: multipart/related; | Accept: multipart/related; | |||
| type=application/alto-endpointcost+json, | type=application/alto-endpointcost+json, | |||
| application/alto-error+json | application/alto-error+json | |||
| Content-Length: 433 | Content-Length: 454 | |||
| Content-Type: application/alto-endpointcostparams+json | Content-Type: application/alto-endpointcostparams+json | |||
| { | { | |||
| "multi-cost-types": [ | "multi-cost-types": [ | |||
| { "cost-mode": "array", "cost-metric": "ane-path" }, | { "cost-mode": "array", "cost-metric": "ane-path" }, | |||
| { "cost-mode": "numerical", "cost-metric": "routingcost" } | { "cost-mode": "numerical", "cost-metric": "routingcost" } | |||
| ], | ], | |||
| "endpoints": { | "endpoints": { | |||
| "srcs": [ | "srcs": [ | |||
| "ipv4:192.0.2.34", | "ipv4:192.0.2.34", | |||
| skipping to change at page 51, line 36 ¶ | skipping to change at line 2187 ¶ | |||
| "ipv6:2001:db8::4:1" | "ipv6:2001:db8::4:1" | |||
| ] | ] | |||
| }, | }, | |||
| "ane-property-names": [ | "ane-property-names": [ | |||
| "max-reservable-bandwidth", | "max-reservable-bandwidth", | |||
| "persistent-entity-id" | "persistent-entity-id" | |||
| ] | ] | |||
| } | } | |||
| HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
| Content-Length: 1350 | Content-Length: 1419 | |||
| Content-Type: multipart/related; boundary=example-4; | Content-Type: multipart/related; boundary=example-4; | |||
| type=application/alto-endpointcost+json | type=application/alto-endpointcost+json | |||
| --example-4 | --example-4 | |||
| Content-ID: <ecs@alto.example.com> | Content-ID: <ecs@alto.example.com> | |||
| Content-Type: application/alto-endpointcost+json | Content-Type: application/alto-endpointcost+json | |||
| { | { | |||
| "meta": { | "meta": { | |||
| "vtags": { | "vtags": { | |||
| skipping to change at page 52, line 48 ¶ | skipping to change at line 2247 ¶ | |||
| }, | }, | |||
| ".ane:AGGR2": { | ".ane:AGGR2": { | |||
| "max-reservable-bandwidth": 15000000000, | "max-reservable-bandwidth": 15000000000, | |||
| "persistent-entity-id": "ane-props.ane:MEC2" | "persistent-entity-id": "ane-props.ane:MEC2" | |||
| }, | }, | |||
| ".ane:NET3": { | ".ane:NET3": { | |||
| "max-reservable-bandwidth": 50000000000 | "max-reservable-bandwidth": 50000000000 | |||
| } | } | |||
| } | } | |||
| } | } | |||
| --example-4 | ||||
| 9. Compatibility with Other ALTO Extensions | 9. Compatibility with Other ALTO Extensions | |||
| 9.1. Compatibility with Legacy ALTO Clients/Servers | 9.1. Compatibility with Legacy ALTO Clients/Servers | |||
| The multipart Filtered Cost Map resource and the multipart Endpoint | The multipart filtered cost map resource and the multipart Endpoint | |||
| Cost Service resource has no backward compatibility issue with legacy | Cost Service resource have no backward-compatibility issues with | |||
| ALTO clients and servers. Although these two types of resources | legacy ALTO clients and servers. Although these two types of | |||
| reuse the media types defined in the base ALTO protocol for the | resources reuse the media types defined in the base ALTO Protocol for | |||
| accept input parameters, they have different media types for | the "Accept" input parameters, they have different media types for | |||
| responses. If the ALTO server provides these two types of resources, | responses. If the ALTO server provides these two types of resources | |||
| but the ALTO client does not support them, the ALTO client will | but the ALTO client does not support them, the ALTO client will | |||
| ignore the resources without incurring any incompatibility problem. | ignore the resources without incurring any incompatibility problems. | |||
| 9.2. Compatibility with Multi-Cost Extension | 9.2. Compatibility with Multi-Cost Extension | |||
| The extension defined in this document is compatible with the multi- | The extension defined in this document is compatible with the multi- | |||
| cost extension [RFC8189]. Such a resource has a media type of either | cost extension [RFC8189]. Such a resource has a media type of either | |||
| "multipart/related; type=application/alto-costmap+json" or | "multipart/related; type=application/alto-costmap+json" or | |||
| "multipart/related; type=application/alto-endpointcost+json". Its | "multipart/related; type=application/alto-endpointcost+json". Its | |||
| "cost-constraints" field must either be "false" or not present and | "cost-constraints" field must be either "false" or not present, and | |||
| the Path Vector cost type must be present in the "cost-type-names" | the Path Vector cost type must be present in the "cost-type-names" | |||
| capability field but must not be present in the "testable-cost-type- | capability field but must not be present in the "testable-cost-type- | |||
| names" field, as specified in Section 7.2.4 and Section 7.3.4. | names" field, as specified in Sections 7.2.4 and 7.3.4. | |||
| 9.3. Compatibility with Incremental Update | 9.3. Compatibility with Incremental Update Extension | |||
| This extension is compatible with the incremental update extension | This extension is compatible with the incremental update extension | |||
| [RFC8895]. ALTO clients and servers MUST follow the specifications | [RFC8895]. ALTO clients and servers MUST follow the specifications | |||
| given in Sections 5.2 and 6.7.3 of [RFC8895] to support incremental | given in Sections 5.2 and 6.7.3 of [RFC8895] to support incremental | |||
| updates for a Path Vector resource. | updates for a Path Vector resource. | |||
| 9.4. Compatibility with Cost Calendar | 9.4. Compatibility with Cost Calendar Extension | |||
| The extension specified in this document is compatible with the Cost | The extension specified in this document is compatible with the Cost | |||
| Calendar extension [RFC8896]. When used together with the Cost | Calendar extension [RFC8896]. When used together with the Cost | |||
| Calendar extension, the cost value between a source and a destination | Calendar extension, the cost value between a source and a destination | |||
| is an array of Path Vectors, where the k-th Path Vector refers to the | is an array of Path Vectors, where the k-th Path Vector refers to the | |||
| abstract network paths traversed in the k-th time interval by traffic | abstract network paths traversed in the k-th time interval by traffic | |||
| from the source to the destination. | from the source to the destination. | |||
| When used with time-varying properties, e.g., maximum reservable | When used with time-varying properties, e.g., maximum reservable | |||
| bandwidth, a property of a single ANE may also have different values | bandwidth, a property of a single ANE may also have different values | |||
| in different time intervals. In this case, if such an ANE has | in different time intervals. In this case, if such an ANE has | |||
| different property values in two time intervals, it MUST be treated | different property values in two time intervals, it MUST be treated | |||
| as two different ANEs, i.e., with different entity identifiers. | as two different ANEs, i.e., with different entity identifiers. | |||
| However, if it has the same property values in two time intervals, it | However, if it has the same property values in two time intervals, it | |||
| MAY use the same identifier. | MAY use the same identifier. | |||
| This rule allows the Path Vector extension to represent both changes | This rule allows the Path Vector extension to represent both changes | |||
| of ANEs and changes of the ANEs' properties in a uniform way. The | of ANEs and changes of the ANEs' properties in a uniform way. The | |||
| Path Vector part is calendared in a compatible way, and the Property | Path Vector part is calendared in a compatible way, and the property | |||
| Map part is not affected by the calendar extension. | map part is not affected by the Cost Calendar extension. | |||
| The two extensions combined together can provide the historical | The two extensions combined together can provide the historical | |||
| network correlation information for a set of source and destination | network correlation information for a set of source and destination | |||
| pairs. A network broker or client may use this information to derive | pairs. A network broker or client may use this information to derive | |||
| other resource requirements such as Time-Block-Maximum Bandwidth, | other resource requirements such as Time-Block-Maximum Bandwidth, | |||
| Bandwidth-Sliding-Window, and Time-Bandwidth-Product (TBP) (See | Bandwidth-Sliding-Window, and Time-Bandwidth-Product (TBP) (see | |||
| [SENSE] for details). | [SENSE] for details). | |||
| 10. General Discussions | 10. General Discussion | |||
| 10.1. Constraint Tests for General Cost Types | 10.1. Constraint Tests for General Cost Types | |||
| The constraint test is a simple approach to query the data. It | The constraint test is a simple approach for querying the data. It | |||
| allows users to filter the query result by specifying some boolean | allows users to filter query results by specifying some boolean | |||
| tests. This approach is already used in the ALTO protocol. | tests. This approach is already used in the ALTO Protocol. ALTO | |||
| [RFC7285] and [RFC8189] allow ALTO clients to specify the | clients are permitted to specify either the "constraints" test | |||
| "constraints" and "or-constraints" tests to better filter the result. | [RFC7285] [RFC8189] or the "or-constraints" test [RFC8189] to better | |||
| filter the results. | ||||
| However, the current syntax can only be used to test scalar cost | However, the current syntax can only be used to test scalar cost | |||
| types, and cannot easily express constraints on complex cost types, | types and cannot easily express constraints on complex cost types, | |||
| e.g., the Path Vector cost type defined in this document. | e.g., the Path Vector cost type defined in this document. | |||
| In practice, developing a bespoke language for general-purpose | In practice, developing a bespoke language for general-purpose | |||
| boolean tests can be a complex undertaking, and it is conceivable | boolean tests can be a complex undertaking, and it is conceivable | |||
| that there are some existing implementations already (the authors | that such implementations already exist (the authors have not done an | |||
| have not done an exhaustive search to determine whether there are | exhaustive search to determine whether such implementations exist). | |||
| such implementations). One avenue to develop such a language may be | One avenue for developing such a language may be to explore extending | |||
| to explore extending current query languages like XQuery [XQuery] or | current query languages like XQuery [XQuery] or JSONiq [JSONiq] and | |||
| JSONiq [JSONiq] and integrating these with ALTO. | integrating these with ALTO. | |||
| Filtering the Path Vector results or developing a more sophisticated | Filtering the Path Vector results or developing a more sophisticated | |||
| filtering mechanism is beyond the scope of this document. | filtering mechanism is beyond the scope of this document. | |||
| 10.2. General Multi-Resource Query | 10.2. General Multi-Resource Query | |||
| Querying multiple ALTO information resources continuously is a | Querying multiple ALTO information resources continuously is a | |||
| general requirement. Enabling such a capability, however, must | general requirement. Enabling such a capability, however, must | |||
| address general issues like efficiency and consistency. The | address general issues like efficiency and consistency. The | |||
| incremental update extension [RFC8895] supports submitting multiple | incremental update extension [RFC8895] supports submitting multiple | |||
| queries in a single request, and allows flexible control over the | queries in a single request and allows flexible control over the | |||
| queries. However, it does not cover the case introduced in this | queries. However, it does not cover the case introduced in this | |||
| document where multiple resources are needed for a single request. | document where multiple resources are needed for a single request. | |||
| This extension gives an example of using a multipart message to | The extension specified in this document gives an example of using a | |||
| encode the responses from two specific ALTO information resources: a | multipart message to encode the responses from two specific ALTO | |||
| Filtered Cost Map or an Endpoint Cost Service, and a Property Map. By | information resources: a filtered cost map or an Endpoint Cost | |||
| packing multiple resources in a single response, the implication is | Service, and a property map. By packing multiple resources in a | |||
| that servers may proactively push related information resources to | single response, the implication is that servers may proactively push | |||
| clients. | related information resources to clients. | |||
| Thus, it is worth looking into the direction of extending the SSE | Thus, it is worth looking into extending the SSE mechanism as used in | |||
| mechanism as used in the incremental update extension [RFC8895], or | the incremental update extension [RFC8895]; or upgrading to HTTP/2 | |||
| upgrading to HTTP/2 [I-D.ietf-httpbis-http2bis] and HTTP/3 | [RFC9113] and HTTP/3 [RFC9114], which provides the ability to | |||
| [I-D.ietf-quic-http], which provides the ability to multiplex queries | multiplex queries and to allow servers to proactively send related | |||
| and to allow servers proactively send related information resources. | information resources. | |||
| Defining a general multi-resource query mechanism is out of the scope | Defining a general multi-resource query mechanism is out of scope for | |||
| of this document. | this document. | |||
| 11. Security Considerations | 11. Security Considerations | |||
| This document is an extension of the base ALTO protocol, so the | This document is an extension of the base ALTO Protocol, so the | |||
| Security Considerations [RFC7285] of the base ALTO protocol fully | security considerations provided for the base ALTO Protocol [RFC7285] | |||
| apply when this extension is provided by an ALTO server. | fully apply when this extension is provided by an ALTO server. | |||
| The Path Vector extension requires additional scrutiny on three | The Path Vector extension requires additional scrutiny of three | |||
| security considerations discussed in the base protocol: | security considerations discussed in the base protocol: | |||
| confidentiality of ALTO information (Section 15.3 of [RFC7285]), | confidentiality of ALTO information (Section 15.3 of [RFC7285]), | |||
| potential undesirable guidance from authenticated ALTO information | potential undesirable guidance from authenticated ALTO information | |||
| (Section 15.2 of [RFC7285]), and availability of ALTO service | (Section 15.2 of [RFC7285]), and availability of ALTO services | |||
| (Section 15.5 of [RFC7285]). | (Section 15.5 of [RFC7285]). | |||
| For confidentiality of ALTO information, a network operator should be | For confidentiality of ALTO information, a network operator should be | |||
| aware that this extension may introduce a new risk: the Path Vector | aware that this extension may introduce a new risk: the Path Vector | |||
| information, when used together with sensitive ANE properties such as | information, when used together with sensitive ANE properties such as | |||
| capacities of bottleneck links, may make network attacks easier. For | capacities of bottleneck links, may make network attacks easier. For | |||
| example, as the Path Vector information may reveal more fine-grained | example, as the Path Vector information may reveal more fine-grained | |||
| internal network structures than the base protocol, an attacker may | internal network structures than the base protocol, an attacker may | |||
| identify the bottleneck link and start a distributed denial-of- | identify the bottleneck link or links and start a distributed denial- | |||
| service (DDoS) attack involving minimal flows to conduct the in- | of-service (DDoS) attack involving minimal flows, triggering in- | |||
| network congestion. Given the potential risk of leaking sensitive | network congestion. Given the potential risk of leaking sensitive | |||
| information, the Path Vector extension is mainly applicable in | information, the Path Vector extension is mainly applicable in | |||
| scenarios where 1) the ANE structures and ANE properties do not | scenarios where 1) the ANE structures and ANE properties do not | |||
| impose security risks to the ALTO service provider, e.g., not | impose security risks on the ALTO service provider (e.g., they do not | |||
| carrying sensitive information, or 2) the ALTO server and client have | carry sensitive information) or 2) the ALTO server and client have | |||
| established a reliable trust relationship, for example, operated in | established a reliable trust relationship (e.g., they operate in the | |||
| the same administrative domain, or managed by business partners with | same administrative domain or are managed by business partners with | |||
| legal contracts. | legal contracts). | |||
| Three risk types are identified in Section 15.3.1 of [RFC7285]: | ||||
| (1) excess disclosure of the ALTO service provider's data to an | ||||
| unauthorized ALTO client, | ||||
| (2) disclosure of the ALTO service provider's data (e.g., network | ||||
| topology information or endpoint addresses) to an unauthorized | ||||
| third party, and | ||||
| (3) excess retrieval of the ALTO service provider's data by | ||||
| collaborating ALTO clients. | ||||
| Three risk types are identified in Section 15.3.1 of [RFC7285]: (1) | ||||
| Excess disclosure of the ALTO service provider's data to an | ||||
| unauthorized ALTO client; (2) Disclosure of the ALTO service | ||||
| provider's data (e.g., network topology information or endpoint | ||||
| addresses) to an unauthorized third party; and (3) Excess retrieval | ||||
| of the ALTO service provider's data by collaborating ALTO clients. | ||||
| To mitigate these risks, an ALTO server MUST follow the guidelines in | To mitigate these risks, an ALTO server MUST follow the guidelines in | |||
| Section 15.3.2 of [RFC7285]. Furthermore, an ALTO server MUST follow | Section 15.3.2 of [RFC7285]. Furthermore, an ALTO server MUST follow | |||
| the following additional protections strategies for risk types (1) | the following additional protections strategies for risk types (1) | |||
| and (3). | and (3). | |||
| For risk type (1), an ALTO server MUST use the authentication methods | For risk type (1), an ALTO server MUST use the authentication methods | |||
| specified in Section 15.3.2 of [RFC7285] to authenticate the identify | specified in Section 15.3.2 of [RFC7285] to authenticate the identity | |||
| of an ALTO client, and apply access control techniques to restrict | of an ALTO client and apply access control techniques to restrict the | |||
| unprivileged ALTO clients from retrieving sensitive Path Vector | retrieval of sensitive Path Vector information by unprivileged ALTO | |||
| information. For settings where the ALTO server and client are not | clients. For settings where the ALTO server and client are not in | |||
| in the same trust domain, the ALTO server should reach agreements | the same trust domain, the ALTO server should reach agreements with | |||
| with the ALTO client on protecting the confidentiality before | the ALTO client regarding protection of confidentiality before | |||
| granting the access to Path Vector service with sensitive | granting access to Path Vector services with sensitive information. | |||
| information. Such agreements may include legal contracts or Digital | Such agreements may include legal contracts or Digital Rights | |||
| Right Management (DRM) techniques. Otherwise, the ALTO server MUST | Management (DRM) techniques. Otherwise, the ALTO server MUST NOT | |||
| NOT offer the Path Vector service carrying sensitive information to | offer Path Vector services that carry sensitive information to the | |||
| the clients unless the potential risks are fully assessed and | clients, unless the potential risks are fully assessed and mitigated. | |||
| mitigated. | ||||
| For risk type (3), an ALTO service provider must be aware that | For risk type (3), an ALTO service provider must be aware that | |||
| persistent ANEs may be used as "landmarks" in collaborative | persistent ANEs may be used as "landmarks" in collaborative | |||
| inferences. Thus, they should only be used when exposing public | inferences. Thus, they should only be used when exposing public | |||
| service access points (e.g., API gateways, CDNi) and/or when the | service access points (e.g., API gateways, CDN Interconnections) and/ | |||
| granularity is coarse-grained (e.g., when an ANE represents an AS, a | or when the granularity is coarse grained (e.g., when an ANE | |||
| data center or a WAN). Otherwise, an ALTO server MUST use dynamic | represents an AS, a data center, or a WAN). Otherwise, an ALTO | |||
| mappings from ephemeral ANE names to underlying physical entities. | server MUST use dynamic mappings from ephemeral ANE names to | |||
| Specifically, for the same physical entity, an ALTO server SHOULD | underlying physical entities. Specifically, for the same physical | |||
| assign a different ephemeral ANE name when the entity appears in the | entity, an ALTO server SHOULD assign a different ephemeral ANE name | |||
| responses to different clients or even for different request from the | when the entity appears in the responses to different clients or even | |||
| same client. A RECOMMENDED assignment strategy is to generate ANE | for different requests from the same client. A RECOMMENDED | |||
| names from random numbers. | assignment strategy is to generate ANE names from random numbers. | |||
| Further, to protect the network topology from graph reconstruction | Further, to protect the network topology from graph reconstruction | |||
| (e.g., through isomorphic graph identification [BONDY]), the ALTO | (e.g., through isomorphic graph identification [BONDY]), the ALTO | |||
| server SHOULD consider protection mechanisms to reduce information | server SHOULD consider protection mechanisms to reduce information | |||
| exposure or obfuscate the real information. When doing so, the ALTO | exposure or obfuscate the real information. When doing so, the ALTO | |||
| server must be aware that information reduction/obfuscation may lead | server must be aware that information reduction/obfuscation may lead | |||
| to potential Undesirable Guidance from Authenticated ALTO Information | to a potential risk of undesirable guidance from authenticated ALTO | |||
| risk (Section 15.2 of [RFC7285]). | information (Section 15.2 of [RFC7285]). | |||
| Thus, implementations of ALTO servers involving reduction or | Thus, implementations of ALTO servers involving reduction or | |||
| obfuscation of the Path Vector information SHOULD consider reduction/ | obfuscation of the Path Vector information SHOULD consider reduction/ | |||
| obfuscation mechanisms that can preserve the integrity of ALTO | obfuscation mechanisms that can preserve the integrity of ALTO | |||
| information, for example, by using minimal feasible region | information -- for example, by using minimal feasible region | |||
| compression algorithms [NOVA] or obfuscation protocols | compression algorithms [NOVA] or obfuscation protocols [RESA] | |||
| [RESA][MERCATOR]. However, these obfuscation methods are | [MERCATOR]. However, these obfuscation methods are experimental, and | |||
| experimental and their practical applicability of these methods to | their practical applicability to the generic capability provided by | |||
| the generic capability provided by this extension is not fully | this extension has not been fully assessed. The ALTO server MUST | |||
| assessed. The ALTO server MUST carefully verify that the deployment | carefully verify that the deployment scenario satisfies the security | |||
| scenario satisfies the security assumptions of these methods before | assumptions of these methods before applying them to protect Path | |||
| applying them to protect Path Vector services with sensitive network | Vector services with sensitive network information. | |||
| information. | ||||
| For availability of ALTO service, an ALTO server should be cognizant | For availability of ALTO services, an ALTO server should be cognizant | |||
| that using Path Vector extension might have a new risk: frequent | that using a Path Vector extension might introduce a new risk: | |||
| requesting for Path Vectors might consume intolerable amounts of the | frequent requests for Path Vectors might consume intolerable amounts | |||
| server-side computation and storage, which can break the ALTO server. | of server-side computation and storage. This behavior can break the | |||
| For example, if an ALTO server implementation dynamically computes | ALTO server. For example, if an ALTO server implementation | |||
| the Path Vectors for each request, the service providing Path Vectors | dynamically computes the Path Vectors for each request, the service | |||
| may become an entry point for denial-of-service attacks on the | that provides the Path Vectors may become an entry point for denial- | |||
| availability of an ALTO server. | of-service attacks on the availability of an ALTO server. | |||
| To mitigate this risk, an ALTO server may consider using | To mitigate this risk, an ALTO server may consider using such | |||
| optimizations such as precomputation-and-projection mechanisms | optimizations as precomputation-and-projection mechanisms [MERCATOR] | |||
| [MERCATOR] to reduce the overhead for processing each query. Also, | to reduce the overhead for processing each query. An ALTO server may | |||
| an ALTO server may also protect itself from malicious clients by | also protect itself from malicious clients by monitoring client | |||
| monitoring the behaviors of clients and stopping serving clients with | behavior and stopping service to clients that exhibit suspicious | |||
| suspicious behaviors (e.g., sending requests at a high frequency). | behavior (e.g., sending requests at a high frequency). | |||
| The ALTO service providers must be aware that providing incremental | The ALTO service providers must be aware that providing incremental | |||
| updates of the "max-reservable-bandwidth" may provide information | updates of "max-reservable-bandwidth" may provide information about | |||
| about other consumers of the network. For example, a change of the | other consumers of the network. For example, a change in value may | |||
| value may indicate one or more reservations has been made or changed. | indicate that one or more reservations have been made or changed. To | |||
| To mitigate this risk, an ALTO server can batch the updates and/or | mitigate this risk, an ALTO server can batch the updates and/or add a | |||
| add a random delay before publishing the updates. | random delay before publishing the updates. | |||
| 12. IANA Considerations | 12. IANA Considerations | |||
| 12.1. ALTO Cost Metric Registry | 12.1. "ALTO Cost Metrics" Registry | |||
| This document registers a new entry to the ALTO Cost Metric Registry, | This document registers a new entry in the "ALTO Cost Metrics" | |||
| as instructed by Section 14.2 of [RFC7285]. The new entry is as | registry, per Section 14.2 of [RFC7285]. The new entry is as shown | |||
| shown below in Table 1. | below in Table 1. | |||
| +============+====================+=========================+ | +============+====================+===========+ | |||
| | Identifier | Intended Semantics | Security Considerations | | | Identifier | Intended Semantics | Reference | | |||
| +============+====================+=========================+ | +============+====================+===========+ | |||
| | ane-path | See Section 6.5.1 | See Section 11 | | | ane-path | See Section 6.5.1 | RFC 9275 | | |||
| +------------+--------------------+-------------------------+ | +------------+--------------------+-----------+ | |||
| Table 1: ALTO Cost Metric Registry | Table 1: "ALTO Cost Metrics" Registry | |||
| 12.2. ALTO Cost Mode Registry | 12.2. "ALTO Cost Modes" Registry | |||
| This document registers a new entry to the ALTO Cost Mode Registry, | This document registers a new entry in the "ALTO Cost Modes" | |||
| as instructed by Section 4 of [I-D.bw-alto-cost-mode]. The new entry | registry, per Section 5 of [RFC9274]. The new entry is as shown | |||
| is as shown below in Table 2. | below in Table 2. | |||
| +============+====================+ | +============+=========================+=============+===========+ | |||
| | Identifier | Intended Semantics | | | Identifier | Description | Intended | Reference | | |||
| +============+====================+ | | | | Semantics | | | |||
| | array | See Section 6.5.2 | | +============+=========================+=============+===========+ | |||
| +------------+--------------------+ | | array | Indicates that the cost | See Section | RFC 9275 | | |||
| | | value is a JSON array | 6.5.2 | | | ||||
| +------------+-------------------------+-------------+-----------+ | ||||
| Table 2: ALTO Cost Mode Registry | Table 2: "ALTO Cost Modes" Registry | |||
| 12.3. ALTO Entity Domain Type Registry | 12.3. "ALTO Entity Domain Types" Registry | |||
| This document registers a new entry to the ALTO Domain Entity Type | This document registers a new entry in the "ALTO Entity Domain Types" | |||
| Registry, as instructed by Section 12.2 of | registry, per Section 12.3 of [RFC9240]. The new entry is as shown | |||
| [I-D.ietf-alto-unified-props-new]. The new entry is as shown below | below in Table 3. | |||
| in Table 3. | ||||
| +============+============+=============+===================+=======+ | +============+============+=============+===================+=======+ | |||
| | Identifier |Entity | Hierarchy & |Media Type of |Mapping| | | Identifier |Entity |Hierarchy and| Media Type of |Mapping| | |||
| | |Identifier | Inheritance |Defining Resoucrce |to ALTO| | | |Identifier |Inheritance | Defining Resource |to ALTO| | |||
| | |Encoding | | |Address| | | |Encoding | | |Address| | |||
| | | | | |Type | | | | | | |Type | | |||
| +============+============+=============+===================+=======+ | +============+============+=============+===================+=======+ | |||
| | ane |See Section | None |application/alto- |false | | | ane |See Section |None | application/alto- |false | | |||
| | |6.2.2 | |propmap+json | | | | |6.2.2 | | propmap+json | | | |||
| +------------+------------+-------------+-------------------+-------+ | +------------+------------+-------------+-------------------+-------+ | |||
| Table 3: ALTO Entity Domain Type Registry | Table 3: "ALTO Entity Domain Types" Registry | |||
| Identifier: See Section 6.2.1. | Identifier: See Section 6.2.1. | |||
| Entity Identifier Encoding: See Section 6.2.2. | Entity Identifier Encoding: See Section 6.2.2. | |||
| Hierarchy: None | Hierarchy: None | |||
| Inheritance: None | Inheritance: None | |||
| Media Type of Defining Resource: See Section 6.2.4. | Media Type of Defining Resource: See Section 6.2.4. | |||
| Mapping to ALTO Address Type: This entity type does not map to ALTO | Mapping to ALTO Address Type: This entity type does not map to an | |||
| address type. | ALTO address type. | |||
| Security Considerations: In some usage scenarios, ANE addresses | Security Considerations: In some usage scenarios, ANE addresses | |||
| 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. If a naming schema is | |||
| service providers using addresses of ANEs will be made aware of | used to generate ANE names, either used privately or standardized | |||
| how (or if) the addressing scheme relates to private information | by a future extension, how (or if) the naming schema relates to | |||
| and network proximity, in further iterations of this document. | private information and network proximity must be explained to | |||
| ALTO implementers and service providers. | ||||
| 12.4. ALTO Entity Property Type Registry | 12.4. "ALTO Entity Property Types" Registry | |||
| Two initial entries "max-reservable-bandwidth" and "persistent- | Two initial entries -- "max-reservable-bandwidth" and "persistent- | |||
| entity-id" are registered to the ALTO Domain "ane" in the "ALTO | entity-id" -- are registered for the ALTO domain "ane" in the "ALTO | |||
| Entity Property Type Registry", as instructed by Section 12.3 of | Entity Property Types" registry, per Section 12.4 of [RFC9240]. The | |||
| [I-D.ietf-alto-unified-props-new]. The two new entries are shown | two new entries are shown below in Table 4, and their details can be | |||
| below in Table 4 and their details can be found in Section 12.4.1 and | found in Sections 12.4.1 and 12.4.2 of this document. | |||
| Section 12.4.2. | ||||
| +==========================+====================+===================+ | +==========================+====================+===================+ | |||
| | Identifier | Intended | Media Type of | | | Identifier | Intended | Media Type of | | |||
| | | Semantics | Defining Resource | | | | Semantics | Defining Resource | | |||
| +==========================+====================+===================+ | +==========================+====================+===================+ | |||
| | max-reservable-bandwidth | See Section | application/alto- | | | max-reservable-bandwidth | See Section | application/alto- | | |||
| | | 6.4.1 | propmap+json | | | | 6.4.1 | propmap+json | | |||
| +--------------------------+--------------------+-------------------+ | +--------------------------+--------------------+-------------------+ | |||
| | persistent-entity-id | See Section | application/alto- | | | persistent-entity-id | See Section | application/alto- | | |||
| | | 6.4.2 | propmap+json | | | | 6.4.2 | propmap+json | | |||
| +--------------------------+--------------------+-------------------+ | +--------------------------+--------------------+-------------------+ | |||
| Table 4: Initial Entries for ane Domain in the ALTO Entity | Table 4: Initial Entries for the "ane" Domain in the "ALTO Entity | |||
| Property Types Registry | Property Types" Registry | |||
| 12.4.1. New ANE Property Type: Maximum Reservable Bandwidth | 12.4.1. New ANE Property Type: Maximum Reservable Bandwidth | |||
| Identifier: "max-reservable-bandwidth" | Identifier: "max-reservable-bandwidth" | |||
| Intended Semantics: See Section 6.4.1. | Intended Semantics: See Section 6.4.1. | |||
| Media Type of Defining Resource: application/alto-propmap+json | Media Type of Defining Resource: application/alto-propmap+json | |||
| Security Considerations: This property is essential for applications | Security Considerations: To make better choices regarding bandwidth | |||
| such as large-scale data transfers or overlay network | reservation, this property is essential for applications such as | |||
| interconnection to make better choice of bandwidth reservation. | large-scale data transfers or an overlay network interconnection. | |||
| It may reveal the bandwidth usage of the underlying network and | It may reveal the bandwidth usage of the underlying network and | |||
| can potentially be leveraged to reduce the cost of conducting | can potentially be leveraged to reduce the cost of conducting | |||
| denial-of-service attacks. Thus, the ALTO server MUST consider | denial-of-service attacks. Thus, the ALTO server MUST consider | |||
| protection mechanisms including only providing the information to | such protection mechanisms as providing the information to | |||
| authorized clients, and information reduction and obfuscation as | authorized clients only and applying information reduction and | |||
| introduced in Section 11. | obfuscation as discussed in Section 11. | |||
| 12.4.2. New ANE Property Type: Persistent Entity ID | 12.4.2. New ANE Property Type: Persistent Entity ID | |||
| Identifier: "persistent-entity-id" | Identifier: "persistent-entity-id" | |||
| Intended Semantics: See Section 6.4.2. | Intended Semantics: See Section 6.4.2. | |||
| Media Type of Defining Resource: application/alto-propmap+json | Media Type of Defining Resource: application/alto-propmap+json | |||
| Security Considerations: This property is useful when an ALTO server | Security Considerations: This property is useful when an ALTO server | |||
| wants to selectively expose certain service points whose detailed | wants to selectively expose certain service points whose detailed | |||
| properties can be further queried by applications. The entity IDs | properties can be further queried by applications. As mentioned | |||
| may consider sensitive information about the underlying network, | in Section 12.3.2 of [RFC9240], the entity IDs may reveal | |||
| and an ALTO server should follow the security considerations in | sensitive information about the underlying network. An ALTO | |||
| Section 11 of [I-D.ietf-alto-unified-props-new]. | server should follow the security considerations provided in | |||
| Section 11 of [RFC9240]. | ||||
| 13. References | 13. References | |||
| 13.1. Normative References | 13.1. Normative References | |||
| [I-D.bw-alto-cost-mode] | ||||
| Boucadair, M. and Q. Wu, "A Cost Mode Registry for the | ||||
| Application-Layer Traffic Optimization (ALTO) Protocol", | ||||
| Work in Progress, Internet-Draft, draft-bw-alto-cost-mode- | ||||
| 01, 4 March 2022, <https://datatracker.ietf.org/doc/html/ | ||||
| draft-bw-alto-cost-mode-01>. | ||||
| [I-D.ietf-alto-unified-props-new] | ||||
| Roome, W., Randriamasy, S., Yang, Y. R., Zhang, J. J., and | ||||
| K. Gao, "An ALTO Extension: Entity Property Maps", Work in | ||||
| Progress, Internet-Draft, draft-ietf-alto-unified-props- | ||||
| new-24, 28 February 2022, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-alto- | ||||
| unified-props-new-24>. | ||||
| [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail | |||
| Extensions (MIME) Part Two: Media Types", RFC 2046, | Extensions (MIME) Part Two: Media Types", RFC 2046, | |||
| DOI 10.17487/RFC2046, November 1996, | DOI 10.17487/RFC2046, November 1996, | |||
| <https://www.rfc-editor.org/rfc/rfc2046>. | <https://www.rfc-editor.org/info/rfc2046>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC2387] Levinson, E., "The MIME Multipart/Related Content-type", | [RFC2387] Levinson, E., "The MIME Multipart/Related Content-type", | |||
| RFC 2387, DOI 10.17487/RFC2387, August 1998, | RFC 2387, DOI 10.17487/RFC2387, August 1998, | |||
| <https://www.rfc-editor.org/rfc/rfc2387>. | <https://www.rfc-editor.org/info/rfc2387>. | |||
| [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, | [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, | |||
| DOI 10.17487/RFC5322, October 2008, | DOI 10.17487/RFC5322, October 2008, | |||
| <https://www.rfc-editor.org/rfc/rfc5322>. | <https://www.rfc-editor.org/info/rfc5322>. | |||
| [RFC7285] Alimi, R., Ed., Penno, R., Ed., Yang, Y., Ed., Kiesel, S., | [RFC7285] Alimi, R., Ed., Penno, R., Ed., Yang, Y., Ed., Kiesel, S., | |||
| Previdi, S., Roome, W., Shalunov, S., and R. Woundy, | Previdi, S., Roome, W., Shalunov, S., and R. Woundy, | |||
| "Application-Layer Traffic Optimization (ALTO) Protocol", | "Application-Layer Traffic Optimization (ALTO) Protocol", | |||
| RFC 7285, DOI 10.17487/RFC7285, September 2014, | RFC 7285, DOI 10.17487/RFC7285, September 2014, | |||
| <https://www.rfc-editor.org/rfc/rfc7285>. | <https://www.rfc-editor.org/info/rfc7285>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8189] Randriamasy, S., Roome, W., and N. Schwan, "Multi-Cost | [RFC8189] Randriamasy, S., Roome, W., and N. Schwan, "Multi-Cost | |||
| Application-Layer Traffic Optimization (ALTO)", RFC 8189, | Application-Layer Traffic Optimization (ALTO)", RFC 8189, | |||
| DOI 10.17487/RFC8189, October 2017, | DOI 10.17487/RFC8189, October 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8189>. | <https://www.rfc-editor.org/info/rfc8189>. | |||
| [RFC8895] Roome, W. and Y. Yang, "Application-Layer Traffic | [RFC8895] Roome, W. and Y. Yang, "Application-Layer Traffic | |||
| Optimization (ALTO) Incremental Updates Using Server-Sent | Optimization (ALTO) Incremental Updates Using Server-Sent | |||
| Events (SSE)", RFC 8895, DOI 10.17487/RFC8895, November | Events (SSE)", RFC 8895, DOI 10.17487/RFC8895, November | |||
| 2020, <https://www.rfc-editor.org/rfc/rfc8895>. | 2020, <https://www.rfc-editor.org/info/rfc8895>. | |||
| [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/rfc/rfc8896>. | 2020, <https://www.rfc-editor.org/info/rfc8896>. | |||
| [RFC9240] Roome, W., Randriamasy, S., Yang, Y., Zhang, J., and K. | ||||
| Gao, "An Extension for Application-Layer Traffic | ||||
| Optimization (ALTO): Entity Property Maps", RFC 9240, | ||||
| DOI 10.17487/RFC9240, July 2022, | ||||
| <https://www.rfc-editor.org/info/rfc9240>. | ||||
| [RFC9274] Boucadair, M. and Q. Wu, "A Cost Mode Registry for the | ||||
| Application-Layer Traffic Optimization (ALTO) Protocol", | ||||
| RFC 9274, DOI 10.17487/RFC9274, July 2022, | ||||
| <https://www.rfc-editor.org/info/rfc9274>. | ||||
| 13.2. Informative References | 13.2. Informative References | |||
| [BONDY] Bondy, J.A. and R.L. Hemminger, "Graph reconstruction—a | [ALTO-PERF-METRICS] | |||
| survey", Journal of Graph Theory, Volume 1, Issue 3, pp | Wu, Q., Yang, Y., Lee, Y., Dhody, D., Randriamasy, S., and | |||
| 227-268 , 1977, <https://doi.org/10.1002/jgt.3190010306>. | L. Contreras, "ALTO Performance Cost Metrics", Work in | |||
| Progress, Internet-Draft, draft-ietf-alto-performance- | ||||
| metrics-28, 21 March 2022, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-alto- | ||||
| performance-metrics-28>. | ||||
| [BONDY] Bondy, J.A. and R.L. Hemminger, "Graph reconstruction--a | ||||
| survey", Journal of Graph Theory, Volume 1, Issue 3, pp. | ||||
| 227-268, DOI 10.1002/jgt.3190010306, 1977, | ||||
| <https://onlinelibrary.wiley.com/doi/10.1002/ | ||||
| jgt.3190010306>. | ||||
| [BOXOPT] Xiang, Q., Yu, H., Aspnes, J., Le, F., Kong, L., and Y.R. | [BOXOPT] Xiang, Q., Yu, H., Aspnes, J., Le, F., Kong, L., and Y.R. | |||
| Yang, "Optimizing in the dark: Learning an optimal | Yang, "Optimizing in the Dark: Learning an Optimal | |||
| solution through a simple request interface", Proceedings | Solution through a Simple Request Interface", Proceedings | |||
| of the AAAI Conference on Artificial Intelligence 33, | of the AAAI Conference on Artificial Intelligence 33, | |||
| 1674-1681 , 2019, | 1674-1681, DOI 10.1609/aaai.v33i01.33011674, July 2019, | |||
| <https://doi.org/10.1609/aaai.v33i01.33011674>. | <https://ojs.aaai.org//index.php/AAAI/article/view/3984>. | |||
| [CLARINET] Viswanathan, R., Ananthanarayanan, G., and A. Akella, | [CLARINET] Viswanathan, R., Ananthanarayanan, G., and A. Akella, | |||
| "CLARINET: WAN-Aware Optimization for Analytics Queries", | "CLARINET: WAN-aware optimization for analytics queries", | |||
| In 12th USENIX Symposium on Operating Systems Design and | Proceedings of the 12th USENIX conference on Operating | |||
| Implementation (OSDI 16), USENIX Association, Savannah, | Systems Design and Implementation (OSDI'16), Savannah, GA, | |||
| GA, 435-450 , 2016, | pp. 435-450, November 2016, | |||
| <https://dl.acm.org/doi/abs/10.5555/3026877.3026911>. | <https://dl.acm.org/doi/abs/10.5555/3026877.3026911>. | |||
| [G2] Ros-Giralt, J., Bohara, A., Yellamraju, S., Langston, | [G2] Ros-Giralt, J., Bohara, A., Yellamraju, S., Langston, | |||
| M.H., Lethin, R., Jiang, Y., Tassiulas, L., Li, J., Tan, | M.H., Lethin, R., Jiang, Y., Tassiulas, L., Li, J., Tan, | |||
| Y., and M. Veeraraghavan, "On the Bottleneck Structure of | Y., and M. Veeraraghavan, "On the Bottleneck Structure of | |||
| Congestion-Controlled Networks", Proceedings of the ACM on | Congestion-Controlled Networks", Proceedings of the ACM on | |||
| Measurement and Analysis of Computing Systems, Volume 3, | Measurement and Analysis of Computing Systems, Volume 3, | |||
| Issue 3, pp 1-31 , 2019, | Issue 3, pp. 1-31, DOI 10.1145/3366707, December 2019, | |||
| <https://dl.acm.org/doi/10.1145/3366707>. | <https://dl.acm.org/doi/10.1145/3366707>. | |||
| [HUG] Chowdhury, M., Liu, Z., Ghodsi, A., and I. Stoica, "HUG: | [HUG] Chowdhury, M., Liu, Z., Ghodsi, A., and I. Stoica, "HUG: | |||
| Multi-Resource Fairness for Correlated and Elastic | multi-resource fairness for correlated and elastic | |||
| Demands", 13th USENIX Symposium on Networked Systems | demands", Proceedings of the 13th USENIX Conference on | |||
| Design and Implementation (NSDI 16) (Santa Clara, CA, | Networked Systems Design and Implementation (NSDI'16), | |||
| 2016), 407-424. , 2016, | Santa Clara, CA, pp. 407-424, March 2016, | |||
| <https://dl.acm.org/doi/10.5555/2930611.2930638>. | <https://dl.acm.org/doi/10.5555/2930611.2930638>. | |||
| [I-D.ietf-alto-performance-metrics] | [INTENT-BASED-NETWORKING] | |||
| Wu, Q., Yang, Y. R., Lee, Y., Dhody, D., Randriamasy, S., | Clemm, A., Ciavaglia, L., Granville, L. Z., and J. | |||
| and L. M. C. Murillo, "ALTO Performance Cost Metrics", | Tantsura, "Intent-Based Networking - Concepts and | |||
| Work in Progress, Internet-Draft, draft-ietf-alto- | Definitions", Work in Progress, Internet-Draft, draft- | |||
| performance-metrics-26, 2 March 2022, | irtf-nmrg-ibn-concepts-definitions-09, 24 March 2022, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-alto- | <https://datatracker.ietf.org/doc/html/draft-irtf-nmrg- | |||
| performance-metrics-26>. | ibn-concepts-definitions-09>. | |||
| [I-D.ietf-httpbis-http2bis] | ||||
| Thomson, M. and C. Benfield, "HTTP/2", Work in Progress, | ||||
| Internet-Draft, draft-ietf-httpbis-http2bis-07, 24 January | ||||
| 2022, <https://datatracker.ietf.org/doc/html/draft-ietf- | ||||
| httpbis-http2bis-07>. | ||||
| [I-D.ietf-quic-http] | ||||
| Bishop, M., "Hypertext Transfer Protocol Version 3 | ||||
| (HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- | ||||
| quic-http-34, 2 February 2021, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-quic- | ||||
| http-34>. | ||||
| [JSONiq] "The JSON Query language", 2020, | [JSONiq] JSONiq, "The JSON Query Language", 2022, | |||
| <https://www.jsoniq.org/>. | <https://www.jsoniq.org/>. | |||
| [MERCATOR] Xiang, Q., Zhang, J., Wang, X., Liu, Y., Guok, C., Le, F., | [MERCATOR] Xiang, Q., Zhang, J., Wang, X., Liu, Y., Guok, C., Le, F., | |||
| MacAuley, J., Newman, H., and Y.R. Yang, "Toward Fine- | MacAuley, J., Newman, H., and Y.R. Yang, "Toward Fine- | |||
| Grained, Privacy-Preserving, Efficient Multi-Domain | Grained, Privacy-Preserving, Efficient Multi-Domain | |||
| Network Resource Discovery", IEEE/ACM IEEE Journal on | Network Resource Discovery", IEEE/ACM, IEEE Journal on | |||
| Selected Areas of Communication 37(8): 1924-1940, 2019, | Selected Areas in Communications, Volume 37, Issue 8, pp. | |||
| <https://doi.org/10.1109/JSAC.2019.2927073>. | 1924-1940, DOI 10.1109/JSAC.2019.2927073, August 2019, | |||
| <https://ieeexplore.ieee.org/document/8756056>. | ||||
| [MOWIE] Zhang, Y., Li, G., Xiong, C., Lei, Y., Huang, W., Han, Y., | [MOWIE] Zhang, Y., Li, G., Xiong, C., Lei, Y., Huang, W., Han, Y., | |||
| Walid, A., Yang, Y.R., and Z. Zhang, "MoWIE: Toward | Walid, A., Yang, Y.R., and Z. Zhang, "MoWIE: Toward | |||
| Systematic, Adaptive Network Information Exposure as an | Systematic, Adaptive Network Information Exposure as an | |||
| Enabling Technique for Cloud-Based Applications over 5G | Enabling Technique for Cloud-Based Applications over 5G | |||
| and Beyond", In Proceedings of the Workshop on Network | and Beyond", Proceedings of the Workshop on Network | |||
| Application Integration/CoDesign, ACM, Virtual Event USA, | Application Integration/CoDesign (NAI '20), ACM, Virtual | |||
| 20-27. , 2020, <https://doi.org/10.1145/3405672.3409489>. | Event USA, pp. 20-27, DOI 10.1145/3405672.3409489, August | |||
| 2020, <https://dl.acm.org/doi/10.1145/3405672.3409489>. | ||||
| [NOVA] Gao, K., Xiang, Q., Wang, X., Yang, Y.R., and J. Bi, "An | [NOVA] Gao, K., Xiang, Q., Wang, X., Yang, Y.R., and J. Bi, "An | |||
| objective-driven on-demand network abstraction for | Objective-Driven On-Demand Network Abstraction for | |||
| adaptive applications", IEEE/ACM Transactions on | Adaptive Applications", IEEE/ACM Transactions on | |||
| Networking (TON) Vol 27, no. 2 (2019): 805-818., 2019, | Networking (TON) Vol. 27, Issue 2, pp. 805-818, | |||
| <https://doi.org/10.1109/IWQoS.2017.7969117>. | DOI 10.1109/TNET.2019.2899905, April 2019, | |||
| <https://doi.org/10.1109/TNET.2019.2899905>. | ||||
| [RESA] Xiang, Q., Zhang, J., Wang, X., Liu, Y., Guok, C., Le, F., | [RESA] Xiang, Q., Zhang, J., Wang, X., Liu, Y., Guok, C., Le, F., | |||
| MacAuley, J., Newman, H., and Y.R. Yang, "Fine-grained, | MacAuley, J., Newman, H., and Y.R. Yang, "Fine-Grained, | |||
| multi-domain network resource abstraction as a fundamental | Multi-Domain Network Resource Abstraction as a Fundamental | |||
| primitive to enable high-performance, collaborative data | Primitive to Enable High-Performance, Collaborative Data | |||
| sciences", Proceedings of the Super Computing 2018, | Sciences", SC18: International Conference for High | |||
| 5:1-5:13 , 2019, <https://doi.org/10.1109/SC.2018.00008>. | Performance Computing, Networking, Storage and Analysis, | |||
| pp. 58-70, DOI 10.1109/SC.2018.00008, November 2018, | ||||
| <https://ieeexplore.ieee.org/document/8665783>. | ||||
| [RFC2216] Shenker, S. and J. Wroclawski, "Network Element Service | [RFC2216] Shenker, S. and J. Wroclawski, "Network Element Service | |||
| Specification Template", RFC 2216, DOI 10.17487/RFC2216, | Specification Template", RFC 2216, DOI 10.17487/RFC2216, | |||
| September 1997, <https://www.rfc-editor.org/rfc/rfc2216>. | September 1997, <https://www.rfc-editor.org/info/rfc2216>. | |||
| [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | |||
| Border Gateway Protocol 4 (BGP-4)", RFC 4271, | Border Gateway Protocol 4 (BGP-4)", RFC 4271, | |||
| DOI 10.17487/RFC4271, January 2006, | DOI 10.17487/RFC4271, January 2006, | |||
| <https://www.rfc-editor.org/rfc/rfc4271>. | <https://www.rfc-editor.org/info/rfc4271>. | |||
| [SENSE] "Software Defined Networking (SDN) for End-to-End | [RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | |||
| DOI 10.17487/RFC9113, June 2022, | ||||
| <https://www.rfc-editor.org/info/rfc9113>. | ||||
| [RFC9114] Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114, | ||||
| June 2022, <https://www.rfc-editor.org/info/rfc9114>. | ||||
| [SENSE] ESnet, "Software Defined Networking (SDN) for End-to-End | ||||
| Networked Science at the Exascale", 2019, | Networked Science at the Exascale", 2019, | |||
| <https://www.es.net/network-r-and-d/sense/>. | <https://www.es.net/network-r-and-d/sense/>. | |||
| [SEREDGE] Contreras, L., Baliosian, J., Martı́nez-Julia, P., and J. | [SEREDGE] Contreras, L., Baliosian, J., Martínez-Julia, P., and J. | |||
| Serrat, "Computing at the Edge: But, what Edge?", In | Serrat, "Computing at the Edge: But, what Edge?", | |||
| proceedings of the NOMS 2020 - 2020 IEEE/IFIP Network | Proceedings of NOMS 2020 - 2020 IEEE/IFIP Network | |||
| Operations and Management Symposium. pp. 1-9. , 2020, | Operations and Management Symposium, pp. 1-9, | |||
| <https://doi.org/10.1109/NOMS47738.2020.9110342>. | DOI 10.1109/NOMS47738.2020.9110342, April 2020, | |||
| <https://ieeexplore.ieee.org/document/9110342>. | ||||
| [SWAN] Hong, C., Kandula, S., Mahajan, R., Zhang, M., Gill, V., | [SWAN] Hong, C., Kandula, S., Mahajan, R., Zhang, M., Gill, V., | |||
| Nanduri, M., and R. Wattenhofer, "Achieving High | Nanduri, M., and R. Wattenhofer, "Achieving high | |||
| Utilization with Software-driven WAN", In Proceedings of | utilization with software-driven WAN", Proceedings of the | |||
| the ACM SIGCOMM 2013 Conference on SIGCOMM (SIGCOMM '13), | ACM SIGCOMM 2013 conference on SIGCOMM (SIGCOMM '13), New | |||
| ACM, New York, NY, USA, 15-26. , 2013, | York, NY, pp. 15-26, DOI 10.1145/2486001.2486012, August | |||
| <http://doi.acm.org/10.1145/2486001.2486012>. | 2013, <https://dl.acm.org/doi/10.1145/2486001.2486012>. | |||
| [UNICORN] Xiang, Q., Chen, S., Gao, K., Newman, H., Taylor, I., | [UNICORN] Xiang, Q., Wang, T., Zhang, J., Newman, H., Yang, Y.R., | |||
| Zhang, J., and Y.R. Yang, "Unicorn: Unified Resource | and Y. Liu, "Unicorn: Unified resource orchestration for | |||
| Orchestration for Multi-Domain, Geo-Distributed Data | multi-domain, geo-distributed data analytics", Future | |||
| Analytics", 2017 IEEE SmartWorld, Ubiquitous Intelligence | Generation Computer Systems, Volume 93, pp. 188-197, | |||
| Computing, Advanced Trusted Computed, Scalable Computing | DOI 10.1016/j.future.2018.09.048, April 2019, | |||
| Communications, Cloud Big Data Computing, Internet of | <https://www.sciencedirect.com/science/article/abs/pii/ | |||
| People and Smart City Innovation | S0167739X18302413?via%3Dihub>. | |||
| (SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI) (Aug. 2017), | ||||
| 1-6. , 2017, | ||||
| <https://doi.org/10.1016/j.future.2018.09.048>. | ||||
| [XQuery] "XQuery 3.1: An XML Query Language", 2017, | [XQuery] Robie, J., Ed., Dyck, M., Ed., and J. Spiegel, Ed., | |||
| <https://www.w3.org/TR/xquery-31/>. | "XQuery 3.1: An XML Query Language", W3C Recommendation, | |||
| March 2017, <https://www.w3.org/TR/xquery-31/>. | ||||
| Appendix A. Acknowledgments | Acknowledgments | |||
| The authors would like to thank discussions with Andreas Voellmy, | The authors would like to thank Andreas Voellmy, Erran Li, Haibin | |||
| Erran Li, Haibin Song, Haizhou Du, Jiayuan Hu, Qiao Xiang, Tianyuan | Song, Haizhou Du, Jiayuan Hu, Tianyuan Liu, Xiao Shi, Xin Wang, and | |||
| Liu, Xiao Shi, Xin Wang, and Yan Luo. The authors thank Greg | Yan Luo for fruitful discussions. The authors thank Greg Bernstein, | |||
| Bernstein, Dawn Chen, Wendy Roome, and Michael Scharf for their | Dawn Chen, Wendy Roome, and Michael Scharf for their contributions to | |||
| contributions to earlier drafts. | earlier draft versions of this document. | |||
| The authors would also like to thank Tim Chown, Luis Contreras, Roman | The authors would also like to thank Tim Chown, Luis Contreras, Roman | |||
| Danyliw, Benjamin Kaduk, Erik Kline, Suresh Krishnan, Murray | Danyliw, Benjamin Kaduk, Erik Kline, Suresh Krishnan, Murray | |||
| Kucherawy, Warren Kumari, Danny Lachos, Francesca Palombini, Eric | Kucherawy, Warren Kumari, Danny Lachos, Francesca Palombini, Éric | |||
| Vyncke, Samuel Weiler, and Qiao Xiang whose feedback and suggestions | Vyncke, Samuel Weiler, and Qiao Xiang, whose feedback and suggestions | |||
| are invaluable to improve the practicability and conciseness of this | were invaluable for improving the practicability and conciseness of | |||
| document, and Mohamed Boucadair, Martin Duke, Vijay Gurbani, Jan | this document; and Mohamed Boucadair, Martin Duke, Vijay Gurbani, Jan | |||
| Seedorf, and Qin Wu who provide great support and guidance. | Seedorf, and Qin Wu, who provided great support and guidance. | |||
| Appendix B. Revision Logs (To be removed before publication) | ||||
| B.1. Changes since -20 | ||||
| Reivision -21 | ||||
| * changes the normative requirement on protecting confidentiality of | ||||
| PV information with softer language | ||||
| B.2. Changes since -19 | ||||
| Revision -20 | ||||
| * changes the IANA registry information | ||||
| * adopts the comments from IESG reviews | ||||
| B.3. Changes since -18 | ||||
| Revision -19 | ||||
| * adds detailed examples for use cases | ||||
| * clarify terms with ambiguous meanings | ||||
| B.4. Changes since -17 | ||||
| Revision -18 | ||||
| * changes the specification for content-id to conform to [RFC2387] | ||||
| and [RFC5322] | ||||
| * adds IPv6 examples | ||||
| B.5. Changes since -16 | ||||
| Revision -17 | ||||
| * adds items for media type of defining resources in IANA | ||||
| considerations | ||||
| B.6. Changes since -15 | ||||
| Revision -16 | ||||
| * resolves the compatibility with the Multi-Cost extension (RFC | ||||
| 8189) | ||||
| * adds media types of defining resources for ANE property types (for | ||||
| IANA registration) | ||||
| B.7. Changes since -14 | ||||
| Revision -15 | ||||
| * fixes the IDNits warnings, | ||||
| * fixes grammar issues, | ||||
| * addresses the comments in the AD review. | ||||
| B.8. Changes since -13 | ||||
| Revision -14 | ||||
| * addresses the comments in the chair review, | ||||
| * fixes most issues raised by IDNits. | ||||
| B.9. Changes since -12 | ||||
| Revision -13 | ||||
| * changes the abstract based on the chairs' reviews | ||||
| * integrates Richard's responds to WGLC reviews | ||||
| B.10. Changes since -11 | ||||
| Revision -12 | ||||
| * clarifies the definition of ANEs in a similar way as how Network | ||||
| Elements is defined in [RFC2216] | ||||
| * restructures several paragraphs that are not clear (Sec 3, Path | ||||
| Vector bullet, Sec 4.2, Sec 5.1.3, Sec 6.2.4, Sec 6.4.2, Sec 9.3) | ||||
| * uses "ALTO Entity Domain Type Registry" | ||||
| B.11. Changes since -10 | ||||
| Revision -11 | ||||
| * replaces "part" with "components" in the abstract; | ||||
| * identifies additional requirements (AR) derived from the flow | ||||
| scheduling example, and introduces how the extension addresses the | ||||
| additional requirements | ||||
| * fixes the inconsistent use of "start" parameter in multipart | ||||
| responses; | ||||
| * specifies explicitly how to handle "cost-constraints"; | ||||
| * uses the latest IANA registration mechanism defined in | ||||
| [I-D.ietf-alto-unified-props-new]; | ||||
| * renames "persistent-entities" to "persistent-entity-id"; | ||||
| * makes "application/alto-propmap+json" as the media type of | ||||
| defining resources for the "ane" domain; | ||||
| * updates the examples; | ||||
| * adds the discussion on ephemeral and persistent ANEs. | ||||
| B.12. Changes since -09 | ||||
| Revision -10 | ||||
| * revises the introduction which | ||||
| - extends the scope where the PV extension can be applied beyond | ||||
| the "path correlation" information | ||||
| * brings back the capacity region use case to better illustrate the | ||||
| problem | ||||
| * revises the overview to explain and defend the concepts and | ||||
| decision choices | ||||
| * fixes inconsistent terms, typos | ||||
| B.13. Changes since -08 | ||||
| This revision | ||||
| * fixes a few spelling errors | ||||
| * emphasizes that abstract network elements can be generated on | ||||
| demand in both introduction and motivating use cases | ||||
| B.14. Changes Since Version -06 | ||||
| * We emphasize the importance of the path vector extension in two | ||||
| aspects: | ||||
| 1. It expands the problem space that can be solved by ALTO, from | ||||
| preferences of network paths to correlations of network paths. | ||||
| 2. It is motivated by new usage scenarios from both application's | ||||
| and network's perspectives. | ||||
| * More use cases are included, in addition to the original capacity | ||||
| region use case. | ||||
| * We add more discussions to fully explore the design space of the | ||||
| path vector extension and justify our design decisions, including | ||||
| the concept of abstract network element, cost type (reverted to | ||||
| -05), newer capabilities and the multipart message. | ||||
| * Fix the incremental update process to be compatible with SSE -16 | ||||
| draft, which uses client-id instead of resource-id to demultiplex | ||||
| updates. | ||||
| * Register an additional ANE property (i.e., persistent-entities) to | ||||
| cover all use cases mentioned in the draft. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Kai Gao | Kai Gao | |||
| Sichuan University | Sichuan University | |||
| No.24 South Section 1, Yihuan Road | No.24 South Section 1, Yihuan Road | |||
| Chengdu | Chengdu | |||
| 610000 | 610000 | |||
| China | China | |||
| Email: kaigao@scu.edu.cn | Email: kaigao@scu.edu.cn | |||
| Young Lee | Young Lee | |||
| Samsung | Samsung | |||
| South Korea | Republic of Korea | |||
| Email: younglee.tx@gmail.com | Email: younglee.tx@gmail.com | |||
| Sabine Randriamasy | Sabine Randriamasy | |||
| Nokia Bell Labs | Nokia Bell Labs | |||
| Route de Villejust | Route de Villejust | |||
| 91460 Nozay | 91460 Nozay | |||
| France | France | |||
| Email: sabine.randriamasy@nokia-bell-labs.com | Email: sabine.randriamasy@nokia-bell-labs.com | |||
| Yang Richard Yang | Yang Richard Yang | |||
| Yale University | Yale University | |||
| 51 Prospect Street | 51 Prospect Street | |||
| New Haven, CT | New Haven, CT 06511 | |||
| United States of America | United States of America | |||
| Email: yry@cs.yale.edu | Email: yry@cs.yale.edu | |||
| Jingxuan Jensen Zhang | Jingxuan Jensen Zhang | |||
| Tongji University | Tongji University | |||
| 4800 Caoan Road | 4800 Caoan Road | |||
| Shanghai | Shanghai | |||
| 201804 | 201804 | |||
| China | China | |||
| Email: jingxuan.n.zhang@gmail.com | Email: jingxuan.n.zhang@gmail.com | |||
| End of changes. 339 change blocks. | ||||
| 1221 lines changed or deleted | 1080 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||