<?xml version="1.0" encoding="US-ASCII"?>
<!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com)
     by Daniel M Kohn (private) -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
]>
<rfc category="std" docName="draft-ietf-alto-performance-metrics-02"
     ipr="trust200902">
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

  <?rfc toc="yes" ?>

  <?rfc symrefs="yes" ?>

  <?rfc sortrefs="yes"?>

  <?rfc iprnotified="no" ?>

  <?rfc strict="yes" ?>

  <front>
    <title abbrev="ALTO Performance Cost Metrics">ALTO Performance Cost
    Metrics</title>

    <author fullname="Qin Wu" initials="Q." surname="Wu">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>

          <city>Nanjing</city>

          <region>Jiangsu</region>

          <code>210012</code>

          <country>China</country>
        </postal>

        <email>bill.wu@huawei.com</email>
      </address>
    </author>

    <author fullname="Y. Richard Yang" initials="Y." surname="Yang">
      <organization>Yale University</organization>

      <address>
        <postal>
          <street>51 Prospect St</street>

          <city>New Haven</city>

          <region>CT</region>

          <code>06520</code>

          <country>USA</country>
        </postal>

        <email>yry@cs.yale.edu</email>
      </address>
    </author>

    <author fullname="Young Lee" initials="Y." surname="Lee">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street>1700 Alma Drive, Suite 500</street>

          <city>Plano</city>

          <region>TX</region>

          <code>75075</code>

          <country>USA</country>
        </postal>

        <email>leeyoung@huawei.com</email>
      </address>
    </author>

    <author fullname="Dhruv Dhody" initials="D." surname="Dhody">
      <organization>Huawei</organization>

      <address>
        <postal>
          <street>Leela Palace</street>

          <city>Bangalore</city>

          <region>Karnataka</region>

          <code>560008</code>

          <country>INDIA</country>
        </postal>

        <email>dhruv.ietf@gmail.com</email>
      </address>
    </author>

    <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
      <organization>Nokia Bell Labs</organization>

      <address>
        <postal>
          <street>Route de Villejust</street>

          <city>Nozay</city>

          <region/>

          <code>91460</code>

          <country>FRANCE</country>
        </postal>

        <email>sabine.randriamasy@nokia-bell-labs.com</email>
      </address>
    </author>

    <date year="2017"/>

    <area>TSV Area</area>

    <workgroup>ALTO Working Group</workgroup>

    <keyword>RFC</keyword>

    <keyword>Request for Comments</keyword>

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <keyword>JavaScript Object Notation, Application-Layer Traffic
    Optimization</keyword>

    <abstract>
      <t>Cost Metric is a basic concept in Application-Layer Traffic
      Optimization (ALTO). It is used in both the Cost Map Service and the
      Endpoint Cost Service. <!-- Future extensions to ALTO may also use Cost Metric. --></t>

      <t>Different applications may benefit from different Cost Metrics. For
      example, a Resource Consumer may prefer Resource Providers that offer a
      low delay delivery to the Resource Consumer. However the base ALTO
      protocol [ALTO] has documented only one single cost metric, i.e., the
      generic "routingcost" metric (Sec. 14.2 of ALTO base specification
      [ALTO]).</t>

      <t>This document, proposes a set of Cost Metrics, derived and aggregated
      from routing protocols with different granularity and scope, such as
      BGP-LS,OSPF-TE and ISIS-TE, or from end-to-end traffic management tools.
      It currently documents Network Performance Cost Metrics reporting on
      network delay, jitter, packet loss, hop count, and bandwidth. These
      metrics may be exposed by an ALTO Server to allow applications to
      determine "where" to connect based on network performance criteria.
      Additional Cost Metrics involving ISP specific considerations or other
      network technologies may be documented in further versions of this
      draft.</t>

      <t>Requirements Language The key words "MUST", "MUST NOT", "REQUIRED",
      "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in RFC
      2119 [RFC2119].</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>Cost Metric is a basic concept in Application-Layer Traffic
      Optimization (ALTO). It is used in both the Cost Map Service and the
      Endpoint Cost Service. In particular, applications may benefit from
      knowing network performance measured on several Cost Metrics. For
      example, a more delay-sensitive application may focus on latency, and a
      more bandwidth-sensitive application may focus on available
      bandwidth.</t>

      <t>This document introduces a set of new cost metrics, listed in Table
      1, to support the aforementioned applications and allow them to
      determine "where" to connect based on network performance criteria.
      Hence, this document extends the base ALTO protocol [ALTO], which
      defines only a single cost metric, i.e., the generic "routingcost"
      metric (Sec. 14.2 of ALTO base specification [ALTO]).</t>

      <figure>
        <artwork>
