<?xml version="1.0" encoding="UTF-8"?>
<!-- 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-wu-alto-json-te-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="JSON for ALTO TE">ALTO Extensions for Traffic Engineering
    (TE) performance metrics in JSON format</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>sunseawq@huawei.com</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>

    <date year="2013" />

    <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. However the base protocol defines only a single
      cost metric, i.e., the generic "routingcost" metric (Sec. 14.2 of ALTO
      base specification [ALTO]). In practice, applications may request
      network information on other cost (including performance) metrics.</t>

      <t>In this document, we define five new base metrics which are delay,
      jitter, pktloss (packet loss), bandwidth and hopcount. These base
      metrics are further extended with these nine new metrics linkdelay,
      linkjitter, linkloss, maxbw (Maximum Bandwidth), maxreservbw (Maximum
      Reserved Bandwdith), unreservbw (Unreserved Bandwidth), residuebw
      (Residual Bandwidth), availbw (Available Bandwidth), and utilbw
      (Utilized Bandwidth). Also a new parameter anomalousstate is added.
      These fourteen cost metrics are derived from OSPF-TE and ISIS-TE and can
      be either used as constraint attribute associated with 'routingcost'
      cost metric attribute or used as returned Cost metrics in the response,
      or both and hence provide a relatively comprehensive set of cost metrics
      for ALTO.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>The ALTO protocol [ALTO] uses a REST-ful design , and encodes its
      requests and responses using JSON [RFC4627] . In ALTO architecture
      [ALTO], the ALTO server allows alto information to be gathered from
      multiple systems(e.g., routing protocol). [OSPF-TE], [ISIS-TE], [BGP-LS]
      and [BGP-PM]describes extensions to routing protocol, that can be used
      to distribute network performance information (such as link delay, delay
      variation, packet loss, residual bandwidth, and available bandwidth).
      The mechanism defined in [OSPF-TE], [ISIS-TE], [BGP-LS], and [BGP-PM]can
      be used by an ALTO Server to retrieve the necessary performance
      information supplementing the prefix and network topology data gathered
      from other sources (such as Path Computation Element (PCE)) in the
      underlying network.</t>

      <t>Cost metric is a basic concept in ALTO. It is used in both the Cost
      Map Service and the Endpoint Cost Service. However the base protocol
      defines only a single cost metric, i.e., the generic "routingcost"
      metric (Sec. 14.2 of [ALTO]). In practice, applications may request
      network information on other cost (such as performance) metrics. In this
      document, we define five new base metrics which are delay, jitter,
      pktloss (packet loss), bandwidth and hopcount. These base metrics are
      further extended with these nine new metrics linkdelay, linkjitter,
      linkloss, maxbw (Maximum Bandwidth), maxreservbw (Maximum Reserved
      Bandwdith), unreservbw (Unreserved Bandwidth), residuebw (Residual
      Bandwidth), availbw (Available Bandwidth), and utilbw (Utilized
      Bandwidth). Also a new parameter anomalousstate is added. These fourteen
      cost metrics are derived from [OSPF-TE] and [ISIS-TE] and can be either
      used as constraint attribute associated with 'routingcost' cost metric
      attribute or used as returned Cost metrics in the response, or both and
      hence provide a relatively comprehensive set of cost metrics for
      ALTO.</t>

      <t>The introduction of a set of cost metrics allows us to extend the
      flexibility of ALTO services. In particular, both the Cost Map Service
      and the Endpoint Cost Service allow filtering. However, these two
      services as defined in the base protocol are limited in that the output
      information metric and the filtering (constraint) metric must be the
      same. However, applications may request a filtered "routingcost" Cost
      Map only for locations where the delay is below a threshold. This is not
      feasible in the ALTO base protocol. We discuss the overhead of
      implementing the aforementioned use case using the current base
      protocol, and propose a simple but effective extension to the
      "constraint" syntax to ALTO.</t>
    </section>

    <section title="Conventions used in this document">
      <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 <xref
      target="RFC2119">RFC2119</xref>.</t>

      <t>Syntax specifications shown here use the augmented Backus-Naur Form
      (ABNF) as described in [RFC5234], and are specified as in the base JSON
      specification [RFC4627].</t>
    </section>

    <section title="Cost Metric Extensions: Cost Metrics">
      <section title="Cost Metric: delay">
        <figure>
          <artwork>
