ALTO Working Group Q. Wu
Internet-Draft L. Xia
Intended status: Standards Track Huawei
Expires: January 29, 2014 July 28, 2013

JSON Format Extensions for Traffic Engineering (TE) performance metrics in the ALTO Information Resource Directory
draft-wu-alto-json-te-01

Abstract

The base ALTO specification defines two properties for cost metric attribute in the Cost MAP, including 'hopcount' and 'routingcost'. This specification define five new cost metric and one new parameter for Traffic Engineering(TE) performance information in the ALTO Information Resource Directory: Link Delay, Delay Variation, Packet Loss, Residual Bandwidth, Available Bandwidth,linkstate. They can be used either as constraint attribute associated with cost metric attribute 'routingcost' or returned cost metric in the response.

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 29, 2014.

Copyright Notice

Copyright (c) 2013 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 to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.


Table of Contents

1. Introduction

The ALTO protocol [I.D-ietf-alto-protocol] uses a REST-ful design , and encodes its requests and responses using JSON. In ALTO architecture [I.D-ietf-alto-protocol], the ALTO server allows alto information to be gathered from multiple systems(e.g., routing protocol). [I.D-ietf-ospf-te-metric-extensions] describes extensions to OSPF TE called "OSPF TE Metric Extensions", 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 [I.D-ietf-ospf-te-metric-extensions]can be used by an ALTO Server to retrieve the necessary performance information supplementing the prefix and network topology data gathered from other sources in the underlying network.

In the ALTO Information Resource Directory, Network and Cost Map are two core ALTO Information provided to clients. The TE performance metric can be represented using Cost MAP. The base ALTO specification [I.D-ietf- alto-protocol] defines one typical cost metric attribute for Cost Type in the Cost MAP (i.e.,'routingcost')and uses constraint attribute to list additional constraints to which elements of the Cost Map are related. This specification defines five new cost map attributes and one property associated with these attributes in alto information service: Link Delay, Link Jitter,Packet Loss, Residual Bandwidth, Available Bandwidth,linkstate. These five attribute and one new parameter can be either used as constraint attribute associated with 'routingcost' cost metric attribute or used as returned Cost Map in the response.

2. Conventions used in this document

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 RFC2119 [RFC2119].

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].

3. Cost Map constraint Extensions:

"
object {
     CostType   cost-type;
     [JSONString constraints<0..*>;]
     [PIDFilter  pids;]
   } ReqFilteredCostMap;

object {
     PIDName srcs<0..*>;
     PIDName dsts<0..*>;
   } 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.
”

Section 10.2.2.3 of "ALTO: Application Layer Traffic Optimization Protocol" [I.D-ietf-alto-protocol] states:

“
[gt | lt | ge | le | eq ] <value>
”

In the JSON Object of type ReqFilteredCostMap, the constraint attribute is expressed as:

   “
<cost-type2>  [gt | lt | ge | le | eq ] <value>
   ”

In this specification, the constraint attribute is changed to

“
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.
”

Accordingly, the constraints definition is changed to:

4. Cost Metric Extensions: Cost Map attributes

4.1. Attribute: linkdelay

Namespace:

Attribute name:  linkdelay

Purpose:  To specify the average link delay between two directly
            connected neighboring peers in the network.

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.

Cardinality:  *1

Attribute parameters:  linkstate 

Description: 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 as returned cost metric in the 
response. 'routingcost' may also be used with other cost constraint
attributes that is used to specify cost constraints. If 'linkdelay'
is present, 'routingcost' MUST have at most one 'linkdelay'.

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

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" : "linkdelay"},
  "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" : "linkdelay"},
    "map" : {
      "ipv4:192.0.2.2": {
        "ipv4:192.0.2.89"    : 1,
        "ipv4:198.51.100.34" : 2,
        "ipv4:203.0.113.45"  : 3
      }
    }
  }
}

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" : {"linkdelay 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" : {"linkdelay"},
                               }
  "map": {
          "ipv4:192.0.2.2": {
          "ipv4:192.0.2.89": 0.0[linkdelay eq 0.0],
          "ipv4:198.51.100.34": 15.0[linkdelay eq 3.0],
          "ipv4:203.0.113.45": 1.0[linkdelay eq 12.0],
                }
            }