+----------+--------------+---------------------------------------------+
|Namespace | Property     | Reference                                   |
+----------+--------------+---------------------------------------------+
|          |  owdelay     | See Section 3,[RFC2679] Section 3.6         |
|          |   rtt        | See Section 4,[RFC2681] Section 2.6         |
|          |   pdv        | See Section 5,[RFC3393] Section 2.6         |
|          | hopcount     | See Section 6,[RFC7285]                     |
|          | pktloss      | See Section 7,[RFC7680] Section 2.6         |
|          | maxresbw     | See Section 8.1,[RFC5305] Section 3.5       |
|          | residbw      | See Section 8.2,[RFC7810] Section 4.5       |
|          | availbw      | See Section 8.3,[RFC7810] Section 4.6       |
|          | utilbw       | See Section 8.4,[RFC7810 Section 4.7        |
+----------+--------------+---------------------------------------------+
                       Table 1.</artwork>
      </figure>

      <t>The purpose of this draft is to list the metrics likely to be exposed
      to ALTO Clients, including those already specified in other
      standardization groups and as such it does not claim novelty on all the
      specified metrics. Some metrics may have values produced by explicitly
      specified measurement methods such as those specified in IPPM, some may
      be ISP dependent such as those registered in ISIS or OSPF-TE. In this
      case, this document will refer to the relevant specifications.</t>

      <t>An ALTO server may provide a subset of the cost metrics described in
      this document. These cost metrics can be retrieved and aggregated from
      routing protocols or other traffic measurement management tools (See
      Figure 1). Note that these cost metrics are optional and not all them
      need to be exposed to applications. If some are subject to privacy
      concerns, the ALTO server should not provide them to the client. <figure>
          <artwork>
+--------+   +--------+  +--------+
| Client |   | Client |  | Client |
+----^---+   +---^----+  +---^----+
     |           |           |
     +-----------|-----------+
           NBI   |ALTO protocol
                 |
                 |
              +--+-----+  retrieve       +---------+
              |  ALTO  |&lt;----------------| Routing |
              | Server |  and aggregation|         |
              |        |&lt;-------------+  | Protocol|
              +--------+              |  +---------+
                                      |
                                      |  +---------+
                                      |  |Management
                                      ---|         |
                                         |  Tool   |
                                         +---------+
                 Figure 1.End-to-End Path Cost Metrics Exposing</artwork>
        </figure></t>

      <t>When an ALTO server supports a cost metric defined in this document,
      it SHOULD announce this metric in its IRD.</t>

      <t>Additionally, further versions of this document may define network
      metric values that stem from both measurements and provider policies as
      for example, many end-to-end path bandwidth related ALTO metrics. ALTO
      may convey such information, not available via 3rd party measurement
      tools. Besides, IPPM informational RFC 5136 points the difficulty to
      have a unified nomenclature for network capacity related
      measurements.</t>

      <t>As for the reliability and trust in the exposed metric values,
      applications will rapidly give up using ALTO-based guidance if they feel
      the exposed information does not preserve their performance level or
      even degrades it.</t>

      <!-- <t>The definitions of a set of cost metrics can allow us to extend the
      ALTO base protocol (e.g., allowing output and constraints use different
      cost metrics), but such extensions are not in the scope of this
      document.</t> -->

      <t>Following the ALTO base protocol, this document uses JSON to specify
      the value type of each defined metric. See [RFC4627] for JSON data type
      specification.</t>
    </section>

    <section title="Challenges on data sources and computation of ALTO performance metrics">
      <t><!-- The cost metrics described in this document are similar, in that they
      may use similar data sources and have similar issues in their
      calculation. Hence, instead of specifying such issues for each metric
      individually, we specify the common issue in this section. --></t>

      <section title="Data sources">
        <t>An ALTO server needs data sources to compute the cost metrics
        described in this document. This document does not define the exact
        data sources. For example, the ALTO server may use log servers or the
        OAM system as its data source [ALTO-DEPLOYMENT]. In particular, the
        cost metrics defined in this document can be computed using routing
        systems as the data sources. Mechanisms defined in [RFC3630],
        [RFC3784], [OSPF-TE], [ISIS-TE], [BGP-LS] and [BGP-PM] that allow an
        ALTO Server to retrieve and derive the necessary information to
        compute the metrics that we describe in this document.</t>

        <t>One challenge lies in the data sources originating the ALTO metric
        values. The very purpose of ALTO is to guide application traffic with
        provider network centric information that may be exposed to ALTO
        Clients in the form of network performance metric values. Not all of
        these metrics have values produced by standardized measurement methods
        or routing protocols. Some of them involve provider-centric policy
        considerations. Some of them may describe wireless or cellular
        networks. To reliably guide users and applications while preserving
        provider privacy, ALTO performance metric values may also add
        abstraction to measurements or provide unitless performance
        scores.</t>
      </section>

      <section title="Computation of ALTO performance metrics">
        <t>The metric values exposed by an ALTO server may result from
        additional processing on measurements from data sources to compute
        exposed metrics. This may involve data processing tasks such as
        aggregating the results across multiple systems, removing outliers,
        and creating additional statistics.</t>

        <t>One challenge in describing the metrics is that performance metrics
        often depend on configuration parameters. For example, the value of
        packet loss rate depends on the measurement interval and varies over
        time. To handle this issue, an ALTO server may collect data on time
        periods covering the previous and current time or only collect data on
        present time. The ALTO server may further aggregate these data to
        provide an abstract and unified view that can be more useful to
        applications. To make the ALTO client better understand how to use
        these performance data, the ALTO server may provide the client with
        the validity period of the exposed metric values.</t>

        <t>Another challenge relates to the availability of end-to-end path
        values for certain metrics. Applications value information relating to
        bandwidth availability where as bandwidth related metrics can often be
        only measured at the link level. This document specifies a set of
        link-level bandwidth related values that may be exposed as such by an
        ALTO server. The server may also expose other metrics derived from
        their aggregation and having different levels of endpoint granularity,
        e.g. link endpoints or session endpoints. The metric specifications
        may also expose the utilised aggregation laws.</t>
      </section>
    </section>

    <section title="Cost Metric: POWDelay">
      <t><list style="hanging">
          <t hangText="Metric name:"><vspace blankLines="1"/>Periodic One Way
          Delay<vspace blankLines="1"/></t>

          <t hangText="Metric Description:"><vspace blankLines="1"/> To
          specify spatial and temporal aggregated delay of a stream of packets
          exchanged between the specified source and destination or the time
          that the packet spends to travel from source to destination. The
          spatial aggregation level is specified in the query context (e.g.,
          PID to PID, or endpoint to endpoint). <vspace blankLines="1"/></t>

          <t hangText="Method of Measurement or Calculation:"><vspace
          blankLines="1"/>See section 8.3 of [I-D.ietf-ippm-initial-registry]
          for Measurement Method.<vspace blankLines="1"/></t>

          <t hangText="Units of Measurement:"><vspace blankLines="1"/>See
          section 8.4.3 of [I-D.ietf-ippm-initial-registry] for Measurement
          Unit. The unit is expressed in seconds. <vspace blankLines="1"/></t>

          <t
          hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
          blankLines="1"/>See section 2.1, Data sources.<vspace
          blankLines="1"/></t>

          <t hangText="Measurement Timing:"><vspace blankLines="1"/>See
          section 8.3.5 of [I-D.ietf-ippm-initial-registry] for Measurement
          Timing.<vspace blankLines="1"/></t>

          <t hangText="Use and Applications:"><vspace blankLines="1"/> The
          Metric value Type is a single 'JSONNumber' type value containing a
          non-negative integer component that may be followed by an exponent
          part. The Cost Mode is encoded as a US-ASCII string. <vspace
          blankLines="1"/>This metric could be used as a cost metric
          constraint attribute used either together with cost metric attribute
          'routingcost' or on its own or as a returned cost metric in the
          response.<vspace blankLines="1"/></t>
        </list></t>

      <figure>
        <artwork>
Example 1: Delay value on source-destination endpoint pairs 

 POST /endpointcost/lookup HTTP/1.1
 Host: alto.example.com
 Content-Length: TBA
 Content-Type: application/alto-endpointcostparams+json
 Accept: application/alto-endpointcost+json,application/alto-error+json

{
  "cost-type": {"cost-mode" : "numerical",
                "cost-metric" : "powdelay"},
  "endpoints" : {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [
      "ipv4:192.0.2.89",
      "ipv4:198.51.100.34",
      "ipv6:2000::1:2345:6789:abcd"
    ]
  }
}

HTTP/1.1 200 OK
Content-Length: TBA
Content-Type: application/alto-endpointcost+json
{
  "meta" :{
    "cost-type": {"cost-mode" : "numerical",
                  "cost-metric" : "powdelay"
     }
   },
    "endpoint-cost-map" : {
      "ipv4:192.0.2.2": {
        "ipv4:192.0.2.89"    : 10,
        "ipv4:198.51.100.34" : 20,
        "ipv6:2000::1:2345:6789:abcd"  : 30,
    }
  }
}
</artwork>
      </figure>
    </section>

    <section title="Cost Metric: RTT">
      <t><list style="hanging">
          <t hangText="Metric name:"><vspace blankLines="1"/>Round Trip
          Delay<vspace blankLines="1"/></t>

          <t hangText="Metric Description:"><vspace blankLines="1"/>To specify
          spatial and temporal aggregated round trip delay between the
          specified source and destination or the time that the packet spends
          to travel from source to destination and then from destination to
          source. The spatial aggregation level is specified in the query
          context (e.g., PID to PID, or endpoint to endpoint). <vspace
          blankLines="1"/></t>

          <t hangText="Method of Measurement or Calculation:"><vspace
          blankLines="1"/>See section 4.3 of [I-D.ietf-ippm-initial-registry]
          for Measurement Method. <vspace blankLines="1"/></t>

          <t hangText="Units of Measurement:"><vspace blankLines="1"/>See
          section 4.4.3 of [I-D.ietf-ippm-initial-registry] for Measurement
          Unit. The unit is expressed in seconds. <vspace blankLines="1"/></t>

          <t
          hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
          blankLines="1"/>See section 2.1, Data sources.<vspace
          blankLines="1"/></t>

          <t hangText="Measurement Timing:"><vspace blankLines="1"/>See
          section 4.3.5 of [I-D.ietf-ippm-initial-registry] for Measurement
          Timing. <vspace blankLines="1"/></t>

          <t hangText="Use and Applications:"><vspace blankLines="1"/>See
          section 3 for use and application.<vspace blankLines="1"/></t>
        </list></t>

      <figure>
        <artwork>
 Example 7: Round Trip Delay value on source-destination endpoint pairs
 
  POST /endpointcost/lookup HTTP/1.1
  Host: alto.example.com
  Content-Length: TBA
  Content-Type: application/alto-endpointcostparams+json
  Accept: application/alto-endpointcost+json,application/alto-error+json

 {
   "cost-type": {"cost-mode" : "numerical",
                 "cost-metric" : "rtt"},
   "endpoints" : {
     "srcs": [ "ipv4:192.0.2.2" ],
     "dsts": [
       "ipv4:192.0.2.89",
       "ipv4:198.51.100.34",
       "ipv6:2000::1:2345:6789:abcd"
     ]
   }
 }

 HTTP/1.1 200 OK
 Content-Length: TBA
 Content-Type: application/alto-endpointcost+json
 {
   "meta" :{
     "cost-type": {"cost-mode" : "numerical",
                   "cost-metric" : "rtt"
      }
    },
     "endpoint-cost-map" : {
       "ipv4:192.0.2.2": {
         "ipv4:192.0.2.89"    : 4,
         "ipv4:198.51.100.34" : 3,
         "ipv6:2000::1:2345:6789:abcd"  : 2,
     }
   }
 }

</artwork>
      </figure>
    </section>

    <section title="Cost Metric: PDV">
      <t><list style="hanging">
          <t hangText="Metric name:"><vspace blankLines="1"/>Packet Delay
          Variation<vspace blankLines="1"/></t>

          <t hangText="Metric Description:"><vspace blankLines="1"/>To specify
          spatial and temporal aggregated jitter (packet delay variation) with
          respect to the minimum delay observed on the stream over the
          specified source and destination. The spatial aggregation level is
          specified in the query context (e.g., PID to PID, or endpoint to
          endpoint). <vspace blankLines="1"/></t>

          <t hangText="Method of Measurement or Calculation:"><vspace
          blankLines="1"/>See section 5.3 of [I-D.ietf-ippm-initial-registry]
          for Measurement Method. <vspace blankLines="1"/></t>

          <t hangText="Units of Measurement:"><vspace blankLines="1"/>See
          section 5.4.4 of [I-D.ietf-ippm-initial-registry] for Measurement
          Unit. The unit is expressed in seconds.<vspace blankLines="1"/></t>

          <t
          hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
          blankLines="1"/>See section 2.1, Data sources.<vspace
          blankLines="1"/></t>

          <t hangText="Measurement Timing:"><vspace blankLines="1"/>See
          section 5.3.5 of [I-D.ietf-ippm-initial-registry] for Measurement
          Timing.<vspace blankLines="1"/></t>

          <t hangText="Use and Applications:"><vspace blankLines="1"/>See
          section 3 for use and application.<vspace blankLines="1"/></t>
        </list></t>

      <figure>
        <artwork>
Example 2: Delay jitter value on source-destination endpoint pairs

POST /endpointcost/lookup HTTP/1.1
Host: alto.example.com
Content-Length: TBA
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,application/alto-error+json

{
  "cost-type": {"cost-mode" : "numerical",
   "cost-metric" : "delayjitter"},
  "endpoints" : {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [
      "ipv4:192.0.2.89",
      "ipv4:198.51.100.34",
      "ipv6:2000::1:2345:6789:abcd"
    ]
  }
}
HTTP/1.1 200 OK
 Content-Length: TBA
 Content-Type: application/alto-endpointcost+json
{
  "meta": {
           "cost type": {
           "cost-mode": "numerical",
           "cost-metric":"delayjitter"
    }
   },
  "endpoint-cost-map": {
           "ipv4:192.0.2.2": {
           "ipv4:192.0.2.89"    : 0 
           "ipv4:198.51.100.34" : 1
           "ipv6:2000::1:2345:6789:abcd"  : 5
         }
      }
   }
</artwork>
      </figure>
    </section>

    <section title="Cost Metric: Hop Count">
      <t>The metric hopcount is mentioned in [ALTO] as an example. This
      section further clarifies its properties.</t>

      <t><list style="hanging">
          <t hangText="Metric name:"><vspace blankLines="1"/>Hop count<vspace
          blankLines="1"/></t>

          <t hangText="Metric Description:"><vspace blankLines="1"/> To
          specify the number of hops in the path between the source endpoint
          and the destination endpoint. The hop count is a basic measurement
          of distance in a network and can be exposed as Router Hops, IP hops
          or other hops in direct relation to the routing protocols
          originating this information. It might also result from the
          aggregation of such information.</t>

          <t hangText="Method of Measurement or Calculation:"><vspace
          blankLines="1"/>See section 2.2, Computation of metrics.<vspace
          blankLines="1"/></t>

          <t hangText="Units of Measurement:"><vspace blankLines="1"/>The unit
          is integer number.<vspace blankLines="1"/></t>

          <t
          hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
          blankLines="1"/>See section 2.1, Data sources.<vspace
          blankLines="1"/></t>

          <t hangText="Measurement Timing:"><vspace blankLines="1"/>See
          section 2.1, second paragraph for Measurement Timing.<vspace
          blankLines="1"/></t>

          <t hangText="Use and Applications:"><vspace blankLines="1"/>See
          section 3 for use and application.<vspace blankLines="1"/></t>
        </list></t>

      <figure>
        <artwork>
Example 4: hopcount value on source-destination endpoint pairs

POST /endpointcost/lookup HTTP/1.1
Host: alto.example.com
Content-Length: TBA
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,application/alto-error+json

  {
    "cost-type": {"cost-mode" : "numerical",
     "cost-metric" : "hopcount"},
    "endpoints" : {
      "srcs": [ "ipv4:192.0.2.2" ],
      "dsts": [
        "ipv4:192.0.2.89",
        "ipv4:198.51.100.34",
        "ipv6:2000::1:2345:6789:abcd"
      ]
    }
  }
HTTP/1.1 200 OK
Content-Length: TBA
Content-Type: application/alto-endpointcost+json
{
    "meta": {
               "cost type": {
             "cost-mode": "numerical",
             "cost-metric":"hopcount"}
       }
    },
   "endpoint-cost-map": {
           "ipv4:192.0.2.2": {
           "ipv4:192.0.2.89"   : 5,
           "ipv4:198.51.100.34": 3,
           "ipv6:2000::1:2345:6789:abcd" : 2,
                             }
             }
 }
