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]