Internet Engineering Task Force H. Guo, Ed. Internet-Draft CAICT Intended status: Informational July 6, 2015 Expires: January 7, 2016 Interoperability Testing of the Application-Layer Traffic Optimization (ALTO) Protocol draft-guo-alto-interop-01 Abstract The Application-Layer Traffic Optimization (ALTO) protocol is designed to allow entities with knowledge about the network infrastructure to export such information to applications, with the goal of modifying network resource consumption patterns while maintaining or improving application performance. This document provides a framework that contains data structures, configurations, and message templates, to test the functionality and interoperability of an ALTO client and an ALTO server. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on January 7, 2016. Copyright Notice Copyright (c) 2015 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect Guo Expires January 7, 2016 [Page 1] Internet-Draft ALTO Interop July 2015 to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. 1. Introduction The Application-Layer Traffic Optimization (ALTO) protocol is designed to allow entities with knowledge about the network infrastructure to export such information to applications, with the goal of modifying network resource consumption patterns while maintaining or improving application performance. This document provides a framework that contains data structures, configurations, and message templates, to test the functionality and interoperability of an ALTO client and an ALTO server. This document is informational and is NOT NORMATIVE on any aspect of the ALTO protocol. The normative behavior of ALTO entities is prescribed in [RFC7285]. 2. Philosophy and Methods The philosophy of this document are: First, rather than giving every possible test cases, this document focuses on the key services offerred by ALTO protocol, only giving the test cases as necessary. Second, rather than specifying every details, this document focuses on the framework of functionality and interoperability between an ALTO client and an ALTO server, leaving the flexibility of implement design as possible. The key ALTO services include Information Resource Directory retrieval, Map Service, Map-Filtering Service, Endpoint Property Service, and Endpoint Cost Service. Some services MUST be provided by an ALTO server, and other services MAY be provided by an ALTO server. In [RFC7285], some services are defined as "MUST", others are defined as "MAY", this document categorizes the test cases into mandatory cases (MUST cases) and optional (MAY cases). To uniformly interpret the key resources of the ALTO messages, this document gives the uniform data structures and the configruation contents on an ALTO server. This document gives the templates of messages in all test cases, these templates are not the concrete messages in the tests, as different configuration contents may come out different expressions, and for the sake of brevity, not all headers are depicted. Guo Expires January 7, 2016 [Page 2] Internet-Draft ALTO Interop July 2015 3. Server Data and Configuration 3.1. Server Data The basic data structure of ALTO is based on abstract maps of a network. These maps are divided into network maps and cost maps. The network map contains a series of PIDs, a provider-defined network location identifier as specified in [RFC7285]. This document gives a uniform default network map as follow. PID IP Address Block ------------------------------- mypid1 10.0.0.0/8, 15.0.0.0/8 mypid2 192.168.0.0/16 mypid3 192.168.10.0/24 peeringpid1 128.0.0.0/16 peeringpid2 130.0.0.0/16, 2001:DB8::/32 transitpid1 132.0.0.0/16 transitpid2 135.0.0.0/16 defaultpid 0.0.0.0/0, ::/ Figure 1: A Default Network Map The cost map defines path costs amongst sets of source and destination network locations. path cost is the end-to-end cost from the source to the destination. Path costs have Cost Metric and Cost Mode as their attributes. A cost map corresponding to the above network map is shown below. In this cost map, cost metrics are routingcost, which MUST be offered by an ALTO server in [RFC7285]. In [RFC7285], An ALTO server MUST support at least one cost mode of numerical mode and ordinal mode. For sake of test the two modes, in this cost maps, each path has the both modes: numerical and ordinal. Guo Expires January 7, 2016 [Page 3] Internet-Draft ALTO Interop July 2015 Source Destination Cost Mode PID PID Numerical Ordinal --------------------------------------------- mypid1 mypid1 0 1 " mypid2 0 1 " mypid3 0 1 " peeringpid1 0 1 " peeringpid2 0 1 " transitpid1 5 3 " transitpid2 10 7 " defaultpid 4 2 mypid2 mypid1 0 1 " mypid2 0 1 " mypid3 0 1 " peeringpid1 0 1 " peeringpid2 0 1 " transitpid1 7 5 " transitpid2 8 6 " defaultpid 4 2 mypid3 mypid1 0 1 " mypid2 0 1 " mypid3 0 1 " peeringpid1 0 1 " peeringpid2 0 1 " transitpid1 8 6 " transitpid2 8 6 " defaultpid 5.1 4 Figure 2: Corresponding Cost Map Note that the above represents a sparse cost map, i.e., the ALTO server is not defining a path cost from each source PID to each destination PID. It is only defining the costs that it is interested in serving. 3.2. Server Configuration An ALTO server uses the Information Resource Directory (IRD) to publish available information resources and their attributes. The mainly configuration contents are in IDR. The following are the specific contents, and this document use a variable to present each item. Different server designs can use different configurations Guo Expires January 7, 2016 [Page 4] Internet-Draft ALTO Interop July 2015 Configuration Content Variable ---------------------------------------------------------------- server host SERVER_HOST url of IDR SERVER_HOST/DIRECTORY default-alto-network-map DEFAULT_NETWORK_MAP uri of default-alto-network-map DEFAULT_NETWORK_MAP_URI url of default-alto-network-map SERVER_HOST/NETWORKMAP tag of default-alto-network-map DEFAULT_NETWORK_MAP_TAG cost type(routingcost, numerial) NUM_ROUTING cost type(routingcost, ordinal) ORD_ROUTING cost map(routingcost, numerial) NUM_ROUTING_COST_MAP uri of cost map(routingcost, numerial) NUM_ROUTING_COST_MAP_URI url of cost map(routingcost, numerial) SERVER_HOST/N_R_COSTMAP cost map(routingcost, ordinal) ORD_ROUTING_COST_MAP uri of cost map(routingcost, ordinal) ORD_ROUTING_COST_MAP_URI url of cost map(routingcost, ordinal) SERVER_HOST/O_R_COSTMAP filtered network map FILTERRED_NETWORK_MAP uri of filtered network map FILTERRED_NETWORK_MAP_URI url of filtered network map SERVER_HOST/F_NETWORKMAP filtered cost map FILTERRED_COST_MAP uri of filtered cost map FILTERRED_COST_MAP_URI url of filtered cost map SERVER_HOST/F_COSTMAP endpoint property ENDPOINT_PROPERTY uri of endpoint property ENDPOINT_PROPERTY_URI url of endpoint property SERVER_HOST/EP_PROPERTY endpoint cost ENDPOINT_COST uri of endpoint cost ENDPOINT_COST_URI url of endpoint cost SERVER_HOST/EP_COST In this document, assume that during the test, the network map does not change. 4. Mandatory Cases Mandatory cases are corresponding to the services that MUST be provided in [RFC7285]. 4.1. Information Resource Directory 4.1.1. Case: Test-IRD-1 An ALTO client sends a message to retrive IRD. GET /DIRECTORY HTTP/1.1 Host: SERVER_HOST Accept: application/alto-directory+json,application/alto-error+json HTTP/1.1 200 OK Guo Expires January 7, 2016 [Page 5] Internet-Draft ALTO Interop July 2015 Content-Length: **** Content-Type: application/alto-directory+json { "meta" : { "cost-types": { "NUM_ROUTING": { "cost-mode" : "numerical", "cost-metric": "routingcost" }, "ORD_ROUTING": { "cost-mode" : "ordinal", "cost-metric": "routingcost" } }, "default-alto-network-map" : "DEFAULT_NETWORK_MAP" }, "resources" : { "DEFAULT_NETWORK_MAP" : { "uri" : "DEFAULT_NETWORK_MAP_URI", "media-type" : "application/alto-networkmap+json" }, "NUM_ROUTING_COST_MAP" : { "uri" : "NUM_ROUTING_COST_MAP_URI", "media-type" : "application/alto-costmap+json", "capabilities" : { "cost-type-names" : [ "NUM_ROUTING" ] }, "uses": [ "DEFAULT_NETWORK_MAP" ] }, "ORD_ROUTING_COST_MAP" : { "uri" : "ORD_ROUTING_COST_MAP_URI", "media-type" : "application/alto-costmap+json", "capabilities" : { "cost-type-names" : [ "ORD_ROUTING" ] }, "uses": [ "DEFAULT_NETWORK_MAP" ] }, "FILTERRED_NETWORK_MAP" : { "uri" : "FILTERRED_NETWORK_MAP_URI", "media-type" : "application/alto-networkmap+json", "accepts" : "application/alto-networkmapfilter+json", "uses": [ "DEFAULT_NETWORK_MAP" ] }, "FILTERRED_COST_MAP" : { "uri" : "FILTERRED_COST_MAP_URI", "media-type" : "application/alto-costmap+json", "accepts" : "application/alto-endpointpropparams+json", Guo Expires January 7, 2016 [Page 6] Internet-Draft ALTO Interop July 2015 "capabilities" : { "cost-constraints" : true, "cost-type-names" : [ "NUM_ROUTING", "ORD_ROUTING"] }, "uses": [ "DEFAULT_NETWORK_MAP" ] }, "ENDPOINT_PROPERTY" : { "uri" : "ENDPOINT_PROPERTY_URI", "media-type" : "application/alto-endpointprop+json", "accepts" : "application/alto-endpointpropparams+json", "capabilities" : { "cost-constraints" : true, "prop-types" : [ "DEFAULT_NETWORK_MAP.pid"] }, }, "ENDPOINT_COST" : { "uri" : "ENDPOINT_COST_URI", "media-type" : "application/alto-endpointcost+json", "accepts" : "application/alto-endpointcostparams+json", "capabilities" : { "cost-constraints" : true, "cost-type-names" : [ "NUM_ROUTING", "ORD_ROUTING"] } } } } Filterred network map, filterred cost map and endpoit cost resources are optional, not MUST services. 4.2. Maps Service 4.2.1. Case: Test-MAPS-1 An ALTO client retrieves a complete network map from an ALTO server. Guo Expires January 7, 2016 [Page 7] Internet-Draft ALTO Interop July 2015 GET /NETWORKMAP HTTP/1.1 Host: SERVER_HOST Accept: application/alto-networkmap+json,application/alto-error+json HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-networkmap+json { "meta" : { "vtag": { "resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } }, "network-map" : { "mypid1" : { "ipv4" : [ "10.0.0.0/8", "15.0.0.0/8" ] }, "mypid2" : { "ipv4" : [ "192.168.0.0/16" ] }, "mypid3" : { "ipv4" : [ "192.168.10.0/24" ] }, "peeringpid1" : { "ipv4" : [ "128.0.0.0/16" ] }, "peeringpid2" : { "ipv4" : [ "130.0.0.0/16" ], "ipv6" : [ "2001:DB8::/32"] }, "transitpid1" : { "ipv4" : [ "132.0.0.0/16" ] }, "transitpid2" : { "ipv4" : [ "135.0.0.0/16" ] }, "defaultpid" : { "ipv4" : [ "0.0.0.0/0" ], "ipv6" : [ "::/0" ] } } } } Guo Expires January 7, 2016 [Page 8] Internet-Draft ALTO Interop July 2015 4.2.2. Case: Test-MAPS-2 An ALTO client retrieves a complete cost map for the numerical cost mode from an ALTO server. In the response, the version tag of the cost map ("dependent-vtag") corresponds to the network map of the same version shown in test case Test-MAPS-1. In this document, assume that all version tags correspond to the same network map. GET /N_R_COSTMAP HTTP/1.1 Host: SERVER_HOST Accept: application/alto-costmap+json,application/alto-error+json HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-costmap+json { "meta" : { "dependent-vtags" : [ {"resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } ], "cost-type" : {"cost-mode" : "numerical", "cost-metric": "routingcost" } }, "cost-map" : { "mypid1": { "mypid1" : 0, "mypid2" : 0, "mypid3" : 0, "peeringpid1" : 0, "peerinpid2" : 0, "transitpid1" : 5, "transitpid2" : 10, "defaultpid" : 4}, "mypid2": { "mypid1" : 0, "mypid2" : 0, "mypid3" : 0, "peeringpid1" : 0, "peerinpid2" : 0, "transitpid1" : 7, "transitpid2" : 8, "defaultpid" : 4}, "mypid3": { "mypid1" : 0, "mypid2" : 0, "mypid3" : 0, "peeringpid1" : 0, "peerinpid2" : 0, "transitpid1" : 8, "transitpid2" : 8, "defaultpid" : 5.1} } } } Guo Expires January 7, 2016 [Page 9] Internet-Draft ALTO Interop July 2015 4.2.3. Case: Test-MAPS-3 An ALTO client retrieves a complete cost map for the ordinal cost mode. In the response, the version tag of the cost map ("dependent- vtag") corresponds to the network map of the same version shown in test Section 4.2.1. GET /O_R_COSTMAP HTTP/1.1 Host: SERVER_HOST Accept: application/alto-costmap+json,application/alto-error+json HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-costmap+json { "meta" : { "dependent-vtags" : [ {"resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } ], "cost-type" : {"cost-mode" : "ordinal", "cost-metric": "routingcost" } }, "cost-map" : { "mypid1": { "mypid1" : 1, "mypid2" : 1, "mypid3" : 1, "peeringpid1" : 1, "peeringpid2" : 1, "transitpid1" : 3, "transitpid2" : 7, "defaultpid" : 2}, "mypid2": { "mypid1" : 1, "mypid2" : 1, "mypid3" : 1, "peeringpid1" : 1, "peeringpid2" : 1, "transitpid1" : 5, "transitpid2" : 6, "defaultpid" : 2}, "mypid3": { "mypid1" : 1, "mypid2" : 1, "mypid3" : 1, "peeringpid1" : 1, "peeringpid2" : 1, "transitpid1" : 6, "transitpid2" : 6, "defaultpid" : 4} } } } 4.3. Endpoint Property Service Endpoint Property Service provides information about endpoint properties to ALTO clients. An ALTO server MUST define "pid" Guo Expires January 7, 2016 [Page 10] Internet-Draft ALTO Interop July 2015 endpoint property type. Note that the longest prefix match is used to retrieve the corresponding PID property. 4.3.1. Case: Test-EPS-1 An ALTO client retrieves a PID for IPv4 address 192.168.1.23 from an ALTO Server. POST /EP_PROPERTY HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointpropparams+json Accept: application/alto-endpointprop+json,application/alto-error+json { "properties" : [ "DEFAULT_NETWORK_MAP.pid" ], "endpoints" : [ "ipv4:192.168.1.23" ] } HTTP/1.1 200 OK Content-Length: *** { "meta" : { "dependent-vtags" : [ {"resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } ] }, "endpoint-properties": { "ipv4:192.168.1.23" : {"DEFAULT_NETWORK_MAP.pid": "mypid2"} } } 4.3.2. Case: Test-EPS-2 An ALTO client retrieves a PID for IPv4 address 192.168.10.23 from an ALTO server. Guo Expires January 7, 2016 [Page 11] Internet-Draft ALTO Interop July 2015 POST /EP_PROPERTY HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointpropparams+json Accept: application/alto-endpointprop+json,application/alto-error+json { "properties" : [ "DEFAULT_NETWORK_MAP.pid" ], "endpoints" : [ "ipv4:192.168.10.23" ] } HTTP/1.1 200 OK Content-Length: *** { "meta" : { "dependent-vtags" : [ {"resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } ] }, "endpoint-properties": { "ipv4:192.168.10.23" : { "DEFAULT_NETWORK_MAP.pid": "mypid3" } } } 4.3.3. Case: Test-EPS-3 An ALTO client retrieves a PID for IPv4 address 201.1.13.12 from an ALTO server. Guo Expires January 7, 2016 [Page 12] Internet-Draft ALTO Interop July 2015 POST /EP_PROPERTY HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointpropparams+json Accept: application/alto-endpointprop+json,application/alto-error+json { "properties" : [ "DEFAULT_NETWORK_MAP.pid" ], "endpoints" : [ "ipv4:201.1.13.12" ] } HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-endpointprop+json { "meta" : { "dependent-vtags" : [ {"resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } ] }, "endpoint-properties": { "ipv4:192.168.10.23" : { "DEFAULT_NETWORK_MAP.pid": "mypid3" } } } 4.3.4. Case: Test-EPS-4 An ALTO client retrieves a PID for an IPv4 and IPv6 address from an ALTO server. Guo Expires January 7, 2016 [Page 13] Internet-Draft ALTO Interop July 2015 POST /EP_PROPERTY HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointpropparams+json Accept: application/alto-endpointprop+json,application/alto-error+json { "properties" : [ "DEFAULT_NETWORK_MAP.pid" ], "endpoints" : [ "ipv6:1234::192.168.1.23", "ipv4:132.0.10.12" ] } HTTP/1.1 200 OK Content-Type: application/alto-endpointprop+json Content-Length: *** { "meta" : { "dependent-vtags" : [ {"resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } ] }, "endpoint-properties": { "ipv6:1234::192.168.1.23" : { "DEFAULT_NETWORK_MAP.pid" : "defaultpid" }, "ipv4:132.0.10.12" : {"DEFAULT_NETWORK_MAP.pid" : "transitpid1"} } } 4.4. Protocol Errors 4.4.1. Case: Test-ERR-1 An ALTO client sends a parsing error body in the request --- a missing closing brace ('}'). POST /EP_PROPERTY HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointpropparams+json Accept: application/alto-endpointprop+json,application/alto-error+json { "properties" : [ "DEFAULT_NETWORK_MAP.pid" ], "endpoints" : [ "ipv4:192.168.10.23" ] Guo Expires January 7, 2016 [Page 14] Internet-Draft ALTO Interop July 2015 The server returns an HTTP response code of 400 with ALTO error code of E_SYNTAX (c.f., Table 1 [RFC7285]). HTTP/1.1 400 Bad Request Content-Type: application/alto-error+json Content-Length: *** { "code": "E_SYNTAX" } 4.4.2. Case: Test-ERR-2 An ALTO client sends a malformed request --- the "properties" member for the Endpoint Property service is missing. POST /EP_PROPERTY HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointpropparams+json Accept: application/alto-endpointprop+json,application/alto-error+json { "properties" : [ ], "endpoints" : [ "ipv4:192.168.10.23" ] } The server returns an HTTP response code of 400 with ALTO error code of E_JSON_FIELD_MISSING (c.f., Table 1 [RFC7285]). HTTP/1.1 400 Bad Request Content-Type: application/alto-error+json Content-Length: *** { "code": "E_JSON_FIELD_MISSING" } 4.4.3. Case: Test-ERR-3 An ALTO client sends a request with an unexpected type for a JSON value. Guo Expires January 7, 2016 [Page 15] Internet-Draft ALTO Interop July 2015 POST /EP_PROPERTY HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointpropparams+json Accept: application/alto-endpointprop+json,application/alto-error+json { "properties" : [ "DEFAULT_NETWORK_MAP.pid" ], "endpoints" : "ipv4:192.168.10.23" } The server returns an HTTP response code of 400 with ALTO error code of E_INVALID_FIELD_TYPE(c.f., Table 1 [RFC7285]). HTTP/1.1 400 Bad Request Content-Type: application/alto-error+json Content-Length: *** { "code": "E_INVALID_FIELD_TYPE" } 4.4.4. Case: Test-IRD-4 An ALTO client sends a request with a wrong value for a correct field. POST /EP_PROPERTY HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointpropparams+json Accept: application/alto-endpointprop+json,application/alto-error+json { "properties" : [ "DEFAULT_NETWORK_MAP.pid" ], "endpoints" : [ "192.168.10.23" ] } The server returns an HTTP response code of 400 with ALTO error code of E_INVALID_FIELD_VALUE (c.f., Table 1 [RFC7285]). Guo Expires January 7, 2016 [Page 16] Internet-Draft ALTO Interop July 2015 HTTP/1.1 400 Bad Request Content-Length: *** Content-Type: application/alto-error+json { "code": "E_INVALID_FIELD_VALUE" } 5. Optional Cases Optional cases are corresponding to the services that MAY be provided in xref target="RFC7285"/> 5.1. Map-Filtering Service 5.1.1. Case: Test-FILTER-1 An ALTO client sends a request to get a filtered network map of PID mypid2 from an ALTO server. POST /F_NETWORKMAP HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-networkmapfilter+json Accept: application/alto-networkmap+json,application/alto-error+json { "pids": [ "mypid2" ] } HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-networkmap+json { "meta" : { "vtag" : { "resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" }, "network-map" : { "mypid2" : { "ipv4" : [ "192.168.0.0/16" ] } } } } Guo Expires January 7, 2016 [Page 17] Internet-Draft ALTO Interop July 2015 5.1.2. Case: Test-FILTER-2 An ALTO client sends a request to get a filtered cost map from asource PID to a set of destination PIDs. POST /F_COSTMAP HTTP/1.1 Host: SERVER_HOST Content-Type: application/alto-costmapfilter+json Content-Length: *** Accept: application/alto-costmap+json,application/alto-error+json { "cost-type" : {"cost-mode" : "numerical", "cost-metric" : "routingcost", }, "pids" : { "srcs" : [ "mypid1", "mypid3" ], "dsts" : [ "mypid2", "peeringpid1", "transitpid2" ] } } HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-costmap+json { "meta" : { "dependent-vtags" : [ {"resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } ], "cost-type": {"cost-mode" : "numerical", "cost-metric" : "routingcost" } }, "cost-map" : { "mypid1": { "mypid2": 0, "peeringpid1": 0, "transitpid2": 10 }, "mypid3": { "mypid2": 0, "peeringpid1": 0, "transitpid2": 8 } } } Guo Expires January 7, 2016 [Page 18] Internet-Draft ALTO Interop July 2015 5.1.3. Case: Test-FILTER-3 An ALTO client sends a request to get the cost map subject to certain constrains from an ALTO server. POST /F_COSTMAP HTTP/1.1 Host: SERVER_HOST Content-Type: application/alto-costmapfilter+json Content-Length: *** Accept: application/alto-costmap+json,application/alto-error+json { "cost-type" : {"cost-mode" : "numerical", "cost-metric" : "routingcost", }, "constrains" : ["gt 0", "le 10"], "pids" : { "srcs" : [ "mypid1", "mypid3" ], "dsts" : [ "mypid2", "peeringpid1", "transitpid2" ] } } HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-costmap+json { "meta" : { "dependent-vtags" : [ {"resource-id": "DEFAULT_NETWORK_MAP", "tag": "DEFAULT_NETWORK_MAP_TAG" } ], "cost-type": {"cost-mode" : "numerical", "cost-metric" : "routingcost" } }, "cost-map" : { "mypid1": { "transitpid2": 10 }, "mypid3": { "transitpid2": 8 } } } Guo Expires January 7, 2016 [Page 19] Internet-Draft ALTO Interop July 2015 5.2. Endpoint cost service 5.2.1. Case: Test-ECS-1 An ALTO client requests cost information between individual endpoints from an ALTO server. POST /EP_COST HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointcostparams+json Accept: application/alto-endpointcost+json,application/alto-error+json { "cost-type": {"cost-mode" : "numerical", "cost-metric" : "routingcost" }, "endpoints" : { "srcs": [ "ipv4:10.0.0.0", "ipv4:192.168.11.0", "ipv4:192.168.10.0"], "dsts": [ "ipv4:10.0.0.0", "ipv4:15.0.0.0", "ipv4:192.168.11.0", "ipv4:192.168.10.0", "ipv4:128.0.0.0", "ipv4:130.0.0.0", "ipv4:0.0.0.0", "ipv4:132.0.0.0", "ipv4:135.0.0.0" ] } } HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-endpointcost+json { "meta": { "cost-type": {"cost-mode" : "numerical", "cost-metric" : "routingcost" }, "endpoint-cost-map": { "ipv4:10.0.0.0": { "ipv4:10.0.0.0": 0.000000, "ipv4:15.0.0.0": 0.000000, "ipv4:192.168.11.0": 0.000000, "ipv4:192.168.10.0": 0.000000, Guo Expires January 7, 2016 [Page 20] Internet-Draft ALTO Interop July 2015 "ipv4:128.0.0.0": 0.000000, "ipv4:130.0.0.0": 0.000000, "ipv4:0.0.0.0": 4.000000, "ipv4:132.0.0.0": 5.000000, "ipv4:135.0.0.0": 10.000000 }, "ipv4:192.168.11.0": { "ipv4:10.0.0.0": 0.000000, "ipv4:15.0.0.0": 0.000000, "ipv4:192.168.11.0": 0.000000, "ipv4:192.168.10.0": 0.000000, "ipv4:128.0.0.0": 0.000000, "ipv4:130.0.0.0": 0.000000, "ipv4:0.0.0.0": 4.000000, "ipv4:132.0.0.0": 7.000000, "ipv4:135.0.0.0": 8.000000 }, "ipv4:192.168.10.0": { "ipv4:10.0.0.0": 0.000000, "ipv4:15.0.0.0": 0.000000, "ipv4:192.168.11.0": 0.000000, "ipv4:192.168.10.0": 0.000000, "ipv4:128.0.0.0":0.000000, "ipv4:130.0.0.0": 0.000000, "ipv4:0.0.0.0": 5.100000, "ipv4:132.0.0.0": 8.000000, "ipv4:135.0.0.0": 8.000000 } } } 5.2.2. Case: Test-ECS-2 An ALTO client requests the ranking service for a source host to a set of destination hosts from an ALTO server. Guo Expires January 7, 2016 [Page 21] Internet-Draft ALTO Interop July 2015 POST /EP_COST HTTP/1.1 Host: SERVER_HOST Accept: application/alto-endpointcost+json,application/alto-error+json Content-Type: application/alto-endpointcostparams+json Content-Length: *** { "cost-type": {"cost-mode" : "ordinal", "cost-metric" : "routingcost"}, "endpoints" : { "srcs": [ "ipv6:2001:DB8::ABCD:6789", "ipv4:192.168.10.1" ], "dsts": [ "ipv6:2001:DB8::2345:5678", "ipv4:135.0.29.1", "ipv4:192.168.10.23" ] } } The server response is shown below. Note that the source IP adress of "ipv6:2001:DB8::ABCD:6789", which occurs in PID "peeringpid2", is omitted in the response. This reflects the fact that the ALTO server does not know the source costs from the "peeringpid2" PID. HTTP/1.1 200 OK Content-Type: application/alto-endpointcost+json Content-Length: *** { "meta": { "cost-type": {"cost-mode" : "ordinal", "cost-metric" : "routingcost"}, "endpoint-cost-map": { "ipv4:192.168.10.1": { "ipv4:192.168.10.23": 1, "ipv6:2001:DB8::2345:5678": 1, "ipv4:135.0.29.1": 6 } }, } 5.2.3. Case: Test-ECS-3 An ALTO client requests the cost service subject to certain constraints from an ALTO server. Guo Expires January 7, 2016 [Page 22] Internet-Draft ALTO Interop July 2015 POST /EP_COST HTTP/1.1 Host: SERVER_HOST Content-Length: *** Content-Type: application/alto-endpointcostparams+json Accept: application/alto-endpointcost+json,application/alto-error+json { "cost-type": {"cost-mode" : "numerical", "cost-metric" : "routingcost"}, "constraints": ["le 5", "ge 4"], "endpoints": { "dsts": [ "ipv4:10.0.0.0", "ipv4:15.0.0.0", "ipv4:192.168.11.0", "ipv4:192.168.10.0", "ipv4:128.0.0.0", "ipv4:130.0.0.0", "ipv4:0.0.0.0", "ipv4:132.0.0.0", "ipv4:135.0.0.0" ], "srcs": [ "ipv4:10.0.0.0", "ipv4:192.168.11.0", "ipv4:192.168.10.0" ] } } HTTP/1.1 200 OK Content-Length: *** Content-Type: application/alto-endpointcost+json { "meta": { "cost-type": {"cost-mode" : "numerical", "cost-metric" : "routingcost"}, "endpoint-cost-map: { "ipv4:10.0.0.0": { "ipv4:0.0.0.0": 4, "ipv4:132.0.0.0": 5 }, "ipv4:192.168.11.0": {"ipv4:0.0.0.0": 4} } } Guo Expires January 7, 2016 [Page 23] Internet-Draft ALTO Interop July 2015 6. Security Considerations This document does not present any new security considerations above and beyond what is documented in the ALTO protocol [RFC7285] 7. IANA Considerations This document does not require any action from IANA. 8. Informative References [RFC7285] Almi, R., Penno, R., Yang, Y., Kiesel, S., Previdi, S., Roome, W., Shalunov, S., and R. Woundy, "Application-Layer Traffic Optimization (ALTO) Protocol", RFC 7285, September 2014. Author's Address Huaming Guo (editor) CAICT China Academy of Information and Communications Technology Email: guohuaming@caict.ac.cn Guo Expires January 7, 2016 [Page 24]