</artwork>
      </figure>
    </section>

    <section title="Cost Metric: Packet Loss">
      <t><list style="hanging">
          <t hangText="Metric name:"><vspace blankLines="1"/>Packet
          loss<vspace blankLines="1"/></t>

          <t hangText="Metric Description:"><vspace blankLines="1"/>To specify
          spatial and temporal aggregated packet loss over the specified
          source and destination. The spatial aggregation level is specified
          in the query context (e.g., PID to PID, or endpoint to endpoint).
          <vspace blankLines="1"/></t>

          <t hangText="Method of Measurement or Calculation:"><vspace
          blankLines="1"/>See section 2.6 of [RFC7680] for Measurement
          Method.<vspace blankLines="1"/></t>

          <t hangText="Units of Measurement:"><vspace blankLines="1"/>The unit
          is percentile.<vspace blankLines="1"/></t>

          <t
          hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
          blankLines="1"/>See section 2.1, Data sources.<vspace
          blankLines="1"/></t>

          <t hangText="Measurement Timing:"><vspace blankLines="1"/>See
          section 2 and section3 of [RFC7680] for Measurement Timing.<vspace
          blankLines="1"/></t>

          <t hangText="Use and Applications:"><vspace blankLines="1"/>See
          section 3 for use and application.<vspace blankLines="1"/></t>
        </list></t>

      <figure>
        <artwork>
