Internet DRAFT - draft-roome-alto-interop-ietf93
draft-roome-alto-interop-ietf93
Internet Engineering Task Force W. Roome
Internet-Draft Bell Laboratories,
Intended status: Informational Alcatel-Lucent
Expires: March 12, 2016 G. Chen
Huawei Technologies
H. Seidel
BENOCS GmbH
September 9, 2015
Interoperability Testing of the ALTO Protocol
draft-roome-alto-interop-ietf93-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 that need
to choose one or more endpoints to connect to among large sets of
logically equivalent ones. This document defines a data set that may
be used to test the functionality and interoperability of ALTO
clients and servers.
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 March 12, 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
Roome, et al. Expires March 12, 2016 [Page 1]
Internet-Draft ALTO Interop September 2015
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Server Data . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1. Default Network Map And Cost Maps . . . . . . . . . . . . 5
2.2. Alternate Network Map And Cost Maps . . . . . . . . . . . 9
2.3. Endpoint Properties . . . . . . . . . . . . . . . . . . . 12
3. Server Resources and Configuration . . . . . . . . . . . . . . 12
4. Client Actions . . . . . . . . . . . . . . . . . . . . . . . . 14
4.1. Filtered Network Map Tests . . . . . . . . . . . . . . . . 15
4.2. Filtered Cost Map Tests . . . . . . . . . . . . . . . . . 15
4.3. Endpoint Property Service Tests . . . . . . . . . . . . . 16
4.4. Endpoint Cost Service Tests . . . . . . . . . . . . . . . 17
4.4.1. ECS Test 1 . . . . . . . . . . . . . . . . . . . . . . 18
4.4.2. ECS Test 2 . . . . . . . . . . . . . . . . . . . . . . 18
4.4.3. ECS Test 3 . . . . . . . . . . . . . . . . . . . . . . 19
4.4.4. ECS Test 4 . . . . . . . . . . . . . . . . . . . . . . 19
4.4.5. ECS Test 5 . . . . . . . . . . . . . . . . . . . . . . 21
5. Error Tests . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1. Invalid Field Type . . . . . . . . . . . . . . . . . . . . 22
5.2. Missing "properties" Field . . . . . . . . . . . . . . . . 23
5.3. Invalid Property Name . . . . . . . . . . . . . . . . . . 23
5.4. Invalid Endpoint Addresses . . . . . . . . . . . . . . . . 23
5.5. Invalid Cost Type . . . . . . . . . . . . . . . . . . . . 24
5.6. Invalid Cost Mode . . . . . . . . . . . . . . . . . . . . 25
5.7. Invalid Cost Constraints . . . . . . . . . . . . . . . . . 25
5.8. JSON Syntax Error . . . . . . . . . . . . . . . . . . . . 26
5.9. Invalid Accept Header In GET Request . . . . . . . . . . . 26
5.10. Invalid Accept Header In POST Request . . . . . . . . . . 26
5.11. Invalid Content-Type Header In POST Request . . . . . . . 27
6. Security considerations . . . . . . . . . . . . . . . . . . . 27
7. IANA considerations . . . . . . . . . . . . . . . . . . . . . 27
8. Normative References . . . . . . . . . . . . . . . . . . . . . 27
Appendix A. Appendix: JSON Network And Cost Maps . . . . . . . . 28
A.1. Default Network Map . . . . . . . . . . . . . . . . . . . 28
A.2. Default "routingcost" Cost Map . . . . . . . . . . . . . . 29
A.3. Default "hopcount" Cost Map . . . . . . . . . . . . . . . 30
A.4. Alternate Network Map . . . . . . . . . . . . . . . . . . 31
A.5. Alternate "routingcost" Cost Map . . . . . . . . . . . . . 32
A.6. Alternate "hopcount" Cost Map . . . . . . . . . . . . . . 33
Roome, et al. Expires March 12, 2016 [Page 2]
Internet-Draft ALTO Interop September 2015
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 33
Roome, et al. Expires March 12, 2016 [Page 3]
Internet-Draft ALTO Interop September 2015
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 defines procedures to test the functionality and
interoperability of ALTO clients and servers.
This document is informational and is NOT NORMATIVE on any aspects of
the ALTO protocol. The normative behavior of ALTO entities is
prescribed in [RFC7285].
Section 2 defines the network maps, cost maps and other data
necessary to provision an ALTO server. This ensures that all tested
servers will return the same results, so a client may verify that a
server is operating correctly. Section 3 defines the required and
optional resources for an ALTO server to provide. Section 4
describes the actions expected from a client. Section 5 describes a
set of invalid client requests, to verify that a server can respond
correctly to client errors.
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. Server Data
This section defines the data necessary to provision a tested ALTO
server in a uniform manner. First it defines a default network map,
and associated cost maps for the "routingcost" and "hopcount"
metrics. Next it defines an optional alternate network map, along
with "routingcost" and "hopcount" costs for that map. Finally it
defines a set of optional endpoint properties.
The following examples are fictional and do not depict any actual
networks or address prefixes. Because an ALTO Network Map must cover
all IP addresses, it is not practical to use only addresses in the
ranges reserved for documentation [[RFC5737], [RFC3849]].
Appendix A gives network and cost map data defined in this section
formatted in JSON.
Roome, et al. Expires March 12, 2016 [Page 4]
Internet-Draft ALTO Interop September 2015
2.1. Default Network Map And Cost Maps
Every tested ALTO server MUST provide a default network map with the
PIDs defined below:
PID IP Address Block
---------------------------------------
mine 100.0.0.0/8
mine1 100.0.0.0/10
mine1a 100.0.1.0/24, 100.0.64.0/24, 100.0.192.0/24
mine2 100.64.0.0/10
mine3 100.128.0.0/10
peer1 128.0.0.0/16, 130.0.0.0/16, 2001:DB8:0000::/33
peer2 129.0.0.0/16, 131.0.0.0/16, 2001:DB8:8000::/33
tran1 132.0.0.0/16
tran2 135.0.0.0/16
default 0.0.0.0/0, ::0/0
loopback 127.0.0.0/8, ::1/128
linklocal 169.254.0.0/16, ff80::/10
private 10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16, fc00::/7
Figure 1: Default Network Map
Each ALTO server MUST provide a cost map for the "routingcost"
metric. The following table presents the numerical values for those
costs. If a server provides a numerical-mode cost map, it MUST use
these values. If a server provides an ordinal-mode cost map, the
server may use whatever values it wants, provided the ordinal values
preserve the order of the numerical values.
Roome, et al. Expires March 12, 2016 [Page 5]
Internet-Draft ALTO Interop September 2015
default linklocal loopback mine mine1 mine1a mine2 mine3
default - - - 60.0 63.0 65.0 64.0 65.0
linklocal - 0.0 - - - - - -
loopback - - 0.0 - - - - -
mine 60.0 - - 0.0 3.0 5.0 4.0 5.0
mine1 63.0 - - 3.0 0.0 2.0 6.5 8.0
mine1a 65.0 - - 5.0 2.0 0.0 4.5 10.0
mine2 64.0 - - 4.0 7.0 9.0 0.0 9.0
mine3 65.0 - - 5.0 8.0 10.0 9.0 0.0
peer1 - - - 20.0 23.0 25.0 24.0 25.0
peer2 - - - 25.0 28.0 30.0 29.0 30.0
private - - - - - - - -
tran1 - - - 35.0 38.0 40.0 39.0 40.0
tran2 - - - 45.0 48.0 50.0 49.0 50.0
peer1 peer2 private tran1 tran2
default - - - - -
linklocal - - - - -
loopback - - - - -
mine 20.0 25.0 - 35.0 45.0
mine1 23.0 28.0 - 38.0 48.0
mine1a 25.0 30.0 - 40.0 50.0
mine2 24.0 29.0 - 39.0 49.0
mine3 25.0 30.0 - 40.0 50.0
peer1 0.0 - - - -
peer2 - 0.0 - - -
private - - 0.0 - -
tran1 - - - 0.0 -
tran2 - - - - 0.0
Figure 2: "routingcost" Numerical Cost Map
Note that this is a partial cost map, in that it does not define a
cost for every source and destination PID. Also note that the costs
are symmetric except for (mine1,mine2) and (mine1a,mine2).
Each ALTO server MAY provide a cost map for the "hopcount" metric.
The following table gives the numerical values. As with
"routingcost", a numerical-mode cost map MUST use these values, and
an ordinal-mode cost map may use any values consistent with this
ordering.
Roome, et al. Expires March 12, 2016 [Page 6]
Internet-Draft ALTO Interop September 2015
default linklocal loopback mine mine1 mine1a mine2 mine3
default - - - 3 4 5 4 4
linklocal - 0 - - - - - -
loopback - - 0 - - - - -
mine 3 - - 0 2 3 2 2
mine1 4 - - 2 0 2 3 3
mine1a 5 - - 3 2 0 2 4
mine2 4 - - 2 3 4 0 3
mine3 4 - - 2 3 4 3 0
peer1 - - - 3 4 5 4 4
peer2 - - - 2 3 4 3 3
private - - - - - - - -
tran1 - - - 4 5 6 5 5
tran2 - - - 3 4 5 4 4
peer1 peer2 private tran1 tran2
default - - - - -
linklocal - - - - -
loopback - - - - -
mine 3 2 - 4 3
mine1 4 3 - 5 4
mine1a 5 4 - 6 5
mine2 4 3 - 5 4
mine3 4 3 - 5 4
peer1 0 - - - -
peer2 - 0 - - -
private - - 0 - -
tran1 - - - 0 -
tran2 - - - - 0
Figure 3: "hopcount" Numerical Cost Map
Note that the hopcount costs are symmetric except for (mine1a,mine2).
The figure below depicts a network the default network and cost maps
MAY BE derived from:
+------------+ +-------------+
|130.0.0.0/16| |128.0.0.0/16 |
| peer1 | |2001:DB8::/33|
+----+-------+ | peer1 |
| +-----+-------+
| |
| +---------------+
| | +------------+
+-+---+-+ +-------+ |132.0.0.0/16|
| R7 +-------+ R8 +-----+ tran1 |
+---+---+ +-------+ +------------+
Roome, et al. Expires March 12, 2016 [Page 7]
Internet-Draft ALTO Interop September 2015
|
| +-----------+ +------------+
| |100.0.0.0/8| |100.0.0.0/10|
| | mine | | mine1 |
| +-----+-----+ +----+-------+
| | |
+---+---+ +---+---+ +---+---+ +------------+
| R6 +-------+ R1 +------+ R2 | +----+100.0.1.0/24|
+---+---+ +-+-+-+-+ +---+---+ | | mine1a |
| | | | | | +------------+
| | | | | |
+---+---+ | | | | +---+---+ +-------------+
| R11 | | | | +---+ R3 +---+100.0.64.0/24|
+---+---+ | | | +-+-+---+ | mine1a |
| | | | | | +-------------+
| | | | | |
+----+----+ | | | | | +--------------+
|0.0.0.0/0| | | | | +----+100.0.192.0/24|
|::/0 | | | | +-------+ | mine1a |
| default | | | | | +--------------+
+---------+ | | | |
| | | |
+-------+ | | | +---+---+
| R5 +------+ | +------+ R4 |
+---+---+ | +---+---+
| | |
+-------+------+ | +------+------+
|100.128.0.0/10| | |100.64.0.0/10|
| mine3 | | | mine2 |
+--------------+ | +-------------+
|
+------------+ +---+---+ +------------------+
|131.0.0.0/16+-----+ R9 +-----+ 129.0.0.0/16 |
| peer2 | +---+---+ |2001:DB8:8000::/33|
+------------+ | | peer2 |
| +------------------+
|
+---+---+ +------------+
| R10 +-----+135.0.0.0/16|
+-------+ | tran2 |
+------------+
Figure 4: Default Network Layout
The links between the routers (R1 - R11) have the following metrics.
To get the routingcost between two PIDs, sum the link metrics for all
paths between the PIDs, and take the lowest sum. Be aware that the
link between R3 and R4 is asymmetric.
Roome, et al. Expires March 12, 2016 [Page 8]
Internet-Draft ALTO Interop September 2015
R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11
R1 0 3 - 4 5 20 - - 25 - -
R2 3 0 2 - - - - - - - -
R3 - 2 0 4.5 - - - - - - -
R4 4 - 10 0 - - - - - - -
R5 5 - - - 0 - - - - - -
R6 10 - - - - 0 10 - - - 50
R7 - - - - - 10 0 15 - - -
R8 - - - - - - 15 0 - - -
R9 25 - - - - - - - 0 20 -
R10 - - - - - - - - 20 0 -
R11 - - - - - 50 - - - - 0
Figure 5: Default Network Link Weights
2.2. Alternate Network Map And Cost Maps
Every tested ALTO server MAY provide an alternate, or secondary,
network map with the PIDs defined below:
PID IP Address Block
---------------------------------------
dc1 101.0.0.0/16
dc2 102.0.0.0/16
dc3 103.0.0.0/16
dc4 104.0.0.0/16
user1 201.0.0.0/16
user2 202.0.0.0/16
user3 203.0.0.0/16
user4 204.0.0.0/16
default 0.0.0.0/0, ::0/0
loopback 127.0.0.0/8, ::1/128
linklocal 169.254.0.0/16, ff80::/10
private 10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16, fc00::/7
Figure 6: Alternate Network Map
Each ALTO server MAY provide a cost map for the "routingcost" metric
for the alternate network map. The following table presents the
numerical values for those costs. If a server provides a numerical-
mode cost map, it MUST use these values. If a server provides an
ordinal-mode cost map, the server may use whatever values it wants,
provided the ordinal values preserve the order of the numerical
values.
Roome, et al. Expires March 12, 2016 [Page 9]
Internet-Draft ALTO Interop September 2015
dc1 dc2 dc3 dc4 default user1 user2 user3 user4
dc1 0.0 20.0 20.0 20.0 50.0 10.0 15.0 20.0 25.0
dc2 20.0 0.0 20.0 20.0 55.0 15.0 10.0 15.0 20.0
dc3 20.0 20.0 0.0 20.0 55.0 20.0 15.0 10.0 15.0
dc4 20.0 20.0 20.0 0.0 50.0 25.0 20.0 15.0 10.0
default 50.0 55.0 55.0 50.0 - - - - -
user1 10.0 15.0 20.0 25.0 - 0.0 - - -
user2 15.0 10.0 15.0 20.0 - - 0.0 - -
user3 20.0 15.0 10.0 15.0 - - - 0.0 -
user4 25.0 20.0 15.0 10.0 - - - - 0.0
Figure 7: "routingcost" Numerical Cost Map
Note that this is a partial cost map, in that it does not define a
cost for every source and destination PID.
Each ALTO server MAY provide a cost map for the "hopcount" metric.
The following table gives the numerical values. As with
"routingcost", a numerical-mode cost map MUST use these values, and
an ordinal-mode cost map may use any values consistent with this
ordering.
dc1 dc2 dc3 dc4 default user1 user2 user3 user4
dc1 0 2 2 2 3 2 3 4 5
dc2 2 0 2 2 4 3 2 3 4
dc3 2 2 0 2 4 4 3 2 3
dc4 2 2 2 0 3 5 4 3 2
default 3 4 4 3 - - - - -
user1 2 3 4 5 - 0 - - -
user2 3 2 3 4 - - 0 - -
user3 4 3 2 3 - - - 0 -
user4 5 4 3 2 - - - - 0
Figure 8: "hopcount" Numerical Cost Map
The figure below depicts a network the alternate network and cost
maps MAY BE derived from:
Roome, et al. Expires March 12, 2016 [Page 10]
Internet-Draft ALTO Interop September 2015
+------------+ +------------+
|202.0.0.0/16| |203.0.0.0/16|
| user2 | | user3 |
+-----+------+ +-----+------+
| |
+---+---+ +---+---+
| R6 +-----------------------------------+ R7 |
+---+---+ +---+---+
| \ +------------+ +------------+ / |
| \ |102.0.0.0/16| |103.0.0.0/16| / |
| \ | dc2 | | dc3 | / |
| \ +----+-------+ +------+-----+ / |
| \ | | / |
| \ | | / |
| \ | | / |
| +---+----+ +----+---+ |
| | R2 +------+ R3 | |
| +---+----+ +----+---+ |
| | \ / | |
| | \ / | |
| | \ / | |
| | \/ | |
| | /\ | |
| | / \ | |
| | / \ | |
| | / \ | |
| +---+----+ +----+---+ |
| | R1 +------+ R4 | |
| +---+----+ +----+---+ |
| / | | \ |
| / | | \ |
| / | | \ |
| / +----+-------+ +------+-----+ \ |
| / |101.0.0.0/16| |104.0.0.0/16| \ |
| / | dc1 | | dc4 | \ |
| / +------------+ +------------+ \ |
+---+---+ +---+---+
| R5 +-------+ +-------+ +-------+ R8 |
+---+---+ +-----+ R9 +-----+ +---+---+
| +---+---+ |
| | |
+-----+------+ +----+----+ +-----+------+
|201.0.0.0/16| |0.0.0.0/0| |204.0.0.0/16|
| user1 | | ::/0 | | user4 |
+------------+ | default | +------------+
+---------+
Figure 9: Alternate Network Layout
Roome, et al. Expires March 12, 2016 [Page 11]
Internet-Draft ALTO Interop September 2015
The links between the routers (R1 - R11) have the following metrics.
To get the routingcost between two PIDs, sum the link metrics for all
paths between the PIDs, and take the lowest sum.
R1 R2 R3 R4 R5 R6 R7 R8 R9
R1 0 20 20 20 10 - - - -
R2 20 0 20 20 - 20 - - -
R3 20 20 0 20 - - 10 - -
R4 20 20 20 0 - - - 10 -
R5 10 - - - 0 5 - - 40
R6 - 10 - - 5 0 5 - -
R7 - - 10 - - 5 0 5 -
R8 - - - 10 - - 5 0 40
R9 - - - - 40 - - 40 0
Figure 10: Alternate Network Link Weights
2.3. Endpoint Properties
An ALTO server may provide the private endpoint property "priv:ietf-
type" with the following values for endpoints in the indicated
address blocks:
Value IP Address Block
---------------------------------------
mine 100.0.0.0/8
peer 128.0.0.0/6, 2001:DB8::/32
transit 132.0.0.0/16, 135.0.0.0/16
Figure 11: Values for "priv:ietf-type" endpoint property
3. Server Resources and Configuration
An ALTO server MUST provide the following resources, as required by
[RFC7285]:
o An Information Resource Directory (IRD) which describes all of the
server's resources.
o A Network Map resource for the default network defined above.
o A Cost Map resource for the "routingcost" metric for the default
network map. The mode may be either "numerical" or "ordinal". If
"numerical", the values MUST be identical to those defined above.
If "ordinal", the server can use whatever values it wants, but the
ordering MUST be consistent with the ordering of the "numerical"
values.
Roome, et al. Expires March 12, 2016 [Page 12]
Internet-Draft ALTO Interop September 2015
o An Endpoint Property Service for the "pid" property for the
default network map.
A server MAY provide whatever additional resources it desires, as
long as they are consistent with the network maps, cost maps and
endpoint properties defined in Section 2. In particular, a server
may provide:
o An additional Network Map resource, using the PIDs and address
prefixes for the alternate network map defined above.
o Cost Map resources for the "routingcost" and/or "hopcount"
metrics, in either "numerical" or "ordinal" modes, using the
values defined above.
o Filtered Network Map resources for either or both network maps.
o Filtered Cost Map resources for any combination of "routingcost"
and "hopcount" metrics, in either "numerical" and "ordinal" modes,
for either or both network maps. The resources may or may not
accept constraint tests.
o Endpoint Cost Service(s) or any combination of "routingcost" and
"hopcount" metrics, in either "numerical" and "ordinal" modes.
The cost values MUST be consistent with those for the default
network map. The resources may or may not accept constraint
tests.
o Endpoint Property Service(s) for the custom endpoint properties
defined above.
However, a server MUST NOT provide more than the two network maps
defined in this document. This restriction simplifies testing,
because it allows a client to automatically identify the alternate
network map (e.g., any network map which is not the default must be
the alternate network). If servers could offer three or more network
maps, a client would have to be provisioned with the resource id of
the alternate network map.
Note that if a server provides a Network Map resource for the
alternate network map, [RFC7285] requires the server to also provide
a Cost Map resource for the "routingcost" metric, in either
"numerical" or "ordinal" mode, and an Endpoint Property Service for
that network map's "pid" property.
A server MAY structure the IRD however it wants. In particular, a
server may
Roome, et al. Expires March 12, 2016 [Page 13]
Internet-Draft ALTO Interop September 2015
o Use secondary IRDs which the root IRD references.
o Use arbitrary resource IDs and cost type names.
o Use arbitrary URIs, in any recognized URI format.
o Provide multiple versions of POST-mode resources. For example, if
a server provides the secondary network map, it must provide an
Endpoint Property Service for the "pid" properties for both maps.
A server may provide one EPS for both properties, or a separate
EPS for each property.
4. Client Actions
When given the URI for an ALTO server's IRD, an ALTO client should
read the IRD, and for each resource that it recognizes, verify that
the server returns the correct response. Note that most of the data
the server returns is determined by the network maps, cost maps and
property values specified in Section 2, and hence can be verified by
a client. Some data cannot be determined a priori (e.g., resource id
and tag of a network map), but a client can verify their consistency
(e.g., a cost map's dependent-vtag field should match the vtag field
of the associated network map).
Because costs are floating-point values, instead of using an exact
equality test, clients should verify that the actual cost is within
0.001 of the expected cost. Also note that although the "hopcount"
values are integers, a server may return integral-valued floating
point numbers (e.g., 1.0 rather than 1).
It is expected that not every client will be able recognize and
verify every possible resource. However, each client MUST be able to
verify the default network map and the associated "routingcost" cost
map. In particular, although clients are not required to recognize
the alternate network map, if presented with an IRD with two network
maps, every client MUST be able to distinguish the default network
map, and its associated cost map, from the alternate network map.
Ideally clients should be scripted. That is, when given the URI for
a server, an ideal client would verify the server automatically,
without further operator intervention. A client should log the
resources it tested, and clearly highlight any response the client
considered incorrect.
The HTTP GET-mode resources (Network Map and Cost Map) do not require
client input, and hence testing is straight-forward: the client sends
the appropriate HTTP GET request, and verifies the response.
Roome, et al. Expires March 12, 2016 [Page 14]
Internet-Draft ALTO Interop September 2015
However, POST-mode resources, such as Filtered Cost Maps and Endpoint
Property Services, require client input. The following sections
present recommended input parameters for various resources, and
clients SHOULD implement as many of these tests as possible. Clients
MAY add additional tests, and are encouraged to do so.
4.1. Filtered Network Map Tests
o Empty "pid" array, omitted or empty "address-types" array. The
server should return the entire network map.
o Empty "pids" array, "address-types" array containing just "ipv6".
The server should return PIDs with ipv6 addresses, and only those
PIDs.
o "pids" array with one or more non-existent PID names, such as
"not-a-pid". The server should return an empty network map.
o "pids" array with a set of valid PID names (client's choice), plus
one or more non-existent PID names. The server should return the
valid PIDs and ignore the invalid ones.
4.2. Filtered Cost Map Tests
All tests require an appropriate "cost-type" parameter. At a
minimum, clients should run these tests for the "routingcost" metric
for the default network map. If possible, clients should also run
these tests for the "hopcount" metric and the alternate network map.
Clients should remember that when testing "ordinal" costs, any values
are acceptable as long as they are consistent with the order of the
"numerical" costs defined in Section 2. Clients are also reminded
that ordinal values are only comparable to other values in the same
request, and a server may recalculate ordinal values for each
request. Hence the same cost point may have ordinal value "6" in a
full cost map, but have value "1" in a filtered cost map.
o Empty "srcs" and "dsts" arrays. The server should return the
entire cost map.
o Empty "srcs" array, "dsts" array with one or more valid PIDs. The
server should return costs from all PIDs to the specified
destination PIDs.
o Empty "dsts" array, "srcs" array with one or more valid PIDs. The
server should return costs from the specified source PIDs to all
destination PIDs.
Roome, et al. Expires March 12, 2016 [Page 15]
Internet-Draft ALTO Interop September 2015
o "srcs" and "dsts" arrays with only non-existent PID names. The
server should return an empty cost map.
o "srcs" and "dsts" arrays with a set of valid PID names (client's
choice), plus one or more non-existent PID names in one or the
arrays. The server should return costs for the valid PIDs and
ignore the non-existent ones.
o The two-element constraint test "ge 20.0", "le 30.0" for the
numerical "routingcost" for the default network map, with empty
"srcs" and "dsts" arrays (assuming that resource allows
constraints, of course). The server should return the all costs
in the range, namely:
mine mine1 mine1a mine2 mine3 peer1 peer2
mine - - - - - 20.0 25.0
mine1 - - - - - 23.0 28.0
mine1a - - - - - 25.0 30.0
mine2 - - - - - 24.0 29.0
mine3 - - - - - 25.0 30.0
peer1 20.0 23.0 25.0 24.0 25.0 - -
peer2 25.0 28.0 30.0 29.0 30.0 - -
Figure 12: Filtered Cost Map Constraint Test
4.3. Endpoint Property Service Tests
Every client should verify that the server's EPS resource for the
default network's "pid" property returns the correct PID name for a
representative set of endpoint addresses. If possible, clients
should also verify the alternate network's "pid" property and the
"priv:ietf-type" property.
The table below gives the expected values for a set of addresses.
Clients are encouraged to test other addresses as well.
Roome, et al. Expires March 12, 2016 [Page 16]
Internet-Draft ALTO Interop September 2015
Address def.pid alt.pid priv:ietf-type
---------------- ------- ------- --------------
ipv4:0.0.0.1 default default -
ipv4:10.1.2.3 private private -
ipv4:100.0.0.1 mine1 default mine
ipv4:100.0.1.1 mine1a default mine
ipv4:100.0.192.1 mine1a default mine
ipv4:100.0.64.1 mine1a default mine
ipv4:100.130.0.1 mine3 default mine
ipv4:100.200.0.1 mine default mine
ipv4:100.75.0.1 mine2 default mine
ipv4:101.0.0.1 default dc1 -
ipv4:101.1.0.1 default default -
ipv4:102.0.0.1 default dc2 -
ipv4:103.0.0.1 default dc3 -
ipv4:104.0.0.1 default dc4 -
ipv4:127.0.0.1 loopback loopback -
ipv4:127.255.255.255 loopback loopback -
ipv4:128.0.0.1 peer1 default peer
ipv4:129.0.0.1 peer2 default peer
ipv4:130.0.0.1 peer1 default peer
ipv4:131.0.0.1 peer2 default peer
ipv4:132.0.0.1 tran1 default transit
ipv4:135.0.0.1 tran2 default transit
ipv4:169.254.1.2 linklocal linklocal -
ipv4:201.0.0.1 default user1 -
ipv4:201.1.2.3 default default -
ipv4:202.0.0.1 default user2 -
ipv4:203.0.0.1 default user3 -
ipv4:204.0.0.1 default user4 -
ipv4:99.0.0.1 default default -
ipv6:::1 loopback loopback -
ipv6:::2 default default -
ipv6:2001:db8:: peer1 default peer
ipv6:2001:db8:8000::1 peer2 default peer
ipv6:fc00:1:: private private -
ipv6:ff80:1:2:: linklocal linklocal -
Figure 13: EPS Test Addresses And Property Values
4.4. Endpoint Cost Service Tests
If the ALTO server provides an Endpoint Cost Service (ECS), and if
the client supports ECS queries, then the client SHOULD send
representative ECS queries to the server. For ECS, the server should
use the costs associated with the default network map, so the client
can verify the server's response.
Roome, et al. Expires March 12, 2016 [Page 17]
Internet-Draft ALTO Interop September 2015
An ECS-aware client SHOULD send the following queries to the server,
for the "routingcost" and/or "hopcount" metrics, as suppored by the
server. A client may add additional tests as desired.
4.4.1. ECS Test 1
This test determines the costs between various endpoints in the
"mine*" and "peer*" PIDs:
Query:
sources:
ipv4:100.0.0.128 ("mine1")
ipv4:100.131.39.11 ("mine3")
destinations:
ipv4:100.0.0.100 ("mine1")
ipv4:100.8.1.100 ("mine1")
ipv4:100.0.1.100 ("mine1a")
ipv4:100.64.0.100 ("mine2")
ipv4:100.128.4.100 ("mine3")
ipv4:130.0.1.100 ("peer1")
ipv4:132.0.8.100 ("tran1")
Costs: routingcost hopcount
ipv4:100.0.0.128 =>
ipv4:100.0.0.100 0.0 0
ipv4:100.8.1.100 0.0 0
ipv4:100.0.1.100 2.0 2
ipv4:100.64.0.100 6.5 3
ipv4:100.128.4.100 8.0 3
ipv4:130.0.1.100 23.0 4
ipv4:132.0.8.100 38.0 5
ipv4:100.131.39.11 =>
ipv4:100.0.0.100 8.0 3
ipv4:100.8.1.100 8.0 3
ipv4:100.0.1.100 10.0 4
ipv4:100.64.0.100 9.0 3
ipv4:100.128.4.100 0.0 0
ipv4:130.0.1.100 25.0 4
ipv4:132.0.8.100 40.0 5
Figure 14: ECS Test 1
4.4.2. ECS Test 2
This test determines the costs between endpoints in the "default"
PID:
Roome, et al. Expires March 12, 2016 [Page 18]
Internet-Draft ALTO Interop September 2015
Query:
sources:
ipv4:10.0.1.0 ("private")
ipv6:::2 ("default")
destinations:
ipv4:10.0.1.1 ("private")
ipv6:::1:2 ("default")
Figure 15: ECS Test 2
Since no costs are defined between those PIDs the server MUST return
an ECS response containing no costs.
4.4.3. ECS Test 3
This test determines the costs between endpoints in the "loopback"
PID:
Query:
sources:
ipv4:127.0.0.1
ipv6:::1
destinations:
ipv4:127.0.1.0
Costs: routingcost hopcount
ipv4:127.0.0.1 =>
ipv4:127.0.1.0 0.0 0
ipv6:::1 =>
ipv4:127.0.1.0 0.0 0
Figure 16: ECS Test 3
4.4.4. ECS Test 4
This test determines the cost when the client does not specify any
destination addresses. In this case, the server SHOULD use the
client's address as the destination. The costs, however, will depend
on the PID for the client's address, which in turn will depend on the
network configuration of the test environment. But in most cases,
the client's PID will be in either the "default" or "private" PIDs.
Roome, et al. Expires March 12, 2016 [Page 19]
Internet-Draft ALTO Interop September 2015
Query:
sources:
ipv4:100.0.0.128 ("mine1")
ipv4:100.131.39.11 ("mine3")
ipv4:100.200.0.1 ("mine")
ipv4:0.0.0.1 ("default")
ipv4:10.0.0.1 ("private")
ipv6:::2 ("default")
ipv6:FC01:: ("private")
destinations:
(none specified)
Costs: routingcost hopcount
(for clients in "default" PID)
ipv4:100.0.0.128 =>
(client address) 63.0 4
ipv4:100.131.39.11 =>
(client address) 65.0 4
ipv4:100.200.0.1 =>
(client address) 60.0 3
ipv4:0.0.0.1
(client address) - -
ipv4:10.0.0.1
(client address) - -
ipv6:::2
(client address) - -
ipv6:FC01::
(client address) - -
(for clients in "private" PID)
ipv4:100.0.0.128 =>
(client address) - -
ipv4:100.131.39.11 =>
(client address) - -
ipv4:100.200.0.1 =>
(client address) - -
ipv4:0.0.0.1
(client address) - -
ipv4:10.0.0.1
(client address) 0.0 0
ipv6:::2
(client address) - -
ipv6:FC01::
(client address) 0.0 0
Figure 17: ECS Test 4
Roome, et al. Expires March 12, 2016 [Page 20]
Internet-Draft ALTO Interop September 2015
4.4.5. ECS Test 5
This test determines the cost when the client does not specify any
source addresses. In this case, the server SHOULD use the client's
address as the source. The costs, however, will depend on the PID
for the client's address, which in turn will depend on the network
configuration of the test environment. But in most cases, the
client's PID will be in either the "default" or "private" PIDs.
Query:
sources:
(none specified)
destinations:
ipv4:100.0.0.128 ("mine1")
ipv4:100.131.39.11 ("mine3")
ipv4:100.200.0.1 ("mine")
ipv4:0.0.0.1 ("default")
ipv4:10.0.0.1 ("private")
ipv6:::2 ("default")
ipv6:FC01:: ("private")
Costs: routingcost hopcount
(for clients in "default" PID)
(client address) =>
ipv4:100.0.0.128 63.0 4
ipv4:100.131.39.11 65.0 4
ipv4:100.200.0.1 60.0 3
ipv4:0.0.0.1 - -
ipv4:10.0.0.1 - -
ipv6:::2 - -
ipv6:FC01:: - -
(for clients in "private" PID)
(client address) =>
ipv4:100.0.0.128 - -
ipv4:100.131.39.11 - -
ipv4:100.200.0.1 - -
ipv4:0.0.0.1 - -
ipv4:10.0.0.1 0.0 0
ipv6:::2 - -
ipv6:FC01:: 0.0 0
Figure 18: ECS Test 5
Roome, et al. Expires March 12, 2016 [Page 21]
Internet-Draft ALTO Interop September 2015
5. Error Tests
A client may send various invalid requests to a server to verify that
the server returns a reasonable response. The following tests are
suggested; clients may do additional tests as desired.
Each error test is defined by
description:
A short description of the test.
resource:
The type of server resource to which this test applies. E.g.,
Filtered Cost Map, Endpoint Property Service, etc.
accept:
The "Accept" HTTP header that the client should send to the
server, if something other than the media-type for that resource's
response.
content-type:
For POST requests, the Content-Type HTTP header the client should
send to the server.
input:
For POST requests, the JSON input the client should send to send
to the server.
http-status:
The HTTP status code the server should return.
code, field, value:
The values of the corresponding fields the server should return in
an ALTO error message (see Section 8.5.2 of [RFC7285]).
For "property" fields in Endpoint Property Service tests, clients
should replace the property name "default.pid" with the resource-
specific name of the server's default network map's "pid" property.
That is, if the resource id of the server's default network map is
"mynet", replace "default.pid" with "mynet.pid".
5.1. Invalid Field Type
For an EPS request, the "endpoints" input field should be a JSON
array of one or more addresses. In this test, it is a scalar JSON
string.
Roome, et al. Expires March 12, 2016 [Page 22]
Internet-Draft ALTO Interop September 2015
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: application/alto-endpointpropparams+json
input: { "properties": ["default.pid"],
"endpoints": "ipv4:1.2.3.4" }
http-status: 400 Bad Request
code: E_INVALID_FIELD_TYPE
field: endpoints
5.2. Missing "properties" Field
This test omits the required "properties" input field.
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: application/alto-endpointpropparams+json
input: { "endpoints": ["ipv4:1.2.3.4"] }
http-status: 400 Bad Request
code: E_MISSING_FIELD
field: properties
5.3. Invalid Property Name
This test requests the (presumably!) invalid property "no-such-
property".
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: application/alto-endpointpropparams+json
input: { "properties": ["no-such-property"],
"endpoints": "ipv4:1.2.3.4" }
http-status: 400 Bad Request
code: E_INVALID_FIELD_VALUE
field: properties
value: no-such-property
5.4. Invalid Endpoint Addresses
These tests verify that a server rejects various invalid endpoint
addresses.
Roome, et al. Expires March 12, 2016 [Page 23]
Internet-Draft ALTO Interop September 2015
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: application/alto-endpointpropparams+json
input: { "properties": ["default.pid"],
"endpoints": ["ipv4:1.2.3.256"] }
http-status: 400 Bad Request
code: E_INVALID_FIELD_VALUE
field: endpoints
value: ipv4:1.2.3.256
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: application/alto-endpointpropparams+json
input: { "properties": ["default.pid"],
"endpoints": ["ipv6:2001:db800::"] }
http-status: 400 Bad Request
code: E_INVALID_FIELD_VALUE
field: endpoints
value: ipv6:2001:db800::
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: application/alto-endpointpropparams+json
input: { "properties": ["default.pid"],
"endpoints": ["ipv4:2001:db8::"] }
http-status: 400 Bad Request
code: E_INVALID_FIELD_VALUE
field: endpoints
value: ipv4:2001:db8::
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: application/alto-endpointpropparams+json
input: { "properties": ["default.pid"],
"endpoints": ["ipv6:1.2.3.4"] }
http-status: 400 Bad Request
code: E_INVALID_FIELD_VALUE
field: endpoints
value: ipv6:1.2.3.4
5.5. Invalid Cost Type
This test requests the (presumably!) invalid cost metric "no-such-
metric". If the server's Filtered Cost Map resource only provides
"ordinal" mode cost types, the client should change "numerical" mode
Roome, et al. Expires March 12, 2016 [Page 24]
Internet-Draft ALTO Interop September 2015
to "ordinal" mode, to prevent the server from rejecting the request
because of an invalid cost mode.
resource: Filtered Cost Map
accept: application/alto-costmap+json
content-type: application/alto-costmapfilter+json
input: { "cost-type": [
"cost-metric": "no-such-cost",
"cost-mode": "numerical" ],
"endpoints": {
"srcs": [],
"dsts": [] }
}
http-status: 400 Bad Request
code: E_INVALID_FIELD_VALUE
field: cost-type/cost-metric
value: no-such-cost
5.6. Invalid Cost Mode
This test requests the invalid cost mode "no-such-mode". The client
should direct this request to a Filtered Cost Map resource which can
return the "routingcost" metric, to prevent the server from rejecting
the request because of an invalid cost metric.
resource: Filtered Cost Map
accept: application/alto-costmap+json
content-type: application/alto-costmapfilter+json
input: { "cost-type": [
"cost-metric": "routingcost",
"cost-mode": "no-such-mode" ],
"endpoints": {
"srcs": [],
"dsts": [] }
}
http-status: 400 Bad Request
code: E_INVALID_FIELD_VALUE
field: cost-type/cost-mode
value: no-such-mode
5.7. Invalid Cost Constraints
This test uses a constraint test with the undefined "ne" operator.
The client should direct this request to a Filtered Cost Map resource
which can return the "routingcost" metric in "numerical" mode, to
prevent the server from rejecting the request because of an invalid
cost metric or mode.
Roome, et al. Expires March 12, 2016 [Page 25]
Internet-Draft ALTO Interop September 2015
resource: Filtered Cost Map which accepts constraints
accept: application/alto-costmap+json
content-type: application/alto-costmapfilter+json
input: { "cost-type": [
"cost-metric": "routingcost",
"cost-mode": "numerical" ],
"endpoints": {
"srcs": [],
"dsts": [] },
"constraints": ["ne 10"]
}
http-status: 400 Bad Request
code: E_INVALID_FIELD_VALUE
field: constraints
value: no-such-mode
5.8. JSON Syntax Error
This test gives syntactically incorrect JSON input to the server.
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: application/alto-endpointpropparams+json
input: { "properties": }
http-status: 400 Bad Request
code: E_SYNTAX
5.9. Invalid Accept Header In GET Request
This test attempts to GET the Full Network Map, without including the
appropriate media-type ("application/alto-networkmap+json") in the
"Accept" HTTP header. Note that the client must ensure that the HTTP
library does not automatically append "*/*" to the "Accept" header.
Also note that because this is an HTTP error, [RFC7285] does not
specify the content the server is expected to return.
resource: Full Network Map
accept: text/html
http-status: 406 Not Acceptable
5.10. Invalid Accept Header In POST Request
This test requests a property without including the appropriate
media-type ("application/alto-endpointprop+json") in the "Accept"
HTTP header. Note that the client must ensure that the HTTP library
does not automatically append "*/*" to the "Accept" header. Note
that because this is an HTTP error, [RFC7285] does not specify the
content the server is expected to return.
Roome, et al. Expires March 12, 2016 [Page 26]
Internet-Draft ALTO Interop September 2015
resource: Endpoint Property Service
accept: text/html
content-type: application/alto-endpointpropparams+json
input: { "properties": ["default.pid"],
"endpoints": ["ipv4:1.2.3.4"] }
http-status: 406 Not Acceptable
5.11. Invalid Content-Type Header In POST Request
This test requests a property but provides input with an incorrect
Content-Type. Note that because this is an HTTP error, [RFC7285]
does not specify the content the server is expected to return.
resource: Endpoint Property Service
accept: application/alto-endpointprop+json
content-type: text/text
input: { "properties": ["default.pid"],
"endpoints": ["ipv4:1.2.3.4"] }
http-status: 415 Unsupported Media Type
(or 404 Not Found or 400 Bad Request)
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. Normative References
[RFC3849] Huston, G., Lord, L., and P. Smith, "IPv6 Address Prefix
Reserved for Documentation", RFC 3849, July 2004.
[RFC5737] Arkko, J., Cotton, M., and L. Vegoda, "IPv4 Address Prefix
Reserved for Documentation", RFC 5737, January 2010.
[RFC7159] Bray, T., "The JavaScript Object Notation (JSON) Data
Interchange Format", RFC 7159, March 2014.
[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.
Roome, et al. Expires March 12, 2016 [Page 27]
Internet-Draft ALTO Interop September 2015
Appendix A. Appendix: JSON Network And Cost Maps
This section presents the network and cost maps defined in Section 2
formatted as JSON ([RFC7159]) objects.
A.1. Default Network Map
"network-map": {
"default": {
"ipv4": ["0.0.0.0/0"],
"ipv6": ["::/0"] },
"linklocal": {
"ipv4": ["169.254.0.0/16"],
"ipv6": ["FF80::/10"] },
"loopback": {
"ipv4": ["127.0.0.0/8"],
"ipv6": ["::1/128"] },
"mine": {
"ipv4": ["100.0.0.0/8"] },
"mine1": {
"ipv4": ["100.0.0.0/10"] },
"mine1a": {
"ipv4": ["100.0.64.0/24", "100.0.192.0/24", "100.0.1.0/24"] },
"mine2": {
"ipv4": ["100.64.0.0/10"] },
"mine3": {
"ipv4": ["100.128.0.0/10"] },
"peer1": {
"ipv4": ["130.0.0.0/16", "128.0.0.0/16"],
"ipv6": ["2001:DB8::/33"] },
"peer2": {
"ipv4": ["131.0.0.0/16", "129.0.0.0/16"],
"ipv6": ["2001:DB8:8000::/33"] },
"private": {
"ipv4": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
"ipv6": ["FC00::/7"] },
"tran1": {
"ipv4": ["132.0.0.0/16"] },
"tran2": {
"ipv4": ["135.0.0.0/16"] }
}
Figure 19: Default Network Map, in JSON
Roome, et al. Expires March 12, 2016 [Page 28]
Internet-Draft ALTO Interop September 2015
A.2. Default "routingcost" Cost Map
"cost-map": {
"default": {
"mine": 60.0, "mine1": 63.0, "mine2": 64.0, "mine1a": 65.0,
"mine3": 65.0 },
"linklocal": {
"linklocal": 0.0 },
"loopback": {
"loopback": 0.0 },
"mine": {
"mine": 0.0, "mine1": 3.0, "mine2": 4.0, "mine1a": 5.0,
"mine3": 5.0, "peer1": 20.0, "peer2": 25.0, "tran1": 35.0,
"tran2": 45.0, "default": 60.0 },
"mine1": {
"mine": 3.0, "mine1": 0.0, "mine2": 6.5, "mine1a": 2.0,
"mine3": 8.0, "peer1": 23.0, "peer2": 28.0, "tran1": 38.0,
"tran2": 48.0, "default": 63.0 },
"mine1a": {
"mine": 5.0, "mine1": 2.0, "mine2": 4.5, "mine1a": 0.0,
"mine3": 10.0, "peer1": 25.0, "peer2": 30.0, "tran1": 40.0,
"tran2": 50.0, "default": 65.0 },
"mine2": {
"mine": 4.0, "mine1": 7.0, "mine2": 0.0, "mine1a": 9.0,
"mine3": 9.0, "peer1": 24.0, "peer2": 29.0, "tran1": 39.0,
"tran2": 49.0, "default": 64.0 },
"mine3": {
"mine": 5.0, "mine1": 8.0, "mine2": 9.0, "mine1a": 10.0,
"mine3": 0.0, "peer1": 25.0, "peer2": 30.0, "tran1": 40.0,
"tran2": 50.0, "default": 65.0 },
"peer1": {
"mine": 20.0, "mine1": 23.0, "mine2": 24.0, "mine1a": 25.0,
"mine3": 25.0, "peer1": 0.0
},
"peer2": {
"mine": 25.0, "mine1": 28.0, "mine2": 29.0, "mine1a": 30.0,
"mine3": 30.0, "peer2": 0.0 },
"private": {
"private": 0.0 },
"tran1": {
"mine": 35.0, "mine1": 38.0, "mine2": 39.0, "mine1a": 40.0,
"mine3": 40.0, "tran1": 0.0 },
"tran2": {
"mine": 45.0, "mine1": 48.0, "mine2": 49.0, "mine1a": 50.0,
"mine3": 50.0, "tran2": 0.0 }
}
Figure 20: Default "routingcost" Cost Map, in JSON
Roome, et al. Expires March 12, 2016 [Page 29]
Internet-Draft ALTO Interop September 2015
A.3. Default "hopcount" Cost Map
"cost-map": {
"default": {
"mine": 3, "mine1": 4, "mine2": 4, "mine3": 4,
"mine1a": 5 },
"linklocal": {
"linklocal": 0 },
"loopback": {
"loopback": 0 },
"mine": {
"mine": 0, "mine1": 2, "mine2": 2, "mine3": 2,
"mine1a": 3, "peer2": 2, "default": 3, "peer1": 3,
"tran2": 3, "tran1": 4 },
"mine1": {
"mine": 2, "mine1": 0, "mine2": 3, "mine3": 3,
"mine1a": 2, "peer2": 3, "default": 4, "peer1": 4,
"tran2": 4, "tran1": 5 },
"mine1a": {
"mine": 3, "mine1": 2, "mine2": 2, "mine3": 4,
"mine1a": 0, "peer2": 4, "default": 5, "peer1": 5,
"tran2": 5, "tran1": 6 },
"mine2": {
"mine": 2, "mine1": 3, "mine2": 0, "mine3": 3,
"mine1a": 4, "peer2": 3, "default": 4, "peer1": 4,
"tran2": 4, "tran1": 5 },
"mine3": {
"mine": 2, "mine1": 3, "mine2": 3, "mine3": 0,
"mine1a": 4, "peer2": 3, "default": 4, "peer1": 4,
"tran2": 4, "tran1": 5 },
"peer1": {
"mine": 3, "mine1": 4, "mine2": 4, "mine3": 4,
"mine1a": 5, "peer1": 0 },
"peer2": {
"mine": 2, "mine1": 3, "mine2": 3, "mine3": 3,
"mine1a": 4, "peer2": 0 },
"private": {
"private": 0 },
"tran1": {
"mine": 4, "mine1": 5, "mine2": 5, "mine3": 5,
"mine1a": 6, "tran1": 0 },
"tran2": {
"mine": 3, "mine1": 4, "mine2": 4, "mine3": 4,
"mine1a": 5, "tran2": 0 }
}
Figure 21: Default "hopcount" Cost Map, in JSON
Roome, et al. Expires March 12, 2016 [Page 30]
Internet-Draft ALTO Interop September 2015
A.4. Alternate Network Map
"network-map": {
"dc1": {
"ipv4": ["101.0.0.0/16"] },
"dc2": {
"ipv4": ["102.0.0.0/16"] },
"dc3": {
"ipv4": ["103.0.0.0/16"] },
"dc4": {
"ipv4": ["104.0.0.0/16"] },
"default": {
"ipv4": ["0.0.0.0/0"],
"ipv6": ["::/0"] },
"linklocal": {
"ipv4": ["169.254.0.0/16"],
"ipv6": ["FF80::/10"] },
"loopback": {
"ipv4": ["127.0.0.0/8"],
"ipv6": ["::1/128"] },
"private": {
"ipv4": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
"ipv6": ["FC00::/7"] },
"user1": {
"ipv4": ["201.0.0.0/16"] },
"user2": {
"ipv4": ["202.0.0.0/16"] },
"user3": {
"ipv4": ["203.0.0.0/16"] },
"user4": {
"ipv4": ["204.0.0.0/16"] }
}
Figure 22: Alternate Network Map, in JSON
Roome, et al. Expires March 12, 2016 [Page 31]
Internet-Draft ALTO Interop September 2015
A.5. Alternate "routingcost" Cost Map
"cost-map": {
"dc1": {
"dc1": 0.0, "user1": 10.0, "user2": 15.0, "dc2": 20.0,
"dc3": 20.0, "dc4": 20.0, "user3": 20.0, "user4": 25.0,
"default": 50.0 },
"dc2": {
"dc1": 20.0, "user1": 15.0, "user2": 10.0, "dc2": 0.0,
"dc3": 20.0, "dc4": 20.0, "user3": 15.0, "user4": 20.0,
"default": 55.0 },
"dc3": {
"dc1": 20.0, "user1": 20.0, "user2": 15.0, "dc2": 20.0,
"dc3": 0.0, "dc4": 20.0, "user3": 10.0, "user4": 15.0,
"default": 55.0 },
"dc4": {
"dc1": 20.0, "user1": 25.0, "user2": 20.0, "dc2": 20.0,
"dc3": 20.0, "dc4": 0.0, "user3": 15.0, "user4": 10.0,
"default": 50.0 },
"default": {
"dc1": 50.0, "dc2": 55.0, "dc3": 55.0, "dc4": 50.0 },
"linklocal": {
"linklocal": 0.0 },
"loopback": {
"loopback": 0.0 },
"private": {
"private": 0.0 },
"user1": {
"dc1": 10.0, "user1": 0.0, "dc2": 15.0, "dc3": 20.0,
"dc4": 25.0 },
"user2": {
"dc1": 15.0, "user2": 0.0, "dc2": 10.0, "dc3": 15.0,
"dc4": 20.0 },
"user3": {
"dc1": 20.0, "dc2": 15.0, "dc3": 10.0, "dc4": 15.0,
"user3": 0.0 },
"user4": {
"dc1": 25.0, "dc2": 20.0, "dc3": 15.0, "dc4": 10.0,
"user4": 0.0 }
}
Figure 23: Alternate "routingcost" Cost Map, in JSON
Roome, et al. Expires March 12, 2016 [Page 32]
Internet-Draft ALTO Interop September 2015
A.6. Alternate "hopcount" Cost Map
"cost-map": {
"dc1": {
"dc1": 0, "dc2": 2, "dc3": 2, "dc4": 2,
"user1": 2, "default": 3, "user2": 3, "user3": 4,
"user4": 5 },
"dc2": {
"dc1": 2, "dc2": 0, "dc3": 2, "dc4": 2,
"user1": 3, "default": 4, "user2": 2, "user3": 3,
"user4": 4 },
"dc3": {
"dc1": 2, "dc2": 2, "dc3": 0, "dc4": 2,
"user1": 4, "default": 4, "user2": 3, "user3": 2,
"user4": 3 },
"dc4": {
"dc1": 2, "dc2": 2, "dc3": 2, "dc4": 0,
"user1": 5, "default": 3, "user2": 4, "user3": 3,
"user4": 2 },
"default": {
"dc1": 3, "dc2": 4, "dc3": 4, "dc4": 3 },
"linklocal": {
"linklocal": 0 },
"loopback": {
"loopback": 0 },
"private": {
"private": 0 },
"user1": {
"dc1": 2, "dc2": 3, "dc3": 4, "dc4": 5,
"user1": 0 },
"user2": {
"dc1": 3, "dc2": 2, "dc3": 3, "dc4": 4,
"user2": 0 },
"user3": {
"dc1": 4, "dc2": 3, "dc3": 2, "dc4": 3,
"user3": 0 },
"user4": {
"dc1": 5, "dc2": 4, "dc3": 3, "dc4": 2,
"user4": 0 }
}
Figure 24: Alternate "hopcount" Cost Map, in JSON
Roome, et al. Expires March 12, 2016 [Page 33]
Internet-Draft ALTO Interop September 2015
Authors' Addresses
Wendy Roome
Bell Laboratories, Alcatel-Lucent
600 Mountain Ave, Rm 3B-324
Murray Hill, NJ 07974
USA
Phone: +1-908-582-7974
Email: w.roome@alcatel-lucent.com
GuohaiChen
Huawei Technologies
101 Software Avenue, Yuhua District
Nanjing,
China
Phone: +8615805180590
Email: chenguohai@huawei.com chenguohai67@outlook.com
Hans Seidel
BENOCS GmbH
Winterfeldtstr. 21
Berlin,
Germany
Phone: +493057700040
Email: hseidel@benocs.com
Roome, et al. Expires March 12, 2016 [Page 34]