Internet DRAFT - draft-gurbani-alto-interop-cases
draft-gurbani-alto-interop-cases
Internet Engineering Task Force V. Gurbani, Ed.
Internet-Draft W. Roome
Intended status: Informational Bell Laboratories, Alcatel-Lucent
Expires: April 25, 2013 R. Varga
Cisco Systems, Inc.
N. Zhang
Neustar
October 22, 2012
Interoperability testing of the Application- Layer Traffic Optimization
(ALTO) Protocol
draft-gurbani-alto-interop-cases-02
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 that need
to choose one or more endpoints to connect to among large sets of
logically equivalent ones. This document provides a collection of
messages that may be used 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 April 25, 2013.
Copyright Notice
Copyright (c) 2012 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
Gurbani, et al. Expires April 25, 2013 [Page 1]
Internet-Draft ALTO Interop October 2012
(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
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.
Table of Contents
1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Maps: Network map and cost map . . . . . . . . . . . . . . . . 3
3. Test cases . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Information Resource Directory . . . . . . . . . . . . . . 5
3.2. Endpoint property service . . . . . . . . . . . . . . . . 8
3.3. Endpoint cost service . . . . . . . . . . . . . . . . . . 11
3.4. Retrieving maps . . . . . . . . . . . . . . . . . . . . . 17
3.5. Filtering . . . . . . . . . . . . . . . . . . . . . . . . 22
3.6. JSON parsing errors . . . . . . . . . . . . . . . . . . . 24
4. Security considerations . . . . . . . . . . . . . . . . . . . 31
5. IANA considerations . . . . . . . . . . . . . . . . . . . . . 31
6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.1. Normative References . . . . . . . . . . . . . . . . . . . 31
6.2. Informative References . . . . . . . . . . . . . . . . . . 31
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 31
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 31
Gurbani, et al. Expires April 25, 2013 [Page 2]
Internet-Draft ALTO Interop October 2012
1. Overview
The Application-Layer Traffic Optimization (ALTO) protocol is
designed to allow entities with knowledge about the network
infrastructure to export such information to applications that need
to choose one or more endpoints to connect to among large sets of
logically equivalent ones.
This document contains a set of messages that may be used test the
functionality and interoperability of an ALTO client and an ALTO
server.
This document is informational and is NOT NORMATIVE on any aspects of
the ALTO protocol. The normative behaviour of ALTO entities is
prescribed in [I-D.ietf-alto-protocol].
The test messages are organized into several sections. The key ALTO
services, including but not limited to, Information Resource
Directory retrieval, retrieving network map and cost map, endpoint
cost service, filtered network map service, filtered cost map service
are provided as discrete test cases. Also included are errors
associating with the ALTO request and the JSON payload.
While every effort has been made to catalogue representative test
cases, this document does not attempt to codify every test case that
arises in ALTO. The aim of the document is to focus on areas that
highlight the key offerings of the ALTO protocol.
2. Maps: Network map and cost map
To uniformly interpret the contents of the ALTO messages, a sample
topology is presented below. This topology is divided into a network
map and a cost map. The network map contains a series of PIDs, a
provider-defined network location identifier as specified in
[I-D.ietf-alto-protocol].
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, ::/0
Gurbani, et al. Expires April 25, 2013 [Page 3]
Internet-Draft ALTO Interop October 2012
Figure 1: Sample Network Map
A cost map corresponding to the above network map is shown below.
The cost map defines path costs amongst sets of source and
destination network locations. Each path cost is the end-to-end cost
from the source to the destination.
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. Test cases
Exhaustive test cases are described in subsections below. Note that
it is not expected that an ALTO client and server implementation
generate requests and responses in the same format as shown below.
Gurbani, et al. Expires April 25, 2013 [Page 4]
Internet-Draft ALTO Interop October 2012
The syntax related to representing each request or response is left
to each individual implementation as long as the payload is
syntactically valid and semantically equivalent to any other
representation of the same payload.
In the test cases below, an ALTO server is assumed to be available at
the URL http://alto.ietf.org. Requests are directed towards it.
This document assumes that the ALTO server URL has been discovered by
the ALTO discovery protocol, however, it does not provide further
details on the discovery protocol itself. Wherever possible,
relevant HTTP headers are shown in the test cases, however, for the
sake of brevity not all headers are depicted.
3.1. Information Resource Directory
Test-IRD-1: The Information Resource Directory (IRD) enumerates URIs
at which an ALTO server offers Information Resources.
Client -> Server:
-----------------
GET /directory HTTP/1.1
Host: alto.ietf.org
Accept: application/alto-directory+json,
application/alto-error+json
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: 2596
Connection: close
Content-Type: application/alto-directory+json
Date: Wed, 29 Jun 2011 10:52:09 GMT
{
"resources": [
{
"capabilities": {
"cost-modes": [
"numerical"
],
"cost-types": [
"routingcost"
]
},
"media-types": [
"application/alto-costmap+json"
],
Gurbani, et al. Expires April 25, 2013 [Page 5]
Internet-Draft ALTO Interop October 2012
"uri": "http://alto.ietf.org/costmap/numerical/routingcost"
},
{
"capabilities": {
"cost-modes": [
"ordinal"
],
"cost-types": [
"routingcost"
]
},
"media-types": [
"application/alto-costmap+json"
],
"uri": "http://alto.ietf.org/costmap/ordinal/routingcost"
},
{
"media-types": [
"application/alto-networkmap+json"
],
"uri": "http://alto.ietf.org/networkmap"
},
{
"media-types": [
"application/alto-serverinfo+json"
],
"uri": "http://alto.ietf.org/serverinfo"
},
{
"accepts": [
"application/alto-costmapfilter+json"
],
"capabilities": {
"cost-constraints": true,
"cost-modes": [
"numerical",
"ordinal"
],
"cost-types": [
"routingcost"
]
},
"media-types": [
"application/alto-costmap+json"
],
"uri": "http://alto.ietf.org/costmap/filtered"
},
{
Gurbani, et al. Expires April 25, 2013 [Page 6]
Internet-Draft ALTO Interop October 2012
"accepts": [
"application/alto-endpointcostparams+json"
],
"capabilities": {
"cost-constraints": true,
"cost-modes": [
"numerical",
"ordinal"
],
"cost-types": [
"routingcost"
]
},
"media-types": [
"application/alto-endpointcost+json"
],
"uri": "http://alto.ietf.org/endpoints/cost"
},
{
"accepts": [
"application/alto-endpointpropparams+json"
],
"capabilities": {
"prop-types": [
"pid"
]
},
"media-types": [
"application/alto-endpointprop+json"
],
"uri": "http://alto.ietf.org/endpoints/property"
},
{
"accepts": [
"application/alto-networkmapfilter+json"
],
"media-types": [
"application/alto-networkmap+json"
],
"uri": "http://alto.ietf.org/networkmap/filtered"
}
]
}
Gurbani, et al. Expires April 25, 2013 [Page 7]
Internet-Draft ALTO Interop October 2012
3.2. Endpoint property service
Test-EPS-1: An ALTO client retrieves a PID for IPv4 address
192.168.1.23.
Client -> Server:
-----------------
POST /endpoints/property HTTP/1.1
Host: alto.ietf.org
Content-Length: ...
Content-Type: application/alto-endpointpropparams+json
Accept: application/alto-endpointprop+json
{
"properties" : [ "pid" ],
"endpoints" : [ "ipv4:192.168.1.23" ]
}
The server returns the following response (note that the longest
prefix match is used to retrieve the corresponding PID property).
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: ...
Content-Type: application/alto-endpointprop+json
{
"meta" : {},
"data": {
"map-vtag" : "1266506139",
"map" : {
"ipv4:192.168.1.23" : { "pid": "mypid2" }
}
}
}
Test-EPS-2: An ALTO client retrieves a PID for IPv4 address
192.168.10.23.
Gurbani, et al. Expires April 25, 2013 [Page 8]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /endpoints/property HTTP/1.1
Host: alto.ietf.or
Content-Length: ...
Content-Type: application/alto-endpointpropparams+json
Accept: application/alto-endpointprop+json
{
"properties" : [ "pid" ],
"endpoints" : [ "ipv4:192.168.10.23" ]
}
The server returns the following response (note that the longest
prefix match is used to retrieve the corresponding PID property).
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: ...
Content-Type: application/alto-endpointprop+json
{
"meta" : {},
"data": {
"map-vtag" : "1266506139",
"map" : {
"ipv4:192.168.10.23" : { "pid": "mypid3" }
}
}
}
Test-EPS-3: An ALTO client retrieves a PID for IPv4 address
201.1.13.12.
Client -> Server:
-----------------
POST /endpoints/property HTTP/1.1
Host: alto.ietf.org
Content-Length: ...
Content-Type: application/alto-endpointpropparams+json
Accept: application/alto-endpointprop+json
{
"properties" : [ "pid" ],
"endpoints" : [ "ipv4:201.1.13.12" ]
}
Gurbani, et al. Expires April 25, 2013 [Page 9]
Internet-Draft ALTO Interop October 2012
The server returns the following response (note that the longest
prefix match is used to retrieve the corresponding PID property).
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: ...
Content-Type: application/alto-endpointprop+json
{
"meta" : {},
"data": {
"map-vtag" : "1266506139",
"map" : {
"ipv4:201.1.13.12" : { "pid": "defaultpid" }
}
}
Test-EPS-4: An ALTO client retrieves a PID for an IPv4 and IPv6
address.
Client -> Server:
-----------------
POST /endpoints/property HTTP/1.1
Host: alto.ietf.org
Content-Length: 106
Accept: application/alto-endpointprop+json
Content-Type: application/alto-endpointpropparams+json
{
"properties" : [ "pid" ],
"endpoints" : [ "ipv6:1234::192.168.1.23",
"ipv4:132.0.10.12" ]
}
The server returns the following response:
Gurbani, et al. Expires April 25, 2013 [Page 10]
Internet-Draft ALTO Interop October 2012
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Type: application/alto-endpointprop+json;charset=UTF-8
Content-Length: 157
{
"meta" : { } ,
"data" : {
"map-vtag" : "1266506139",
"map" : {
"ipv6:1234::192.168.1.23" : { "pid" : "defaultpid " } ,
"ipv:132.0.10.12" : { "pid" : "transitpid1" }
}
}
}
3.3. Endpoint cost service
Test-ECS-1: An ALTO client requests cost information between
individual endpoints.
Gurbani, et al. Expires April 25, 2013 [Page 11]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /endpoints/cost HTTP/1.1
Host: alto.example.com
Content-Length: 429
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,
application/alto-error+json
{
"cost-mode" : "numerical",
"cost-type" : "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"
]
}
}
Server responds with the following:
Gurbani, et al. Expires April 25, 2013 [Page 12]
Internet-Draft ALTO Interop October 2012
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: 1692
Content-Type: application/alto-endpointcost+json
{
"meta": { },
"data": {
"cost-mode": "numerical",
"cost-type": "routingcost",
"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,
"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
}
}
}
}
Gurbani, et al. Expires April 25, 2013 [Page 13]
Internet-Draft ALTO Interop October 2012
Test-ECS-2: An ALTO client requests the ranking service for a
source host to a set of destination hosts.
Client -> Server:
-----------------
POST /endpoints/cost HTTP/1.1
Host: alto.ietf.org
Accept: application/alto-endpointcost+json,
application/alto-error+json
Content-Type: application/alto-endpointcostparams+json
Content-Length: 235
{
"cost-mode" : "ordinal",
"cost-type" : "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.
Gurbani, et al. Expires April 25, 2013 [Page 14]
Internet-Draft ALTO Interop October 2012
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Type: application/alto-endpointcost+json;charset=UTF-8
Content-Length: 376
{
"data": {
"cost-mode": "ordinal",
"cost-type": "routingcost",
"map": {
"ipv4:192.168.10.1": {
"ipv4:192.168.10.23": 1,
"ipv6:2001:DB8::2345:5678": 1,
"ipv4:135.0.29.1": 6
}
},
"map-vtag": "gqcla2l8"
},
"meta": {}
}
Test-ECS-3: An ALTO client requests the cost service subject to
certain constraints.
Gurbani, et al. Expires April 25, 2013 [Page 15]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /endpoints/cost HTTP/1.1
Host: alto.example.com
Content-Length: ...
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,
application/alto-error+json
{
"constraints": ["le 5", "ge 4"],
"cost-mode": "numerical",
"cost-type": "routingcost",
"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"
]
}
}
The server responds with the following:
Gurbani, et al. Expires April 25, 2013 [Page 16]
Internet-Draft ALTO Interop October 2012
Server -> Client
-----------------
HTTP/1.1 200 OK
Content-Length: 1692
Content-Type: application/alto-endpointcost+json
{
"data": {
"cost-mode": "numerical",
"cost-type": "routingcost",
"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}
}
},
"meta": {}
}
3.4. Retrieving maps
Test-MAPS-1: An ALTO client retrieves a complete network map.
Client -> Server:
-----------------
GET /networkmap HTTP/1.1
Host: alto.ietf.org
Accept: application/alto-networkmap+json,
application/alto-error+json
The server returns the following response.
Gurbani, et al. Expires April 25, 2013 [Page 17]
Internet-Draft ALTO Interop October 2012
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: 799
Content-Type: application/alto-networkmap+json
{
"meta" : {},
"data" : {
"map-vtag" : "1266506139",
"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" ]
}
}
}
}
Test-MAPS-2: An ALTO client retrieves a complete cost map for the
numerical cost mode.
Gurbani, et al. Expires April 25, 2013 [Page 18]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
GET /costmap/numerical/routingcost HTTP/1.1
Host: alto.ietf.org
Accept: application/alto-costmap+json,
application/alto-error+json
The server returns the following response. In the response below,
note that the version tag of the cost map ("map-vtag") corresponds to
the network map of the same version shown in test case Test-MAPS-1.
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: 787
Content-Type: application/alto-costmap+json
{
"meta" : {},
"data" : {
"cost-mode" : "numerical",
"cost-type" : "routingcost",
"map-vtag" : "1266506139",
"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}
}
}
}
Test-MAPS-3: An ALTO client retrieves a complete cost map for the
ordinal cost mode.
Gurbani, et al. Expires April 25, 2013 [Page 19]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
GET /costmap/ordinal/routingcost HTTP/1.1
Host: alto.ietf.org
Accept: application/alto-costmap+json,
application/alto-error+json
The server returns the following response. In the response below,
note that the version tag of the cost map ("map-vtag") corresponds to
the network map of the same version shown in test case Test-MAPS-1.
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: ...
Content-Type: application/alto-costmap+json
{
"meta" : {},
"data" : {
"cost-mode" : "ordinal",
"cost-type" : "routingcost",
"map-vtag" : "1266506139",
"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}
}
}
}
Test-MAPS-4: This test is designed to detect a change in the
network map.
Add a new block of addresses to the network map of Figure 1, thereby
updating the network map. For example, add the following new entry
to the network map of Figure 1:
Gurbani, et al. Expires April 25, 2013 [Page 20]
Internet-Draft ALTO Interop October 2012
peeringpid2 130.0.0.0/16, 2001:DB8::/32, 201.1.2.0/24
The ALTO client retrieves the new network map using the GET request
shown in Test-MAPS-1. The expectation is that the retrieved network
map has the new PID (peeringpid2) included in the topology, and the
version tag on the newly retrieved network map should be different
than the response to the ALTO client shown in Test-MAPS-1.
The server should respond with a response that approximates what is
shown below:
Gurbani, et al. Expires April 25, 2013 [Page 21]
Internet-Draft ALTO Interop October 2012
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: 815
Content-Type: application/alto-networkmap+json
{
"meta" : {},
"data" : {
"map-vtag" : "1266506155",
"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", "201.1.2.0/24" ],
"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" ]
}
}
}
}
3.5. Filtering
Gurbani, et al. Expires April 25, 2013 [Page 22]
Internet-Draft ALTO Interop October 2012
Test-FILTER-1: An ALTO client sends a request to get a filtered map
of PID mypid2.
Client -> Server:
-----------------
POST /networkmap/filtered HTTP/1.1
Host: alto.ietf.org
Content-Length: 26
Content-Type: application/alto-networkmapfilter+json
Accept: application/alto-networkmap+json,
application/alto-error+json
{
"pids": [ "mypid2" ]
}
The server responds with the following:
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: 172
Content-Type: application/alto-networkmap+json
{
"meta" : {},
"data" : {
"map-vtag" : "1266506155",
"map" : {
"mypid2" : {
"ipv4" : [ "192.168.0.0/16" ]
}
}
}
}
Test-FILTER-2: An ALTO client sends a request to get a filtered map
from a source PID to a set of destination PIDs.
Gurbani, et al. Expires April 25, 2013 [Page 23]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /costmap/filtered HTTP/1.1
Host: alto.ietf.org
Content-Type: application/alto-costmapfilter+json
Content-Length: 174
Accept: application/alto-costmap+json,
application/alto-error+json
{
"cost-mode" : "numerical",
"cost-type" : "routingcost",
"pids" : {
"srcs" : [ "mypid1", "mypid3" ],
"dsts" : [ "mypid2", "peeringpid1", "transitpid2" ]
}
}
The server responds with the following:
Server -> Client:
-----------------
HTTP/1.1 200 OK
Content-Length: 294
Content-Type: application/alto-costmap+json
{
"meta" : {},
"data" : {
"cost-mode" : "numerical",
"cost-type" : "routingcost",
"map-vtag" : "1266506155",
"map" : {
"mypid1": { "mypid2": 0, "peeringpid1": 0,
"transitpid2": 10 },
"mypid3": { "mypid2": 0, "peeringpid1": 0,
"transitpid2": 8 }
}
}
}
3.6. JSON parsing errors
Test-JSON-ERR-1: An ALTO client sends a malformed JSON body in the
request --- a missing closing brace ('}').
Gurbani, et al. Expires April 25, 2013 [Page 24]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /endpoints/cost HTTP/1.1
Host: alto.ietf.org
Accept: application/alto-endpointcost+json,
application/alto-error+json
Content-Type: application/alto-endpointcostparams+json
Content-Length: 131
{
"cost-mode" : "numerical",
"cost-type" : "routingcost",
"endpoints": {
"srcs": [ "ipv4:10.0.0.0"],
"dsts": [ "ipv4:10.0.0.0" ]
}
The server returns an HTTP response code of 400 with ALTO error code
of E_SYNTAX (c.f., Table 1 [I-D.ietf-alto-protocol]).
Server -> Client:
-----------------
HTTP/1.1 400 Bad Request
Content-Type: application/alto-error+json
Content-Length: ...
{
"code": "E_SYNTAX"
}
Test-JSON-ERR-2: An ALTO client sends a malformed request --- the
"dsts" member for the endpoint cost service is missing.
Gurbani, et al. Expires April 25, 2013 [Page 25]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /endpoints/cost HTTP/1.1
Host: alto.ietf.org
Accept: application/alto-endpointcost+json,
application/alto-error+json
Content-Type: application/alto-endpointcostparams+json
Content-Length: 137
{
"cost-mode" : "numerical",
"cost-type" : "routingcost",
"endpoints": {
"srcs": [ "ipv4:10.0.0.0"] }
}
The server returns an HTTP response code of 400 with ALTO error code
of E_JSON_FIELD_MISSING (c.f., Table 1 [I-D.ietf-alto-protocol]).
Server -> Client:
-----------------
HTTP/1.1 400 Bad Request
Content-Type: application/alto-error+json
Content-Length: ...
{
"code": "E_JSON_FIELD_MISSING"
}
Test-JSON-ERR-3: An ALTO client sends a request with an unexpected
type for a JSON value.
Gurbani, et al. Expires April 25, 2013 [Page 26]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /endpoints/cost HTTP/1.1
Host: alto.ietf.org
Accept: application/alto-endpointcost+json,
application/alto-error+json
Content-Type: application/alto-endpointcostparams+json
Content-Length: 176
{
"cost-mode" : "numerical",
"cost-type" : "routingcost",
"endpoints": {
"srcs":"ipv4:10.0.0.0" ,
"dsts": [ "ipv4:10.0.0.0" ]
}
}
The server returns an HTTP response code of 400 with ALTO error code
of E_JSON_VALUE_TYPE(c.f., Table 1 [I-D.ietf-alto-protocol]).
Server -> Client:
-----------------
HTTP/1.1 400 Bad Request
Content-Type: application/alto-error+json
Content-Length: ...
{
"code": "E_JSON_VALUE_TYPE"
}
Test-JSON-ERR-4: An ALTO client sends a request with an invalid
JSON code mode.
Gurbani, et al. Expires April 25, 2013 [Page 27]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /costmap/filtered HTTP/1.1
Host: alto.ietf.org
Content-Length: 105
Content-Type: application/alto-costmapfilter+json
Accept: application/alto-costmap+json
{
"cost-mode": "foo",
"cost-type": "routingcost",
"pids": {
"dsts": [],
"srcs": []
}
}
The server returns an HTTP response code of 400 with ALTO error code
of E_INVALID_COST_MODE (c.f., Table 1 [I-D.ietf-alto-protocol]).
Server -> Client:
-----------------
HTTP/1.1 400 Bad Request
Content-Length: ...
Content-Type: application/alto-error+json
{
"code": "E_INVALID_COST_MODE"
}
Test-JSON-ERR-5: An ALTO client sends a request with an invalid
JSON code type.
Gurbani, et al. Expires April 25, 2013 [Page 28]
Internet-Draft ALTO Interop October 2012
Client -> Server:
-----------------
POST /costmap/filtered HTTP/1.1
Host: alto.ietf.org
Content-Length: 105
Content-Type: application/alto-costmapfilter+json
Accept: application/alto-costmap+json
{
"cost-mode": "numerical",
"cost-type": "foo",
"pids": {
"dsts": [],
"srcs": []
}
}
The server returns an HTTP response code of 400 with ALTO error code
of E_INVALID_COST_TYPE (c.f., Table 1 [I-D.ietf-alto-protocol]).
Server -> Client:
-----------------
HTTP/1.1 400 Bad Request
Content-Length: ...
Content-Type: application/alto-error+json
{
"code": "E_INVALID_COST_TYPE"
}
Test-JSON-ERR-6: An ALTO client sends a request with an invalid
JSON endpoint property type.
Client -> Server:
-----------------
POST /endpoints/property HTTP/1.1
Host: alto.ietf.org
Content-Length: 66
Content-Type: application/alto-endpointpropparams+json
Accept: application/alto-endpointprop+json
{
"endpoints": ["ipv4:10.0.0.1"],
"properties": ["foo"]
}
Gurbani, et al. Expires April 25, 2013 [Page 29]
Internet-Draft ALTO Interop October 2012
The server returns an HTTP response code of 400 with ALTO error code
of E_INVALID_PROPERTYTYPE (c.f., Table 1 [I-D.ietf-alto-protocol]).
Server -> Client:
-----------------
HTTP/1.1 400 Bad Request
Content-Length: ...
Content-Type: application/alto-error+json
{
"code": "E_INVALID_PROPERTY_TYPE"
}
Test-JSON-ERR-7: An ALTO client sends a request with multiple
errors. In the particular test case below, an invalid cost type
and and an invalid cost mode are sent.
Client -> Server:
-----------------
POST /costmap/filtered HTTP/1.1
Host: alto.ietf.org
Content-Length: 112
Content-Type: application/alto-costmapfilter+json
Accept: application/alto-costmap+json
{
"cost-mode": "bar",
"cost-type": "foo",
"pids": {
"dsts": [],
"srcs": []
}
}
The server must detect at least one of the errors and return the
detected error.
Server -> Client:
-----------------
HTTP/1.1 400 Bad Request
Content-Length: ...
Content-Type: application/alto-error+json
{
"code": "E_INVALID_COST_TYPE"
}
Gurbani, et al. Expires April 25, 2013 [Page 30]
Internet-Draft ALTO Interop October 2012
4. Security considerations
This document does not present any new security considerations above
and beyond what is documented in the ALTO protocol
[I-D.ietf-alto-protocol].
5. IANA considerations
This document does not require any action from IANA.
6. References
6.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
6.2. Informative References
[I-D.ietf-alto-protocol]
Alimi, R., Penno, R., and Y. Yang, "ALTO Protocol",
draft-ietf-alto-protocol-13 (work in progress),
September 2012.
Appendix A. Acknowledgements
The editors will like to thank the ALTO working group participants
for reviewing test cases. Richard Alimi and Mikio Hara contributed
review cycles to the contents of this document.
Authors' Addresses
Vijay K. Gurbani (editor)
Bell Laboratories, Alcatel-Lucent
Email: vkg@bell-labs.com
William Roome
Bell Laboratories, Alcatel-Lucent
Email: w.roome@alcatel-lucent.com
Gurbani, et al. Expires April 25, 2013 [Page 31]
Internet-Draft ALTO Interop October 2012
Robert Varga
Cisco Systems, Inc.
Email: rovarga@cisco.com
Ning Zhang
Neustar
Email: Ning.Zhang@neustar.biz
Gurbani, et al. Expires April 25, 2013 [Page 32]