Example 3: pktloss value on source-destination endpoint pairs

POST /endpointcost/lookup HTTP/1.1
Host: alto.example.com
Content-Length: TBA
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,application/alto-error+json

  {
    "cost-type": {"cost-mode" : "numerical",
     "cost-metric" : "pktloss"},
    "endpoints" : {
      "srcs": [ "ipv4:192.0.2.2" ],
      "dsts": [
        "ipv4:192.0.2.89",
        "ipv4:198.51.100.34",
        "ipv6:2000::1:2345:6789:abcd"
      ]
    }
  }
HTTP/1.1 200 OK
Content-Length: TBA
Content-Type: application/alto-endpointcost+json
{
    "meta": {
               "cost type": {
             "cost-mode": "numerical",
             "cost-metric":"pktloss"}
       }
    },
   "endpoint-cost-map": {
           "ipv4:192.0.2.2": {
           "ipv4:192.0.2.89"   : 0,
           "ipv4:198.51.100.34": 1,
           "ipv6:2000::1:2345:6789:abcd" : 2,
                             }
             }
 }
</artwork>
      </figure>
    </section>

    <section title="Traffic Engineering Performance Cost Metrics">
      <t>This section introduces ALTO network performance metrics that may be
      aggregated from network metrics measured on links and specified in other
      documents. In particular, the bandwidth related metrics specified in
      this section are only available through link level measurements. For
      some of these metrics, the ALTO Server may further expose aggregated
      values while specifying the aggregation laws.</t>

      <section title="Cost Metric: Link Maximum Reservable Bandwidth">
        <t><list style="hanging">
            <t hangText="Metric name:"><vspace blankLines="1"/>Maximum
            Reservable Bandwidth<vspace blankLines="1"/></t>

            <t hangText="Metric Description:"><vspace blankLines="1"/>To
            specify spatial and temporal maximum reservable bandwidth over the
            specified source and destination. The value is corresponding to
            the maximum bandwidth that can be reserved (motivated from RFC
            3630 Sec. 2.5.7.). The spatial aggregation unit is specified in
            the query context (e.g., PID to PID, or endpoint to endpoint).
            <vspace blankLines="1"/></t>

            <t hangText="Method of Measurement or Calculation:"><vspace
            blankLines="1"/>Maximum Reserveable Bandwidth is the bandwidth
            measured between two directly connected IS-IS neighbors or OSPF
            neighbors, See section 3.5 of [RFC5305] for Measurement
            Method.<vspace blankLines="1"/></t>

            <t hangText="Units of Measurement:"><vspace blankLines="1"/>The
            unit of measurement is byte per seconds.<vspace
            blankLines="1"/></t>

            <t
            hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
            blankLines="1"/>See section 2.1, Data sources.<vspace
            blankLines="1"/></t>

            <t hangText="Measurement Timing:"><vspace blankLines="1"/>See
            section 3.5 of [RFC5305] and section 5 of [RFC7810] for
            Measurement Timing.<vspace blankLines="1"/></t>

            <t hangText="Use and Applications:"><vspace blankLines="1"/>See
            section 3 for use and application.<vspace blankLines="1"/></t>
          </list></t>

        <figure>
          <artwork>