Cost Metric name:  delay

Metric Description:  To specify the average delay over a configurable
          interval for each source/destination pair between two 
          endpoints (network locations) in the network. It could be
          either end to end delay or the delay associated with the 
          link (linkdelay). The unit is microseconds.  

Cost Metric Value type:  
           A single 'JSONNumber' type value containing an integer 
           component that may be prefixed with an optional minus
           sign, which may be followed by a fraction part and/or 
           an exponent part.

Purpose: This is intended to be a new cost metric. It could be
used as a cost metric constraint attribute used together with cost
metric attribute 'routingcost' or on its own or as a returned cost
metric in the response. 

Cost mode:  A Cost Mode is encoded as a US-ASCII string. 
The string MUST either have the value 'numerical' or 'ordinal'.

Measurement timing: Gather and update at the configurable interval
if it is link attribute. See [OSPF-TE] for configurable
interval. The configurable interval for end to end delay could
be same as link.

Measurement points with Potential Measurement Domain:
The measurement point could be at any endpoint between
source and destination in the network.

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

{
  "cost-type": {"cost-mode" : "numerical",
                "cost-metric" : "delay"},
  "endpoints" : {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [
      "ipv4:192.0.2.89",
      "ipv4:198.51.100.34",
      "ipv4:203.0.113.45"
    ]
  }
}

HTTP/1.1 200 OK
Content-Length: 231
Content-Type: application/alto-endpointcost+json

{
  "meta" : {},
  "data" : {
    "cost-type": {"cost-mode" : "numerical",
                  "cost-metric" : "delay"},
    "map" : {
      "ipv4:192.0.2.2": {
        "ipv4:192.0.2.89"    : 10,
        "ipv4:198.51.100.34" : 20,
        "ipv4:203.0.113.45"  : 30,
      }
    }
  }
}

//Note that these are end to end delay values in microseconds.

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