4.2. Attribute: linkjitter

Namespace:

Attribute name:  linkjitter

Purpose:  To specify the average link delay variation between two
            directly connected neighboring peers.

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.

Cardinality:  *1

Attribute parameters:  linkstate

Description: This is intended to be a constraint attribute value
used together with 'routingcost' cost metric attribute.
routingcost' may also be used with other cost constraint 
attributes that is used to specify cost constraints.If 'linkjitter'
is present, 'routingcost' MUST have at most one 'linkjitter'.

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

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" : {"linkdelay ls 15",”linkjitter 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" : {"linkdelay","linkjitter"}
  "map": {
           "ipv4:192.0.2.2": {
           "ipv4:192.0.2.89": 0[linkdelay eq0.0,linkjitter eq0.00],
           "ipv4:198.51.100.34": 5[linkdelay eq3.0,linkjitter eq1.0],
           "ipv4:203.0.113.45":2[linkdelay eq12.0,linkjitter eq5.0],
                                 }

4.3. Attribute: linkloss

Namespace:

Attribute name:  linkloss

Purpose:  To specify a percentage of the total traffic sent over a
           configurable interval between two directly connected
           neighboring peers.

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.

Cardinality:  *1

Attribute parameters: linkstate

Description: This is intended to be new cost meric. It can be 
either used as a constraint attribute value used together with
 'routingcost' cost metric attribute or useds as returned cost
metric. routingcost' may also be used with other cost 
constraint attributes that is used to specify cost constraints. 
If 'linkloss' is present, routingcost' MUST have at most 
one 'linkloss'.

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


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" : {"linkloss 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" : {"linkloss"}
   "map": {
           "ipv4:192.0.2.2": {
           "ipv4:192.0.2.89": 0 [linkloss eq0],
           "ipv4:198.51.100.34": 1 [linkloss eq0.0001],
           "ipv4:203.0.113.45": 0 [linkloss eq0],
                             }
             }

4.4. Attribute: residualbandwidth

Namespace:

Attribute name:  residualbandwith

Purpose:  To specify Maximum Link Bandwidth minus the bandwidth
           currently allocated between two directly connected
           neighboring peers. For a link, residual bandwidth is
           defined to be Maximum Bandwidth minus the bandwidth
           currently allocated to RSVP-TE packets.  For a bundled
           link, residual bandwidth is defined to be the sum of
           the component link residual bandwidths.

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.

Cardinality:  *1

Attribute parameters:  linkstate

Description: This is intended to be a new cost metric. It could 
be either used as a constraint attribute value used together 
with 'routing cost' cost metric attribute or as returned cost 
metric in the response.'routingcost' may also be used with 
other cost constraint attributes that is used to specify 
cost constraints.If 'residualbw' is present, 'routingcost' 
MUST have at most one 'residualbw'.

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

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" : {"residbw 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" : {"residbw"}
    "map": {
            "ipv4:192.0.2.2": {
            "ipv4:192.0.2.89": 0[residbw eq0.000000],
            "ipv4:198.51.100.34": 5[residbw eq12.5],
            "ipv4:203.0.113.45":2[residbw eq5.9],
                              }
             }

4.5. Attribute: availablebandwidth

Namespace:

Attribute name:  availablebandwith

Purpose:  To specify the available bandwidth on a link between two
          directly connected neighboring peers. For a link, available
          bandwidth is defined to be residual bandwidth  minus the
          measured bandwidth used for the actual forwarding of non-
          RSVP-TE packets.  For a bundled link, available bandwidth
          is defined to be the sum of the component link available
          bandwidths.

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.

Cardinality:  *1

Attribute parameters:  linkstate


Description: This is intended to be a new cost metric. It can 
be either used as constraint attribute value used together 
with 'routing cost' cost metric attribute or used as returned
 cost metric in the response.'routingcost' may also be used 
with other cost constraint attributes that is used to specify
cost constraints.If 'availablebw' is present, 'routingcost' 
MUST have at most one 'availablebw'.

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

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" : {"availablebw 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" : {"residbw","availbw"}
                "endpoints": {
                    "srcs": [ "ipv4:192.0.2.2" ],
                    "dsts": [
                    "ipv4:192.0.2.89",
                    "ipv4:198.51.100.34",
                    "ipv4:203.0.113.45"
                             ]
                                    }
    "map": {
            "ipv4:192.0.2.2": {
            "ipv4:192.0.2.89": 0[residbw eq0,availbw eq0],
            "ipv4:198.51.100.34": 0[residbw eq12.5,availbw eq10.5],
            "ipv4:203.0.113.45":0[residbw eq5.9,availbw eq3.9],
                              }
             }

5. Cost Metric Extensions: Parameters

The following sections define Parameters used within cost metrics Definitions in the section 3.

5.1. Parameter: linkstate

Namespace:

Parameter name:  linkstate

Purpose:  Used in a multi-valued property to
          indicate whether it is steady state
          link performance.

Description:  When a property is multi-valued,
   LINKSTATE can be used to construct a steady state
   Performance topology for initial tunnel path computation,
   or to verify alternative failover paths. The LINSTATE
   is set when the measured value of this parameter exceeds
   its configured maximum threshold.  The LINKSTATE is
   cleared when the measured value falls below its
   configured threshold. LINKSTATE should be used
   together with Cost metric we defined in the
   section 3. Cost Metrics prefixed with 'lss:' are
   reserved for cost metric that is not steady state 
   link performance. Cost Metrics without prefix ‘lss:’ 
   indicate the cost metrics are steady state link performace.

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" : {"linkdelay 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": {"linkdelay"}
     "map": {
               "ipv4:192.0.2.2": {
               "ipv4:192.0.2.89": 0.0[lss:linkdelay eq 100],
                                    }
                  }

6. Security Considerations

The properties defined in this document present no security considerations beyond those in Section 14 of the base ALTO specification [draft-ietf-alto-protocol].

7. IANA Considerations

IANA has added the following entries to the ALTO cost map Properties registry, defined in Section 3 of [RFCXXX].

+-----------+--------------+------------------------+
| Namespace | Property     | Reference              |
+-----------+--------------+------------------------+
|           | linkdelay    | [RFCxxxx], Section 3.1 |
|           | linkjitter   | [RFCxxxx], Section 3.2 |
|           | linkloss     | [RFCxxxx], Section 3.3 |
|           |  residbw     | [RFCxxxx], Section 3.4 |
|           |  availbw     | [RFCxxxx], Section 3.5 |
+-----------+--------------+------------------------+

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

+-------+------------------------+------------------------+
| Name- |                        |                        |
| space | Parameter              | Reference              |
+-------+------------------------+------------------------+
|       | LINKSTATE              | [RFCxxxx], Section 4.1 |
+-------+------------------------+------------------------+

8. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", March 1997.
[RFC5234] Crocker, D., "Augmented BNF for Syntax Specifications: ABNF", RFC 5234, January 2008.
[RFC4627] Crockford, D., "The application/json Media Type for JavaScript Object Notation (JSON)", RFC 4627, July 2006.
[ALTO] Alimi, R., "ALTO Protocol", ID draft-ietf-alto-protocol-16, May 2013.
[OSPF] Giacalone, S., "OSPF Traffic Engineering (TE) Metric Extensions", ID draft-ietf-ospf-te-metric-extensions-04, June 2013.

Authors' Addresses

Qin Wu Huawei 101 Software Avenue, Yuhua District Nanjing, Jiangsu 210012 China EMail: sunseawq@huawei.com
Liang Xia Huawei 101 Software Avenue, Yuhua District Nanjing, Jiangsu 210012 China EMail: frank.xialiang@huawei.com