Example 6: maxresbw value on source-destination endpoint pairs

POST/ endpointcost/lookup HTTP/1.1
Host: alto.example.com
Content-Length: TBA
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,application/alto-error+json

  {
    "cost-type" { "cost-mode":  "numerical",
    "cost-metric":  "maxresbw"},
    "endpoints":  {
      "srcs": [ "ipv4 : 192.0.2.2" ],
      "dsts": [
        "ipv4:192.0.2.89",
        "ipv4:198.51.100.34",
        "ipv6:2000::1:2345:6789:abcd"
      ]
    }
  }
HTTP/1.1 200 OK
Content-Length: TBA
Content-Type: application/alto-endpointcost+json
{
    "meta": {
           "cost-type": {
           "cost-mode": "numerical",
           "cost-metric": "maxresbw"
           }
    },
  " endpoint-cost-map": {
          "ipv4:192.0.2.2" {
          "ipv4:192.0.2.89" :    0,
          "ipv4:198.51.100.34": 2000,
          "ipv6:2000::1:2345:6789:abcd":  5000,
                            }
           }
}
</artwork>
        </figure>
      </section>

      <section title="Cost Metric: Link Residue Bandwidth">
        <t><list style="hanging">
            <t hangText="Metric name:"><vspace blankLines="1"/>Residue
            Bandwidth<vspace blankLines="1"/></t>

            <t hangText="Metric Description:"><vspace blankLines="1"/>To
            specify spatial and temporal residual bandwidth over the specified
            source and destination. The value is calculated by subtracting
            tunnel reservations from Maximum Bandwidth (motivated from
            [RFC7810], Sec.4.5.). The spatial aggregation unit is specified in
            the query context (e.g., PID to PID, or endpoint to endpoint).
            <vspace blankLines="1"/></t>

            <t hangText="Method of Measurement or Calculation:"><vspace
            blankLines="1"/>Residue Bandwidth is the Unidirectional Residue
            bandwidth measured between two directly connected IS-IS neighbors
            or OSPF neighbors, See section 4.5 of [RFC7810] for Measurement
            Method. <vspace blankLines="1"/></t>

            <t hangText="Units of Measurement:"><vspace blankLines="1"/>The
            unit of measurement is byte per seconds.<vspace
            blankLines="1"/></t>

            <t
            hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
            blankLines="1"/>See section 2.1, Data sources.<vspace
            blankLines="1"/></t>

            <t hangText="Measurement Timing:"><vspace blankLines="1"/>See
            section 5 of [RFC7810] for Measurement Timing.<vspace
            blankLines="1"/></t>

            <t hangText="Use and Applications:"><vspace blankLines="1"/>See
            section 3 for use and application.<vspace blankLines="1"/></t>
          </list></t>

        <figure>
          <artwork>