{
  "cost-type": {"cost-mode" : "numerical",
                "cost-metric" : "routingcost"},
                "constraints" : {"delay ls 15"},
  "endpoints" : {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [
      "ipv4:192.0.2.89",
      "ipv4:198.51.100.34",
      "ipv4:203.0.113.45"
    ]
  }
}
HTTP/1.1 200 OK
Content-Length: 231
Content-Type: application/alto-endpointcost+json

  "data": {
          "cost type": {
           "cost-mode": "numerical",
           "cost-metric":"routingcost"},
           "constraints" : {"delay ls 15"},
  "map": {
          "ipv4:192.0.2.2": {
          "ipv4:192.0.2.89": 0 ["delay eq 0"],
          "ipv4:198.51.100.34": 15 ["delay eq 3"],
          "ipv4:203.0.113.45": 1 ["delay eq 12"],
                }
            }
            
//Note that these are end to end routing cost and delay .
</artwork>
        </figure>
      </section>

      <section title="Cost Metric: jitter">
        <figure>
          <artwork>
Cost Metric name:  jitter

Metric Description:  To specify the average delay variation over 
          a configurable interval for each source/destination pair
          between two endpoints(network locations)in the network.
          It could be either end to end jitter or the jitter 
          associated with a link (linkjitter). The unit is 
          microseconds.

Cost Metric Value type: 
          A single 'JSONumber' type value containing an integer 
          component that may be prefixed with an optional minus
          sign, which may be followed by a fraction part and/or 
          an exponent part.

Purpose: This is intended to be a constraint attribute value
It could be used as a cost metric constraint attribute used 
together with cost metric attribute 'routingcost' or on its
own or as a returned cost metric in the response. 

Cost mode:  A Cost Mode is encoded as a US-ASCII string.  
The string MUST either have the value 'numerical' or 'ordinal'.

Measurement timing: Gather and update at the configurable interval
if it is link attribute. See [OSPF-TE] for configurable
interval. The configurable interval for end to end jitter could
be same as link.

Measurement points with Potential Measurement Domain:
The measurement point could be at any endpoint between
source and destination in the network.

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

{
  "cost-type": {"cost-mode" : "numerical",
   "cost-metric" : "routingcost"},
  "constraints" : {"delay ls 15","jitter ls 8"},
  "endpoints" : {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [
      "ipv4:192.0.2.89",
      "ipv4:198.51.100.34",
      "ipv4:203.0.113.45"
    ]
  }
}
HTTP/1.1 200 OK
 Content-Length: 231
 Content-Type: application/alto-endpointcost+json
  "data": {
           "cost type": {
           "cost-mode": "numerical",
           "cost-metric":"routingcost"},
           "constraints" : {"delay ls 15","jitter ls 8"},
  "map": {
           "ipv4:192.0.2.2": {
           "ipv4:192.0.2.89": 0 ["delay eq 0", "jitter eq 0"],
           "ipv4:198.51.100.34": 5 ["delay eq 3", "jitter eq 1"],
           "ipv4:203.0.113.45":2 ["delay eq 12", "jitter eq 5"],
                                 }
</artwork>
        </figure>
      </section>

      <section title="Cost Metric: Packet Loss">
        <figure>
          <artwork>
Cost Metric name:  pktloss

Metric Description:  To specify a percentage of the total traffic
          sent over a configurable interval for each 
          source/destination pair between two endpoints(network 
          locations) in the network. It could be either end to 
          end packet loss or the packet loss associated with a link
          (linkloss).

Cost Metric Value type: 
          A single number value containing an integer component that
          may be prefixed with an optional minus sign, which may
          be followed by a fraction part and/or an exponent part.

Purpose: This is intended to be a constraint attribute value
It could be used as a cost metric constraint attribute used 
together with cost metric attribute 'routingcost' or on its
own or as a returned cost metric in the response. 

Cost mode:  A Cost Mode is encoded as a US-ASCII string. 
The string MUST either have the value 'numerical' or 'ordinal'.

Measurement timing: Gather and update at the configurable interval
if it is link attribute. See [OSPF-TE] for configurable
interval. The configurable interval for end to end packet loss
could be same as link.

Measurement points with Potential Measurement Domain:
The measurement point could be at any endpoint between
source and destination in the network.

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

  {
    "cost-type": {"cost-mode" : "numerical",
     "cost-metric" : "routingcost"},
    "constraints" : {"pktloss le 0.3"},
    "endpoints" : {
      "srcs": [ "ipv4:192.0.2.2" ],
      "dsts": [
        "ipv4:192.0.2.89",
        "ipv4:198.51.100.34",
        "ipv4:203.0.113.45"
      ]
    }
  }
HTTP/1.1 200 OK
Content-Length: 231
Content-Type: application/alto-endpointcost+json

    "data": {
               "cost type": {
             "cost-mode": "numerical",
             "cost-metric":"routingcost"},
             "constraints" : {"pktloss le 0.3"},
   "map": {
           "ipv4:192.0.2.2": {
           "ipv4:192.0.2.89": 0 ["pktloss eq 0.0"],
           "ipv4:198.51.100.34": 1 ["pktloss eq 0.0001"],
           "ipv4:203.0.113.45": 0 ["pktloss eq 0.0"],
                             }
             }
[Editor Note: We have to be clear when the new metrics are part of 
response and when it is not?]</artwork>
        </figure>
      </section>

      <section title="Cost Metric: Bandwidth">
        <figure>
          <artwork>
Cost Metric name:  bandwidth

Metric Description:  To specify Bandwidth over a configurable
          interval for each source/destination pair between
          two endpoints (network locations)in the network. 
          It could be either aggregated bandwidth for end to end
          path or the bandwidth associated with a link. The units
          are bytes per second. 

Cost Metric Value type:  
          A single 'JSONNumber' type value containing an integer 
          component that may be prefixed with an optional minus 
          sign, which may be followed by a fraction part and/or
          an exponent part.

Purpose: This is intended to be a constraint attribute value
It could be used as a cost metric constraint attribute used 
together with cost metric attribute 'routingcost' or on its
own or as a returned cost metric in the response. 

Cost mode:  A Cost Mode is encoded as a US-ASCII string.  
The string MUST either have the value 'numerical' or 'ordinal'.

This is just a definition of the costtype 'bandwidth'. The use of
this cost is always in conjunction with what it represents, which 
could be Max Bandwidth (maxbw), Residual Bandwidth (residuebw) etc. 

Examples: (based on Residual Bandwidth (residuebw))

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

  {
    "cost-type": {"cost-mode" : "numerical",
     "cost-metric" : "routingcost"},
    "constraints" : {"residuebw gt 1500"},
    "endpoints" : {
      "srcs": [ "ipv4:192.0.2.2" ],
      "dsts": [
        "ipv4:192.0.2.89",
        "ipv4:198.51.100.34",
        "ipv4:203.0.113.45"
      ]
    }
  }
HTTP/1.1 200 OK
Content-Length: 231
Content-Type: application/alto-endpointcost+json

    "data": {
               "cost type": {
             "cost-mode": "numerical",
             "cost-metric":"routingcost"},
             "constraints" : {"residuebw gt 1500"},
    "map": {
            "ipv4:192.0.2.2": {
            "ipv4:192.0.2.89": 0 ["residuebw eq 0"],
            "ipv4:198.51.100.34": 5 ["residuebw eq 2000"],
            "ipv4:203.0.113.45":2 ["residuebw eq 5000"],
                              }
             }
</artwork>
        </figure>
      </section>

      <section title="Cost Metric: Hopcount">
        <figure>
          <artwork>
Cost Metric name:  hopcount

Metric Description:  To specify the number of hops in the path 
          between the source endpoint and the destination 
         endpoint. 

Editor Note: Need to specify which layer (IP perhaps), details TBD for
multiple-layer aspect.

Cost Metric Value type:
        A single 'JSONNumber' type value containing an
        integer component that may be prefixed with an 
        optional minus sign.

Purpose: This is intended to be a constraint attribute value
It could be used as a cost metric constraint attribute used 
together with cost metric attribute 'routingcost' or on its
own or as a returned cost metric in the response. 

Cost mode:  A Cost Mode is encoded as a US-ASCII string.
string MUST either have the value 'numerical' or 'ordinal'.

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

      <section title="Delay Cost Metric Extension: linkdelay">
        <t>A linkdelay is gathered using [OSPF-TE], [ISIS-TE] or [BGP-PM]. It
        is extended from Delay Cost metric and defined as:<figure>
            <artwork>
Object {
LinkName  link-name;
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
delay dl;
}linkdelay;
</artwork>
          </figure></t>
      </section>

      <section title="Jitter Cost Metric Extension: linkjitter">
        <t>A linkjitter is gathered using [OSPF-TE], [ISIS-TE] or [BGP-PM]. It
        is extended from Jitter Cost metric and defined as:<figure>
            <artwork>
Object {
LinkName  link-name;
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
jitter jt;
}linkjitter;
</artwork>
          </figure></t>
      </section>

      <section title="Packet Loss Cost Metric Extension: linkloss">
        <t>A linkloss is gathered using [OSPF-TE], [ISIS-TE] or [BGP-PM]. It
        is extended from Packet loss cost metric and defined as:<figure>
            <artwork>
Object {
LinkName  link-name;
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
pktloss l;
}linkloss;
</artwork>
          </figure></t>
      </section>

      <section title="Bandwidth Cost Metric Extension">
        <section title="Maximum Bandwidth: maxbw">
          <t>A maxbw is gathered using [RFC3630], [RFC3784] or [BGP-LS]. It
          could be either maximum bandwidth for end to end path or the
          bandwidth associated with a link. It is extended from Bandwidth Cost
          metric and defined as:<figure>
              <artwork>
Object {
BWType     max;
[LinkName  link-name;]
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
Bandwidth bw;
}maxbw;
</artwork>
            </figure></t>
        </section>

        <section title="Maximum Reserved Bandwdith: maxreservbw">
          <t>A maxreservbw is gathered using [RFC3630], [RFC3784] or [BGP-LS].
          It could be either maximum reserved bandwidth for end to end path or
          the bandwidth associated with a link. It is extended from Bandwidth
          Cost metric and defined as:<figure>
              <artwork>
Object {
BWType     maxreserved;
[LinkName  link-name;]
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
Bandwidth bw;
}maxreservbw;
</artwork>
            </figure></t>
        </section>

        <section title="Unreserved Bandwidth: unreservbw">
          <t>A unreservbw is gathered using [RFC3630], [RFC3784] or [BGP-LS].
          It could be either unreserved bandwidth for end to end path or the
          bandwidth associated with a link. It is extended from Bandwidth Cost
          metric and defined as:<figure>
              <artwork>
Object {
BWType unreserved;
[LinkName link-name;]
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
Bandwidth bw&lt;1,8&gt;
}unreservbw;

//This bandwidth is per priority [TBD]. 
</artwork>
            </figure></t>
        </section>

        <section title="Residual Bandwidth: residuebw">
          <t>A residuebw is gathered using [OSPF-TE], [ISIS-TE] or [BGP-PM].
          It could be either residual bandwidth for end to end path or the
          bandwidth associated with a link. It is extended from Bandwidth Cost
          metric and defined as:<figure>
              <artwork>
Object {
BWType Residue;
[LinkName link-name;]
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
Bandwidth bw;
}rediduebw;
</artwork>
            </figure></t>
        </section>

        <section title="Available Bandwidth: availbw">
          <t>A availbw is gathered using [OSPF-TE], [ISIS-TE] or [BGP-PM]. It
          could be either available bandwidth for end to end path or the
          bandwidth associated with a link. It is extended from Bandwidth Cost
          metric and defined as:<figure>
              <artwork>
Object {
BWType Available;
[LinkName link-name;]
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
Bandwidth bw;
}availbw;
</artwork>
            </figure></t>
        </section>

        <section title="Utilized Bandwidth: utilbw">
          <t>A utilbw is gathered using [OSPF-TE], [ISIS-TE] or [BGP-PM]. It
          could be either utilized bandwidth for end to end path or the
          bandwidth associated with a link. It is extended from Bandwidth Cost
          metric and defined as:<figure>
              <artwork>
Object {
BWType Utilized;
[LinkName link-name;]
[JSONBool linkstate;] //TRUE = not steady; FALSE = steady;
Bandwidth bw;
}utilbw;
</artwork>
            </figure></t>
        </section>
      </section>
    </section>

    <section title="Cost Metric Extensions: Parameters">
      <t>The following sections define Parameters used within cost metrics
      specified in the section 3.</t>

      <section title="Parameter: anomalousstate">
        <figure>
          <artwork>

Parameter name:  anomalousstate

Purpose:  Optinally used in a prefixed cost metric to
          indicate whether it is steady state
          of the performance metric. 

Description:  This state can be used to notify to the ALTO
      client if the performance metric associated is in a
      steady state. The ALTO client may use this to perform
      some action. The anomalousstate
      is set when the measured value of this parameter exceeds
      its configured maximum threshold.  The anomalousstate is
      cleared when the measured value falls below its
      configured threshold. Anomalousstate should be used
      together with Cost metric we defined in the
      section 3. Cost Metrics prefixed with 'a:' are
      reserved for cost metric that does not have steady state
      network performance. Cost Metrics without prefix 'a:'
      indicate the cost metric has steady state network
      performance.



Examples:

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

  {
    "cost-type": {"cost-mode" : "numerical",
     "cost-metric" : "routingcost"},
    "constraints" : {"delay ls 15"},
    "endpoints" : {
      "srcs": [ "ipv4:192.0.2.2" ],
      "dsts": [
        "ipv4:192.0.2.89",
        "ipv4:198.51.100.34",
        "ipv4:203.0.113.45"
      ]
    }
  }
HTTP/1.1 200 OK
Content-Length: 231
Content-Type: application/alto-endpointcost+json

     "data": {
               "cost type":{
               "cost-mode": "numerical",
               "cost-metric":"routingcost"}
               "constraints": {"delay ls 15"},
     "map": {
               "ipv4:192.0.2.2": {
               "ipv4:192.0.2.89": 0 ["a:delay eq 10"],
                                    }
                  }
</artwork>
        </figure>
      </section>
    </section>

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

    <section title="IANA Considerations">
      <t>IANA has added the following entries to the ALTO cost map Properties
      registry, defined in Section 3 of [RFCXXX].</t>

      <figure>
        <artwork>
   +-----------+--------------+------------------------+
   | Namespace | Property     | Reference              |
   +-----------+--------------+------------------------+
   |           | delay        | [RFCxxxx], Section 3.1 |
   |           | jitter       | [RFCxxxx], Section 3.2 |
   |           | pktloss      | [RFCxxxx], Section 3.3 |
   |           | linkdelay    | [RFCxxxx], Section 3.6 |
   |           | linkjitter   | [RFCxxxx], Section 3.7 |
   |           | linkloss     | [RFCxxxx], Section 3.8 |
   |           |  bandwidth   | [RFCxxxx], Section 3.4 |
   |           |  hopcount    | [RFCxxxx], Section 3.5 |
   |           |   maxbw      |[RFCxxxx], Section 3.9.1|
   |           |  maxresbw    |[RFCxxxx], Section 3.9.2|
   |           |  unresdbw    |[RFCxxxx], Section 3.9.3|
   |           |  residbw     |[RFCxxxx], Section 3.9.4|
   |           |  availbw     |[RFCxxxx], Section 3.9.5|
   |           |   utilbw     |[RFCxxxx], Section 3.9.6|
   +-----------+--------------+------------------------+

</artwork>
      </figure>

      <t>IANA has added the following entries to the " ALTO cost map
      Parameters" registry, defined in [RFCxxxx] Section 4.1.</t>

      <figure>
        <artwork>
+-------+------------------------+------------------------+
| Name- |                        |                        |
| space | Parameter              | Reference              |
+-------+------------------------+------------------------+
|       | anomalousstate         | [RFCxxxx], Section 4.1 |
+-------+------------------------+------------------------+
</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>

      <reference anchor="RFC5234">
        <front>
          <title>Augmented BNF for Syntax Specifications: ABNF</title>

          <author fullname="D.Crocker" initials="D." surname="Crocker">
            <organization></organization>
          </author>

          <date month="January" year="2008" />
        </front>

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

      <reference anchor="RFC4627">
        <front>
          <title>The application/json Media Type for JavaScript Object
          Notation (JSON)</title>

          <author fullname="D. Crockford" initials="D." surname="Crockford">
            <organization></organization>
          </author>

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

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

      <reference anchor="ALTO">
        <front>
          <title>ALTO Protocol</title>

          <author fullname="R. Alimi" initials="R." surname="Alimi">
            <organization></organization>
          </author>

          <date month="May" year="2013" />
        </front>

        <seriesInfo name="ID" value="draft-ietf-alto-protocol-16" />
      </reference>

      <reference anchor="OSPF-TE">
        <front>
          <title>OSPF Traffic Engineering (TE) Metric Extensions</title>

          <author fullname="S. Giacalone" initials="S." surname="Giacalone">
            <organization></organization>
          </author>

          <date month="June" year="2013" />
        </front>

        <seriesInfo name="ID" value="draft-ietf-ospf-te-metric-extensions-04" />
      </reference>

      <reference anchor="ISIS-TE">
        <front>
          <title>ISIS Traffic Engineering (TE) Metric Extensions</title>

          <author fullname="S. Giacalone" initials="S." surname="Giacalone">
            <organization></organization>
          </author>

          <date month="October" year="2013" />
        </front>

        <seriesInfo name="ID" value="draft-ietf-isis-te-metric-extensions-01" />
      </reference>

      <reference anchor="BGP-LS">
        <front>
          <title>North-Bound Distribution of Link-State and TE Information
          using BGP</title>

          <author fullname="H.Gredler" initials="H." surname="Gredler">
            <organization></organization>
          </author>

          <date month="May" year="2013" />
        </front>

        <seriesInfo name="ID" value="draft-ietf-idr-ls-distribution-03" />
      </reference>

      <reference anchor="BGP-PM">
        <front>
          <title>BGP attribute for North-Bound Distribution of Traffic
          Engineering (TE) performance Metrics</title>

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

          <date month="October" year="2013" />
        </front>

        <seriesInfo name="ID" value="draft-wu-idr-te-pm-bgp-02" />
      </reference>
    </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></organization>
          </author>

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

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

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

    <section title="Filtering constraint Extensions">
      <t>Section 10.2.2.3 of "ALTO: Application Layer Traffic Optimization
      Protocol" [I.D-ietf-alto-protocol] states: <figure>
          <artwork>"
object {
     CostType   cost-type;
     [JSONString constraints&lt;0..*&gt;;]
     [PIDFilter  pids;]
   } ReqFilteredCostMap;

object {
     PIDName srcs&lt;0..*&gt;;
     PIDName dsts&lt;0..*&gt;;
   } PIDFilter;

with members:

cost-type  The CostType (Section 9.7) for the returned costs.  The
cost-metric and cost-mode fields MUST match one of the supported
Cost Types indicated in this resource's capabilities
(Section 10.2.2.4).  The ALTO Client SHOULD omit the description
field, and if present, the ALTO Server MUST ignore the description
field.

constraints  Defines a list of additional constraints on which
elements of the Cost Map are returned.  This parameter MUST NOT be
specified if this resource's capabilities ( Section 10.2.2.4)
indicate that constraint support is not available.  A constraint
contains two entities separated by whitespace: (1) an operator,
 'gt' for greater than, 'lt' for less than, 'ge' for greater than
or equal to, 'le' for less than or equal to, or 'eq' for equal to;
(2) a target cost value.  The cost value is a number that MUST be
defined in the same units as the Cost Metric indicated by the
cost-metric parameter.  ALTO Servers SHOULD use at least IEEE 754
double-precision floating point [IEEE.754.2008] to store the cost
value, and SHOULD perform internal computations using double-
precision floating-point arithmetic.  If multiple 'constraint'
parameters are specified, they are interpreted as being related to
each other with a logical AND.
”
</artwork>
        </figure></t>

      <t>In the JSON Object of type ReqFilteredCostMap, the constraint
      attribute is expressed as:<figure>
          <artwork>
“
[gt | lt | ge | le | eq ] &lt;value&gt;
”
</artwork>
        </figure></t>

      <t>In this specification, the constraint attribute is changed to<figure>
          <artwork>
   “
&lt;cost-type2&gt;  [gt | lt | ge | le | eq ] &lt;value&gt;
   ”
</artwork>
        </figure></t>

      <t>Accordingly, the constraints definition is changed to:<figure>
          <artwork>
“
constraints  Defines a list of additional constraints on which
elements of the Cost Map are returned.  This parameter MUST NOT be
specified if this resource's capabilities ( Section 10.2.2.4)
indicate that constraint support is not available.  A constraint
contains three entities separated by whitespace: (1)an cost type
is by default cost-type in the JSON Object of type ReqFilteredCostMap.
In addition, it could be another cost-type used for the returned cost 
(2) an operator, 'gt' for greater than, 'lt' for less than, 'ge' for
greater than or equal to, 'le' for less than or equal to, or 'eq' for 
equal to; (3) a target cost value.  The cost value is a number that 
MUST be defined in the same units as the Cost Metric indicated by the
cost-metric parameter.  ALTO Servers SHOULD use at least IEEE 754
double-precision floating point [IEEE.754.2008] to store the cost
value, and SHOULD perform internal computations using double-
precision floating-point arithmetic.  If multiple 'constraint'
parameters are specified, they are interpreted as being related to
each other with a logical AND.
”
</artwork>
        </figure></t>

      <t>Editor-Notes: Filtering constraint extension should move to another
      document defining multi-metrics filtering in the future.</t>
    </section>

    <section title="Contributor Addresses">
      <figure>
        <artwork>
    Y. Richard Yang
    Yale University
    51 Prospect St
    New Haven  CT
    USA

    Email: yry@cs.yale.edu

   Roni Even
   Gesher Erove Ltd
   14 David Hamelech
   Tel Aviv  64953
   Israel

   Email: ron.even.tlv@gmail.com

   Liang Xia
   Huawei
   101 Software Avenue, Yuhua District
   Nanjing, Jiangsu  210012
   China

   Email: frank.xialiang@huawei.com
</artwork>
      </figure>
    </section>
  </back>
</rfc>
