Internet DRAFT - draft-guo-alto-interop
draft-guo-alto-interop
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]