Example 8: residuebw value on source-destination endpoint pairs

POST/ endpointcost/lookup HTTP/1.1
Host: alto.example.com
Content-Length: TBA
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,application/alto-error+json

  {
   "cost-type": { "cost-mode":  "numerical",
   "cost-metric":  "residubw"},
   "endpoints":  {
     "srcs": [ "ipv4 : 192.0.2.2" ],
     "dsts": [
       "ipv4:192.0.2.89",
       "ipv4:198.51.100.34",
       "ipv6:2000::1:2345:6789:abcd"
     ]
   }
}

HTTP/1.1 200 OK
Content-Length: TBA
Content-Type: application/alto-endpointcost+json
{
   "meta": {
          "cost-type" {
          "cost-mode": "numerical",
          "cost-metric": "residubw"
        }
    },
"endpoint-cost-map" {
         "ipv4:192.0.2.2" {
         "ipv4:192.0.2.89" :    0,
         "ipv4:198.51.100.34": 2000,
         "ipv6:2000::1:2345:6789:abcd":  5000,
                       }
        }
}
</artwork>
        </figure>
      </section>

      <section title="Cost Metric: Link Available Bandwidth">
        <t><list style="hanging">
            <t hangText="Metric name:"><vspace blankLines="1"/>Available
            Bandwidth<vspace blankLines="1"/></t>

            <t hangText="Metric Description:"><vspace blankLines="1"/>To
            specify spatial and temporal availaible bandwidth over the
            specified source and destination. The value is calculated by
            subtracting the measured bandwidth used for the actual forwarding
            of best effort traffic from Residue Bandwidth (motivated from
            [RFC7810], Sec.4.6.). The spatial aggregation level is specified
            in the query context (e.g., PID to PID, or endpoint to endpoint).
            <vspace blankLines="1"/></t>

            <t hangText="Method of Measurement or Calculation:"><vspace
            blankLines="1"/>Available bandwidth is the Unidirectional
            Available bandwidth measured between two directly connected IS-IS
            neighbors or OSPF neighbors, See section 4.6 of [RFC7810] for
            Measurement Method. <vspace blankLines="1"/></t>

            <t hangText="Units of Measurement:"><vspace blankLines="1"/>The
            unit of measurement is byte per seconds.<vspace
            blankLines="1"/></t>

            <t
            hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
            blankLines="1"/>See section 2.1, Data sources.<vspace
            blankLines="1"/></t>

            <t hangText="Measurement Timing:"><vspace blankLines="1"/>See
            section 5 of [RFC7810] for Measurement Timing.<vspace
            blankLines="1"/></t>

            <t hangText="Use and Applications:"><vspace blankLines="1"/>See
            section 3 for use and application. Besides, knowledge about
            available bandwidth is essential for applications to distribute or
            schedule their transmissions. The example below illustrates how
            this metric is provided in the form of an ALTO calendar, as
            specified in [XXXX] to help deciding "where" and "when" to
            transmit. <vspace blankLines="1"/></t>
          </list></t>

        <figure>
          <artwork>
Example 9: availbw value on source-destination endpoint pairs

This example assumes that the ALTO Server provides the values for 
metric "availbw" in the form of an ALTO calendar and declares it 
in its IRD.

POST /endpointcost/lookup HTTP/1.1
Host: alto.example.com
Content-Length: TBA
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,application/alto-error+json

  {
   "cost-type": { "cost-mode":  "numerical",
                  "cost-metric":  "availbw"},
   "calendared" : [true],
   "endpoints":  {
      "srcs": [ "ipv4 : 192.0.2.2" ],
      "dsts": [
        "ipv4:192.0.2.89",
        "ipv4:198.51.100.34",
        "ipv6:2000::1:2345:6789:abcd"
      ]
   }
     }

HTTP/1.1 200 OK
Content-Length: TBA
Content-Type: application/alto-endpointcost+json
{
   "meta": {
         "cost-type": {
             "cost-mode": "numerical", "cost-metric": "availbw"
         }
         "calendar-response-attributes" : [ 
            "calendar-start-time" : Tue, 1 Mar 2017 13:00:00 GMT, 
            "time-interval-size" : "1 hour",                  
            "numb-intervals" : 8
       ]
   },

   "endpoint-cost-map": {
           "ipv4:192.0.2.2" {
           "ipv4:192.0.2.89" : [6,5,7,8,4,10,7,6],
           "ipv4:198.51.100.34" : [7,4,6,8,5,9,6,7],
           "ipv6:2000::1:2345:6789:abcd" : [7,6,8,5,7,9,6,8],                         
           }
         }
}
</artwork>
        </figure>
      </section>

      <section title="Cost Metric: Link Utilized Bandwidth">
        <t><list style="hanging">
            <t hangText="Metric name:"><vspace blankLines="1"/>Utilized
            Bandwidth<vspace blankLines="1"/></t>

            <t hangText="Metric Description:"><vspace blankLines="1"/>To
            specify spatial and temporal utilized bandwidth over the specified
            source and destination. The value is corresponding to the actual
            measured bandwidth used for all traffic (motivated from [RFC7810],
            Sec.4.7.). The spatial aggregation level is specified in the query
            context (e.g., PID to PID, or endpoint to endpoint). <vspace
            blankLines="1"/></t>

            <t hangText="Method of Measurement or Calculation:"><vspace
            blankLines="1"/>Link Utilizated bandwidth is Unidirectional
            utilization bandwidth measured between two directly connected
            IS-IS neighbors or OSPF neighbors, See section 4.7 of [RFC7810]
            for Measurement Method. <vspace blankLines="1"/></t>

            <t hangText="Units of Measurement:"><vspace blankLines="1"/>The
            unit of measurement is byte per seconds.<vspace
            blankLines="1"/></t>

            <t
            hangText="Measurement Point(s) with Potential Measurement Domain:"><vspace
            blankLines="1"/>See section 2.1, Data sources.<vspace
            blankLines="1"/></t>

            <t hangText="Measurement Timing:"><vspace blankLines="1"/>Link
            Utilized bandwidth is Unidirectional utilization bandwidth
            measured between two directly connected IS-IS neighbors or OSPF
            neighbors, See section 5 of [RFC7810] for Measurement
            Timing.<vspace blankLines="1"/></t>

            <t hangText="Use and Applications:"><vspace blankLines="1"/>See
            section 3 for use and application.<vspace blankLines="1"/></t>
          </list></t>

        <figure>
          <artwork>
Example 10: utilbw value on source-destination endpoint pairs

POST /endpointcost/lookup HTTP/1.1
Host: alto.example.com
Content-Length: TBA
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,application/alto-error+json

 {
  "cost-type": {"cost-mode" : "numerical",
  "cost-metric" :  "utilbw"},
  "endpoints":  {
       "srcs" : [ "ipv4 : 192.0.2.2" ],
       "dsts" : [
         "ipv4:192.0.2.89",
         "ipv4:198.51.100.34",
         "ipv6:2000::1:2345:6789:abcd"
      ]
    }
 }

HTTP/1.1 200 OK
Content-Length: TBA
Content-Type: application/alto-endpointcost+json
 {
  "meta": {
         "cost type": {
         "cost-mode": "numerical",
         "cost-metric": "utilbw"
        }
  },
"endpoint-cost-map": {
           "ipv4:192.0.2.2" {
           "ipv4:192.0.2.89" :   0,
           "ipv4:198.51.100.34" : 2000,
           "ipv6:2000::1:2345:6789:abcd" :  5000,
                          }
         }
}
</artwork>
        </figure>
      </section>
    </section>

    <section title="Security Considerations">
      <t>The properties defined in this document present no security
      considerations beyond those in Section 15 of the base ALTO specification
      [ALTO].</t>

      <t>However concerns addressed in Sections "15.1 Authenticity and
      Integrity of ALTO Information", "15.2 Potential Undesirable Guidance
      from Authenticated ALTO Information" and "15.3 Confidentiality of ALTO
      Information" remain of utmost importance. Indeed, TE performance is a
      highly sensitive ISP information, therefore, sharing TE metric values in
      numerical mode requires full mutual confidence between the entities
      managing the ALTO Server and Client. Numerical TE performance
      information will most likely be distributed by ALTO Servers to Clients
      under strict and formal mutual trust agreements. On the other hand, ALTO
      Clients must be cognizant on the risks attached to such information that
      they would have acquired outside formal conditions of mutual trust.</t>
    </section>

    <section title="IANA Considerations">
      <t>IANA has created and now maintains the "ALTO Cost Metric Registry",
      listed in Section 14.2, Table 3 of [RFC7285]. This registry is located
      at
      &lt;http://www.iana.org/assignments/alto-protocol/alto-protocol.xhtml#cost-metrics&gt;.
      This document requests to add the following entries to &ldquo;ALTO Cost
      Meric Registry&rdquo;.</t>

      <figure>
        <artwork>
+----------+--------------+---------------------------------------------+
|Namespace | Property     | Reference                                   |
+----------+--------------+---------------------------------------------+
|          |  owdelay     | [thisdraft] Section 3,[RFC2679] Section 3.6  |
|          |   rtt        | [thisdraft] Section 4,[RFC2681],Section 2.6  |
|          |   pdv        | [thisdraft] Section 5,[RFC3393],Section 2.6  |
|          | hopcount     | [thisdraft] Section 6,[RFC7285]              |
|          | pktloss      | [thisdraft] Section 7,[RFC7680],Section 2.6  |
|          | maxresbw     | [thisdraft] Section 8.1,[RFC5305],Section 3.5|
|          | residbw      | [thisdraft] Section 8.2,[RFC7810],Section 4.5|
|          | availbw      | [thisdraft] Section 8.3,[RFC7810],Section 4.6|
|          | utilbw       | [thisdraft] Section 8.4,[RFC7810,Section4.7] |
+----------+--------------+---------------------------------------------+
</artwork>
      </figure>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <reference anchor="RFC2119">
        <front>
          <title abbrev="RFC Key Words">Key words for use in RFCs to Indicate
          Requirement Levels</title>

          <author fullname="Scott Bradner" initials="S." surname="Bradner">
            <organization>Harvard University</organization>

            <address>
              <postal>
                <street>1350 Mass. Ave.</street>

                <street>Cambridge</street>

                <street>MA 02138</street>
              </postal>

              <phone>+1 617 495 3864</phone>

              <email>sob@harvard.edu</email>
            </address>
          </author>

          <date month="March" year="1997"/>

          <area>General</area>

          <keyword>keyword</keyword>

          <abstract>
            <t>In many standards track documents several words are used to
            signify the requirements in the specification. These words are
            often capitalized. This document defines these words as they
            should be interpreted in IETF documents. Authors who follow these
            guidelines should incorporate this phrase near the beginning of
            their document: <list>
                <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
                "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
                "OPTIONAL" in this document are to be interpreted as described
                in RFC 2119.</t>
              </list></t>

            <t>Note that the force of these words is modified by the
            requirement level of the document in which they are used.</t>
          </abstract>
        </front>
      </reference>

      <?rfc include="reference.RFC.5234.xml"?>

      <?rfc include="reference.RFC.4627.xml"?>

      <?rfc include="reference.RFC.7285.xml"?>

      <?rfc include="reference.RFC.7471.xml"?>

      <?rfc include="reference.RFC.7752.xml"?>

      <?rfc include="reference.RFC.7810.xml"?>

      <?rfc include="reference.RFC.7680.xml"?>

      <?rfc include="reference.RFC.2679.xml"?>

      <?rfc include="reference.RFC.2681.xml"?>

      <?rfc include="reference.RFC.3393.xml"?>

      <?rfc include="reference.RFC.5305.xml"?>

      <?rfc include="reference.I-D.ietf-idr-te-pm-bgp.xml"?>

      <?rfc include="reference.I-D.ietf-ippm-initial-registry.xml"?>
    </references>

    <references title="Informative References">
      <reference anchor="RFC6390">
        <front>
          <title>Framework for Performance Metric Development</title>

          <author fullname="Alan Clark" initials="A." surname="Clark">
            <organization/>
          </author>

          <author fullname="Benoit Claise " initials="B." surname="Claise">
            <organization/>
          </author>

          <date month="July" year="2011"/>
        </front>

        <seriesInfo name="RFC" value="6390"/>
      </reference>

      <?rfc include="reference.I-D.ietf-alto-deployments.xml"?>
    </references>

    <section title="Open Issue List">
      <t>We need to consider to add Cellular endpoint format support in the
      example, the Cellular endpoint format is specified in
      draft-randriamasy-alto-cellular-adresses.</t>
    </section>
  </back>
</rfc>
