<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-alto-cost-calendar-21" indexInclude="true" ipr="trust200902" number="8896" prepTime="2020-11-06T11:38:45" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-alto-cost-calendar-21" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8896" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="ALTO Cost Calendar">Application-Layer Traffic Optimization (ALTO) Cost Calendar</title>
    <seriesInfo name="RFC" value="8896" stream="IETF"/>
    <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
      <organization showOnFrontPage="true">Nokia Bell Labs</organization>
      <address>
        <postal>
          <street>Route de Villejust</street>
          <city>Nozay</city>
          <code>91460</code>
          <country>France</country>
        </postal>
        <email>Sabine.Randriamasy@nokia-bell-labs.com</email>
      </address>
    </author>
    <author fullname="Y. Richard Yang" initials="Y." surname="Yang">
      <organization showOnFrontPage="true">Yale University</organization>
      <address>
        <postal>
          <street>51 Prospect St.</street>
          <city>New Haven</city>
          <region>CT</region>
          <code>06520</code>
          <country>United States of America</country>
        </postal>
        <email>yry@cs.yale.edu</email>
      </address>
    </author>
    <author fullname="Qin Wu" initials="Q." surname="Wu">
      <organization showOnFrontPage="true">Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue</street>
          <extaddr>Yuhua District</extaddr>
          <city>Nanjing</city>
          <region>Jiangsu</region>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>sunseawq@huawei.com</email>
      </address>
    </author>
    <author fullname="Lingli Deng" initials="L." surname="Deng">
      <organization showOnFrontPage="true">China Mobile</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>denglingli@chinamobile.com</email>
      </address>
    </author>
    <author fullname="Nico Schwan" initials="N." surname="Schwan">
      <organization showOnFrontPage="true">Thales Deutschland</organization>
      <address>
        <postal>
          <street>Lorenzstrasse 10</street>
          <city>Stuttgart</city>
          <code>70435</code>
          <country>Germany</country>
        </postal>
        <email>nico.schwan@thalesgroup.com</email>
      </address>
    </author>
    <date month="11" year="2020"/>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document is an extension to the base Application-Layer Traffic
      Optimization (ALTO) protocol.  It extends the ALTO cost information
      service so that applications decide not only 'where' to connect but
      also 'when'.  This is useful for applications that need to perform bulk
      data transfer and would like to schedule these transfers during an
      off-peak hour, for example.  This extension introduces the ALTO Cost
      Calendar with which an ALTO Server exposes ALTO cost values in JSON
      arrays where each value corresponds to a given time interval.  The time
      intervals, as well as other Calendar attributes, are specified in the
      Information Resources Directory and ALTO Server responses.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8896" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) 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.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-some-recent-known-uses">Some Recent Known Uses</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.2">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-overview-of-alto-cost-calen">Overview of ALTO Cost Calendars and Terminology</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alto-cost-calendar-overview">ALTO Cost Calendar Overview</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alto-cost-calendar-informat">ALTO Cost Calendar Information Features</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alto-calendar-design-charac">ALTO Calendar Design Characteristics</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.3.2">
                  <li pn="section-toc.1-1.3.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.3.2.1.1"><xref derivedContent="3.3.1" format="counter" sectionFormat="of" target="section-3.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alto-cost-calendar-for-all-">ALTO Cost Calendar for All Cost Modes</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.3.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.3.2.2.1"><xref derivedContent="3.3.2" format="counter" sectionFormat="of" target="section-3.3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-compatibility-with-legacy-a">Compatibility with Legacy ALTO Clients</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alto-calendar-specification">ALTO Calendar Specification: IRD Extensions</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-calendar-attributes-in-the-">Calendar Attributes in the IRD Resource Capabilities</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-calendars-in-a-delegate-ird">Calendars in a Delegate IRD</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-example-ird-with-alto-cost-">Example IRD with ALTO Cost Calendars</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alto-calendar-specification-">ALTO Calendar Specification: Service Information Resources</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-calendar-extensions-for-fil">Calendar Extensions for Filtered Cost Maps (FCM)</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.1.2">
                  <li pn="section-toc.1-1.5.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.1.1"><xref derivedContent="5.1.1" format="counter" sectionFormat="of" target="section-5.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-calendar-extensions-in-filt">Calendar Extensions in Filtered Cost Map Requests</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.2.1"><xref derivedContent="5.1.2" format="counter" sectionFormat="of" target="section-5.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-calendar-extensions-in-filte">Calendar Extensions in Filtered Cost Map Responses</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.3">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.3.1"><xref derivedContent="5.1.3" format="counter" sectionFormat="of" target="section-5.1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-case-and-example-fcm-wi">Use Case and Example: FCM with a Bandwidth Calendar</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-calendar-extensions-in-the-">Calendar Extensions in the Endpoint Cost Service</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.2.2">
                  <li pn="section-toc.1-1.5.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.2.2.1.1"><xref derivedContent="5.2.1" format="counter" sectionFormat="of" target="section-5.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-calendar-specific-input-in-">Calendar-Specific Input in Endpoint Cost Requests</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.2.2.2.1"><xref derivedContent="5.2.2" format="counter" sectionFormat="of" target="section-5.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-calendar-attributes-in-the-e">Calendar Attributes in the Endpoint Cost Response</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.2.2.3">
                    <t indent="0" pn="section-toc.1-1.5.2.2.2.3.1"><xref derivedContent="5.2.3" format="counter" sectionFormat="of" target="section-5.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-case-and-example-ecs-wi">Use Case and Example: ECS with a routingcost Calendar</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.2.2.4">
                    <t indent="0" pn="section-toc.1-1.5.2.2.2.4.1"><xref derivedContent="5.2.4" format="counter" sectionFormat="of" target="section-5.2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-case-and-example-ecs-wit">Use Case and Example: ECS with a Multi-cost Calendar for
	  routingcost and owdelay</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-operational-considerations">Operational Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="sect-1" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The base Application-Layer Traffic Optimization (ALTO) protocol
      specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> provides guidance
      to overlay applications that need to select one or several hosts from a
      set of candidates able to provide a desired resource.  This guidance is
      based on parameters that affect performance and efficiency of the data
      transmission between the hosts, such as the topological distance.  The
      goal of ALTO is to improve the Quality of Experience (QoE) in the
      application while optimizing resource usage in the underlying network
      infrastructure.</t>
      <t indent="0" pn="section-1-2">The ALTO protocol in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>
      specifies a network map that defines groupings of endpoints in
      provider-defined network regions identified by Provider-defined
      Identifiers (PIDs).  The Cost Map Service, Endpoint Cost Service (ECS),
      and Endpoint Ranking Service then provide ISP-defined costs and rankings
      for connections among the specified endpoints and PIDs and thus
      incentives for application clients to connect to ISP-preferred
      locations, for instance, to reduce their costs.  For the reasons
      outlined in the ALTO problem statement <xref target="RFC5693" format="default" sectionFormat="of" derivedContent="RFC5693"/> and requirement AR-14 of <xref target="RFC6708" format="default" sectionFormat="of" derivedContent="RFC6708"/>, ALTO does not disseminate network metrics that
      change frequently.  In a network, the costs can fluctuate for many
      reasons having to do with instantaneous traffic load or diurnal
      patterns of traffic demand or planned events, such as network
      maintenance, holidays, or highly publicized events.  Thus, an ALTO
      application wishing to use the Cost Map and Endpoint Cost Service at
      some future time will have to estimate the state of the network at that
      time, a process that is, at best, fragile and brittle, since the
      application does not have any visibility into the state of the network.
      Providing network costs for only the current time thus may not be
      sufficient, in particular for applications that can schedule their
      traffic in a span of time, for example, by deferring backups or other
      background traffic to off- peak hours.</t>
      <t indent="0" pn="section-1-3">In case the ALTO cost value changes are predictable over a certain
      period of time and the application does not require immediate data
      transfer, it can save time to get the whole set of cost values over this
      period in one single ALTO response.  Using this set to schedule data
      transfers allows optimizing the network resources usage and QoE. ALTO
      Clients and Servers can also minimize their workload by reducing and
      accordingly scheduling their data exchanges.</t>
      <t indent="0" pn="section-1-4">This document extends <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> to
      allow an ALTO Server to provide network costs for a given duration of
      time.  A sequence of network costs across a time span for a given pair
      of network locations is named an "ALTO Cost Calendar".  The Filtered
      Cost Map Service and Endpoint Cost Service are extended to provide Cost
      Calendars.  In addition to this functional ALTO enhancement, we expect
      to further save network and storage resources by gathering multiple cost
      values for one cost type into one single ALTO Server response.</t>
      <t indent="0" pn="section-1-5">In this document, an "ALTO Cost Calendar" is specified in terms of
      information resource capabilities that are applicable to time-sensitive
      ALTO metrics.  An ALTO Cost Calendar exposes ALTO cost values in JSON
      arrays, see <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/>, where each value
      corresponds to a given time interval.  The time intervals, as well as
      other Calendar attributes, are specified in the Information Resources
      Directory (IRD) and in the Server response to allow the ALTO Client to
      interpret the received ALTO values.  Last, the extensions for ALTO
      Calendars are applicable to any cost mode, and they ensure backwards
      compatibility with legacy ALTO Clients -- those that only support <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
      <t indent="0" pn="section-1-6">In the rest of this document, <xref target="sect-3" format="default" sectionFormat="of" derivedContent="Section 3"/> provides the design characteristics.  Sections <xref target="sect-4" format="counter" sectionFormat="of" derivedContent="4"/> and <xref target="sect-5" format="counter" sectionFormat="of" derivedContent="5"/> define the formal specifications for the IRD and the
      information resources. IANA, security considerations, and operational
      considerations are addressed respectively in Sections <xref target="sect-6" format="counter" sectionFormat="of" derivedContent="6"/>, <xref target="sect-7" format="counter" sectionFormat="of" derivedContent="7"/>, and <xref target="sect-8" format="counter" sectionFormat="of" derivedContent="8"/>.</t>
      <section anchor="sect-1.1" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-some-recent-known-uses">Some Recent Known Uses</name>
        <t indent="0" pn="section-1.1-1"> A potential use case is implementing smart network services that
	allow applications to dynamically build end-to-end, virtual networks
	to satisfy given demands with no manual intervention. For  example,
	data-transfer automation applications may need a network service to
	determine the availability of bandwidth resources to decide when
	to transfer their data sets. The SENSE project  <xref target="SENSE" format="default" sectionFormat="of" derivedContent="SENSE"/> supports such
	applications by requiring that a network provides services such as the
	Time-Bandwidth-Product (TBP) service, which informs applications of
	bandwidth availability during a specific time period. ALTO Calendars
	can support this service if the Calendar start date and duration cover
	the period of interest of the requesting application.</t>
        <t indent="0" pn="section-1.1-2">The need of future scheduling of large-scale traffic that can be
	addressed by the ALTO protocol is also motivated by Unicorn, a unified
	resource orchestration framework for multi-domain, geo-distributed
	data analytics, see <xref target="UNICORN-FGCS" format="default" sectionFormat="of" derivedContent="UNICORN-FGCS"/>.</t>
      </section>
      <section anchor="sect-1.2" numbered="true" toc="include" removeInRFC="false" pn="section-1.2">
        <name slugifiedName="name-terminology">Terminology</name>
        <dl newline="true" spacing="normal" indent="3" pn="section-1.2-1">
          <dt pn="section-1.2-1.1">ALTO transaction:</dt>
          <dd pn="section-1.2-1.2">A request/response exchange between an ALTO
      Client and an ALTO Server.</dd>
          <dt pn="section-1.2-1.3">Client:</dt>
          <dd pn="section-1.2-1.4">When used with a capital "C", this term refers to an ALTO
	  Client.</dd>
          <dt pn="section-1.2-1.5">Calendar, Cost Calendar, ALTO Calendar:</dt>
          <dd pn="section-1.2-1.6">When used with capitalized words, these terms refer to an ALTO
	  Cost Calendar.</dd>
          <dt pn="section-1.2-1.7">Calendared:</dt>
          <dd pn="section-1.2-1.8">This adjective qualifies information resources providing Cost
	  Calendars and information on costs that are provided in the form of
	  a Cost Calendar.</dd>
          <dt pn="section-1.2-1.9">Endpoint (EP):</dt>
          <dd pn="section-1.2-1.10">An endpoint is defined as in <xref target="RFC7285" sectionFormat="of" section="2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-2.1" derivedContent="RFC7285"/>.  It can be, for example, a peer,
	  a CDN storage location, a physical server involved in a virtual
	  server-supported application, a party in a resource-sharing swarm
	  such as a computation grid, or an online multi-party game.</dd>
          <dt pn="section-1.2-1.11">ECM:</dt>
          <dd pn="section-1.2-1.12">An abbreviation for Endpoint Cost Map.</dd>
          <dt pn="section-1.2-1.13">FCM:</dt>
          <dd pn="section-1.2-1.14">An abbreviation for Filtered Cost Map.</dd>
          <dt pn="section-1.2-1.15">Server:</dt>
          <dd pn="section-1.2-1.16">When used with a capital "S", this term refers to an ALTO Server.</dd>
        </dl>
      </section>
    </section>
    <section anchor="sect-2" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-requirements-language">Requirements Language</name>
      <t indent="0" pn="section-2-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", 
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are
    to be interpreted as 
    described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
      <t indent="0" pn="section-2-2">When the words appear in lower case, they are to be interpreted with
      their natural language meanings.</t>
    </section>
    <section anchor="sect-3" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-overview-of-alto-cost-calen">Overview of ALTO Cost Calendars and Terminology</name>
      <t indent="0" pn="section-3-1">This section gives a high-level overview of the design. 

      It assumes the reader is familiar with the ALTO protocol <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and its Multi-Cost ALTO extension
      <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>.</t>
      <section anchor="sect-3.1" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-alto-cost-calendar-overview">ALTO Cost Calendar Overview</name>
        <t indent="0" pn="section-3.1-1">An ALTO Cost Calendar provided by the ALTO Server provides 2
         information items:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.1-2">
          <li pn="section-3.1-2.1">an array of values for a given metric, where each value
	  specifies the metric corresponding to a time interval, where the
	  value array can sometimes be a cyclic pattern that repeats a certain
	  number of times and</li>
          <li pn="section-3.1-2.2">attributes describing the time scope of the Calendar, including
	  the size and number of the intervals and the date of the starting
	  point of the Calendar, allowing an ALTO Client to interpret the
	  values properly.</li>
        </ul>
        <t indent="0" pn="section-3.1-3">An ALTO Cost Calendar can be used like a "time table" to figure out
	the best time to schedule data transfers and also to proactively
	manage application traffic given predictable events, such as an expected
	spike in traffic due to crowd gathering (concerts, sports, etc.),
	traffic-intensive holidays, and network maintenance.  A Calendar may be
	viewed as a synthetic abstraction of, for example, real measurements
	gathered over previous periods on which statistics have been computed.
	However, like for any schedule, unexpected network incidents may
	require the current ALTO Calendar to be updated and resent to the
	ALTO Clients needing it.  The "ALTO Incremental Updates Using
	Server-Sent Events (SSE)" Service <xref target="RFC8895" format="default" sectionFormat="of" derivedContent="RFC8895"/> can be used to  directly update the Calendar upon
	value changes if supported by both the Server and the Client.</t>
        <t indent="0" pn="section-3.1-4">
   Most likely, the ALTO Cost Calendar would be used for the Endpoint
   Cost Service, assuming that a limited set of feasible endpoints for a
   non-real time application is already identified, and that those
   endpoints do not need to be accessed immediately and that their
   access can be scheduled within a given time period.
	The Filtered Cost Map Service is also
	applicable as long as the size of the Map allows it.</t>
      </section>
      <section anchor="sect-3.2" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-alto-cost-calendar-informat">ALTO Cost Calendar Information Features</name>
        <t indent="0" pn="section-3.2-1">
   The Calendar attributes are provided in the Information Resources
   Directory (IRD) and in ALTO Server responses.  The IRD announces
   attributes without date values
   in its information resources capabilities, whereas attributes with 
   time-dependent values are provided in the "meta" section of Server responses.  
   The ALTO Cost Calendar attributes provide the following information:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.2-2">
          <li pn="section-3.2-2.1">
            <t indent="0" pn="section-3.2-2.1.1">attributes to describe the time scope of the Calendar value array:
            </t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.2-2.1.2">
              <li pn="section-3.2-2.1.2.1">"time-interval-size": the applicable time interval size for
	      each Calendar value, defined in seconds, that can cover a wide
	      range of values.</li>
              <li pn="section-3.2-2.1.2.2">"number-of-intervals": the number of intervals provided in
	      the Calendar.</li>
            </ul>
          </li>
          <li pn="section-3.2-2.2">"calendar-start-time": specifying when the Calendar starts; that
	  is, to which date the first value of the Cost Calendar is
	  applicable.</li>
          <li pn="section-3.2-2.3">"repeated": an optional attribute indicating how many iterations
	  of the provided Calendar will have the same values.  The Server may
	  use it to allow the Client to schedule its next request and thus
	  save its own workload by reducing processing of similar
	  requests.</li>
        </ul>
        <t indent="0" pn="section-3.2-3">Attribute "repeated" may take a very high value if a Calendar
	represents a cyclic value pattern that the Server considers valid for
	a long period.  In this case, the Server will only update the Calendar
	values once this period has elapsed or if an unexpected event occurs
	on the network. See <xref target="sect-8" format="default" sectionFormat="of" derivedContent="Section 8"/> for more
	discussion.</t>
      </section>
      <section anchor="sect-3.3" numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-alto-calendar-design-charac">ALTO Calendar Design Characteristics</name>
        <t indent="0" pn="section-3.3-1">The present document uses the notations defined in "Notation"
	(<xref target="RFC7285" sectionFormat="of" section="8.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-8.2" derivedContent="RFC7285"/>).</t>
        <t indent="0" pn="section-3.3-2">The extensions in this document encode requests and responses using
	JSON <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/>.</t>
        <t indent="0" pn="section-3.3-3">In the base protocol <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>, an ALTO cost is
        specified as a generic JSONValue <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/> to allow extensions. However, that section (<xref target="RFC7285" sectionFormat="of" section="11.2.3.6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-11.2.3.6" derivedContent="RFC7285"/>) states:</t>
        <blockquote pn="section-3.3-4">An implementation of the protocol in
	this document
	<bcp14>SHOULD</bcp14> assume that the cost is a JSONNumber and fail to
	parse if it is not, unless the implementation is using an extension to
	this document that indicates when and how costs of other data types
	are signaled.</blockquote>
        <t indent="0" pn="section-3.3-5">The present document extends the definition of a legacy cost map
	given in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> to allow a cost
	entry to be an array of values, with one value per time interval,
	instead of being just one number, when the Cost Calendar functionality
	is activated on this cost. Therefore, the implementor of this extension
	<bcp14>MUST</bcp14> consider that a cost entry is an array of values
	if this cost has been queried as a Calendar. </t>
        <t indent="0" pn="section-3.3-6"> Specifically, an implementation of this extension
	<bcp14>MUST</bcp14> parse the "number-of-intervals" attribute of the
	Calendar attributes in an IRD entry announcing a service providing a
	Cost Calendar for a given cost type. The implementation then will know
	that a cost entry of the service will be an array of values, and the
	expected size of the array is that specified by the
	"number-of-intervals" attribute. The following rules attempt to ensure
	consistency between the array size announced by the Server and the
	actual size of the array received by the Client:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.3-7">
          <li pn="section-3.3-7.1">The size of the array of values conveyed in a Cost Calendar and
	  received by the Client <bcp14>MUST</bcp14> be equal to the value of
	  attribute "number-of-intervals" indicated in the IRD for the
	  requested cost type.</li>
          <li pn="section-3.3-7.2">When the size of the array received by the Client is different
	  from the expected size, the Client <bcp14>SHOULD</bcp14> ignore the
	  received array.</li>
        </ul>
        <t indent="0" pn="section-3.3-8">To realize an ALTO Calendar, this document extends the IRD and the
	ALTO requests and responses for Cost Calendars.</t>
        <t indent="0" pn="section-3.3-9">This extension is designed to be lightweight and to ensure
	backwards compatibility with base protocol ALTO Clients and with other
	extensions.  It relies on "Parsing of Unknown Fields" (<xref target="RFC7285" sectionFormat="of" section="8.3.7" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-8.3.7" derivedContent="RFC7285"/>), which states:
	"Extensions may include additional fields within JSON objects defined
	in this document.  ALTO implementations <bcp14>MUST</bcp14> ignore
	unknown fields when processing ALTO messages."</t>
        <t indent="0" pn="section-3.3-10">The Calendar-specific capabilities are integrated in the
	information resources of the IRD and in the "meta" member of ALTO
	responses to Cost Calendars requests.  A Calendar and its capabilities
	are associated with a given information resource and within this
	information resource with a given cost type.  This design has several
	advantages:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.3-11">
          <li pn="section-3.3-11.1">it does not introduce a new mode,</li>
          <li pn="section-3.3-11.2">it does not introduce new media types, and</li>
          <li pn="section-3.3-11.3">it allows an ALTO Server to offer, for a cost type, different
	  Calendars with attributes that are specific to the information
	  resources providing a Calendar for this cost type, instead of being
	  globally specific to the cost type.</li>
        </ul>
        <t indent="0" pn="section-3.3-12">The applicable Calendared information resources are:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.3-13">
          <li pn="section-3.3-13.1">the Filtered Cost Map and</li>
          <li pn="section-3.3-13.2">the Endpoint Cost Map.</li>
        </ul>
        <t indent="0" pn="section-3.3-14">The ALTO Server can choose in which frequency it provides cost
	Calendars to ALTO Clients.  It may either provide Calendar updates
	starting at the request date or carefully schedule its updates so as
	to take profit from a potential repetition/periodicity of Calendar
	values.</t>
        <t indent="0" pn="section-3.3-15">Since Calendar attributes are specific to an information resource,
	a Server may adapt the granularity of the calendared information so as
	to moderate the volume of exchanged data. For example, suppose a
	Server provides a Calendar for cost type name "routingcost". The
	Server may offer a Calendar in a Cost Map resource, which may be a
	voluminous resource, as an array of 6 intervals lasting each 4
	hours. It may also offer a Calendar in an Endpoint Cost Map resource,
	which is potentially less voluminous, as a finer-grained array of 24
	intervals lasting 1 hour each.</t>
        <t indent="0" pn="section-3.3-16">The ALTO Server does not support constraints on Calendars, provided
	Calendars are requested for numerical values, for two main
	reasons:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.3-17">
          <li pn="section-3.3-17.1">Constraints on an array of values may be various. For instance,
	  some Clients may refuse Calendars with one single value violating a
	  constraint, whereas other ones may tolerate Calendars with values
	  violating constraints, for example, at given times. Therefore,
	  expressing constraints in a way that covers all possible Client
	  preferences is challenging.</li>
          <li pn="section-3.3-17.2">If constraints were to be supported, the processing overhead
	  would be substantial for the Server as it would have to parse all
	  the values of the Calendar array before returning a response. </li>
        </ul>
        <t indent="0" pn="section-3.3-18">As providing the constraint functionality in conjunction with the
	Calendar functionality is not feasible for the reasons described
	above, the two features are mutually exclusive. The absence of
	constraints on Filtered Cost Map and Endpoint Cost Map Calendars
	reflects a divergence from the non-calendared information resources
	defined in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and extended in
	<xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>, which support optional
	constraints. </t>
        <section anchor="sect-3.3.1" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.1">
          <name slugifiedName="name-alto-cost-calendar-for-all-">ALTO Cost Calendar for All Cost Modes</name>
          <t indent="0" pn="section-3.3.1-1">An ALTO Cost Calendar is well suited for values encoded in the
	  "numerical" mode.  Actually, a Calendar can also represent metrics
	  in other modes considered as compatible with time-varying
	  values. For example, types of cost values (such as JSONBool) can also
	  be calendared (as their value may be 'true' or 'false' depending on
	  given time periods or likewise) values represented by strings, such
	  as "medium", "high", "low", "blue", and "open".</t>
          <t indent="0" pn="section-3.3.1-2">Note also that a Calendar is suitable as well for time-varying
	  metrics provided in the "ordinal" mode if these values are
	  time-varying and the ALTO Server provides updates of
	  cost-value-based preferences.</t>
        </section>
        <section anchor="sect-3.3.2" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.2">
          <name slugifiedName="name-compatibility-with-legacy-a">Compatibility with Legacy ALTO Clients</name>
          <t indent="0" pn="section-3.3.2-1">The ALTO protocol extensions for Cost Calendars have been defined
	  so as to ensure that Calendar-capable ALTO Servers can provide
	  legacy ALTO Clients with legacy information resources as well.  That
	  is, a legacy ALTO Client can request resources and receive responses
	  as specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
          <t indent="0" pn="section-3.3.2-2">A Calendar-aware ALTO Server <bcp14>MUST</bcp14> implement the
	  base protocol specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
          <t indent="0" pn="section-3.3.2-3">A Calendar-aware ALTO Client <bcp14>MUST</bcp14> implement the
	  base protocol specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
          <t indent="0" pn="section-3.3.2-4">As a consequence, when a metric is available as a Calendar array,
	  it also <bcp14>MUST</bcp14> be available as a single value, as
	  required by <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>. The Server,
	  in this case, provides the current value of the metric to either
	  Calendar-aware Clients not interested in future or time-based values
	  or Clients implementing <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>
	  only.</t>
          <t indent="0" pn="section-3.3.2-5">For compatibility with legacy ALTO Clients specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>, calendared information
	  resources are not applicable for full cost maps for the following
	  reason: a legacy ALTO Client would receive a calendared cost map via
	  an HTTP 'GET' command.  As specified in <xref target="RFC7285" sectionFormat="of" section="8.3.7" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-8.3.7" derivedContent="RFC7285"/>, it will ignore the Calendar
	  attributes indicated in the "meta" of the responses.  Therefore,
	  lacking information on Calendar attributes, it will not be able to
	  correctly interpret and process the values of the received array of
	  Calendar cost values.</t>
          <t indent="0" pn="section-3.3.2-6">Therefore, calendared information resources <bcp14>MUST</bcp14>
	  be requested via the Filtered Cost Map Service or the Endpoint Cost
	  Service using a POST method.</t>
        </section>
      </section>
    </section>
    <section anchor="sect-4" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-alto-calendar-specification">ALTO Calendar Specification: IRD Extensions</name>
      <t indent="0" pn="section-4-1">The Calendar attributes in the IRD information resources capabilities
      carry dateless values.  A Calendar is associated with an information
      resource rather than a cost type.  For example, a Server can provide a
      "routingcost" Calendar for the Filtered Cost Map Service at a
      granularity of one day and a "routingcost" Calendar for the Endpoint
      Cost Service at a finer granularity but for a limited number of
      endpoints.  An example IRD with Calendar-specific features is provided
      in <xref target="sect-4.3" format="default" sectionFormat="of" derivedContent="Section 4.3"/>.</t>
      <section anchor="sect-4.1" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-calendar-attributes-in-the-">Calendar Attributes in the IRD Resource Capabilities</name>
        <t indent="0" pn="section-4.1-1">A Cost Calendar for a given cost type <bcp14>MUST</bcp14> be
	indicated in the IRD by an object of type CalendarAttributes.  A
	CalendarAttributes object is represented by the "calendar-attributes"
	member of a resource entry. Member "calendar-attributes" is an array
	of CalendarAttributes objects. Each CalendarAttributes object lists a
	set of one or more cost types it applies to. A cost type name
	<bcp14>MUST NOT</bcp14> appear more than once in the
	"calendar-attributes" member of a resource entry; multiple appearances
	of a cost type name in the CalendarAttributes object of the
	"calendar-attributes" member <bcp14>MUST</bcp14> cause the ALTO Client
	to ignore any occurrences of this name beyond the first encountered
	occurrence.  The Client <bcp14>SHOULD</bcp14> consider the
	CalendarAttributes object in the array containing the first
	encountered occurrence of a cost type as the valid one for this cost
	type. As an alternative, the Client may want to avoid the risks of
	erroneous guidance associated to the use of potentially invalid
	Calendar values. In this case, the Client <bcp14>MAY</bcp14> ignore
	the totality of occurrences of CalendarAttributes objects containing
	the cost type name and query the cost type using <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
        <t indent="0" pn="section-4.1-2">The encoding format for object CalendarAttributes using JSON <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/> is as follows:</t>
        <t indent="0" pn="section-4.1-3">CalendarAttributes calendar-attributes &lt;1..*&gt;;</t>
        <sourcecode markers="false" pn="section-4.1-4">
object{
  JSONString cost-type-names &lt;1..*&gt;;
  JSONNumber time-interval-size;
  JSONNumber number-of-intervals;
} CalendarAttributes;
</sourcecode>
        <dl newline="true" spacing="normal" indent="3" pn="section-4.1-5">
          <dt pn="section-4.1-5.1">"cost-type-names":</dt>
          <dd pn="section-4.1-5.2">An array of one or more elements indicating the cost type
	    names in the IRD entry to which the values of "time-interval-size"
	    and "number-of-intervals" apply.</dd>
          <dt pn="section-4.1-5.3">"time-interval-size":</dt>
          <dd pn="section-4.1-5.4">The duration of an ALTO Calendar time interval in a unit of
	    seconds. A "time-interval-size" value contains a non-negative
	    JSONNumber.  Example values are 300 and 7200, meaning that each
	    Calendar value applies on a time interval that lasts 5 minutes and
	    2 hours, respectively. Since an interval size (e.g., 100 ms) can
	    be smaller than the unit, the value specified may be a floating
	    point (e.g., 0.1). Both ALTO Clients and Servers should be aware
	    of potential precision issues caused by using floating point
	    numbers; for example, the floating number 0.1 cannot be
	    represented precisely using a finite number of binary bits. To
	    improve interoperability and be consistent with <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> on the
	    use of floating point numbers, the Server and the Client
	    <bcp14>SHOULD</bcp14> use IEEE 754 double-precision floating point
	    <xref target="IEEE.754.2019" format="default" sectionFormat="of" derivedContent="IEEE.754.2019"/> to store this
	    value.</dd>
          <dt pn="section-4.1-5.5">"number-of-intervals":</dt>
          <dd pn="section-4.1-5.6">A strictly positive integer (greater or equal to 1) that
	    indicates the number of values of the Cost Calendar array.</dd>
        </dl>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.1-6">
          <li pn="section-4.1-6.1">An ALTO Server <bcp14>SHOULD</bcp14> specify the "time-interval-size" in the IRD 
   as the smallest it is able to provide. A Client that needs 
   a longer interval can aggregate multiple cost values to obtain it.</li>
          <li pn="section-4.1-6.2">Attribute "cost-type-names" is associated with
	"time-interval-size" and "number-of-intervals", because multiple cost
	types may share the same values for attributes "time-interval-size"
	and "number-of-intervals". To avoid redundancies, cost type names
	sharing the same values for "time-interval-size" and
	"number-of-intervals" are grouped in the "cost-type-names"
	attribute. In the example IRD provided in <xref target="sect-4.3" format="default" sectionFormat="of" derivedContent="Section 4.3"/>, the information resource
	"filtered-cost-map-calendar" provides a Calendar for cost type names
	"num-routingcost", "num-throughputrating", and
	"string-servicestatus". Cost type names "num-routingcost" and
	"num-throughputrating" are grouped in the "cost-type-names" attribute
	because they share the same values for "time-interval-size" and
	"number-of-intervals", which are respectively 7200 and 12.</li>
          <li pn="section-4.1-6.3">Multiplying "time-interval-size" by "number-of-intervals" provides
	the duration of the provided Calendar.  For example, an ALTO Server
	may provide a Calendar for ALTO values changing every
	"time-interval-size" equal to 5 minutes.  If "number-of-intervals" has
	the value 12, then the duration of the provided Calendar is 1
	hour.</li>
        </ul>
      </section>
      <section anchor="sect-4.2" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-calendars-in-a-delegate-ird">Calendars in a Delegate IRD</name>
        <t indent="0" pn="section-4.2-1">It may be useful to distinguish IRD resources supported by the base
	ALTO protocol from resources supported by its extensions. To achieve
	this, one option is that a "root" ALTO Server implementing <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> resources and running at a given
	domain delegates "specialized" information resources, such as the ones
	providing Cost Calendars, to another ALTO Server running in a
	subdomain. The "root" ALTO Server can provide a Calendar-specific
	resource entry that has a media-type of
	"application/alto-directory+json" and that specifies the  URI allowing
	to retrieve the location of a Calendar-aware Server and discover its
	resources. This option is described in "Delegation Using IRD" (<xref target="RFC7285" sectionFormat="of" section="9.2.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-9.2.4" derivedContent="RFC7285"/>).</t>
        <t indent="0" pn="section-4.2-2">This document provides an example where a "root" ALTO Server runs
	in a domain called "alto.example.com".  It delegates the announcement
	of Calendars capabilities to an ALTO Server running in a subdomain
	called "custom.alto.example.com".  The location of the "delegate
	Calendar IRD" is assumed to be indicated in the "root" IRD by the
	resource entry: "custom-calendared-resources".</t>
        <t indent="0" pn="section-4.2-3">
	Another benefit of delegation is that some cost types for some resources 
	may be more advantageous as Cost Calendars, and it makes little sense to get them 
	as a single value. For example, if a cost type has predictable and frequently 
	changing values calendared in short time intervals, such as a minute, 
	it saves time and network resources to track the cost values via a focused 
	delegate Server rather than the more general "root" Server.</t>
      </section>
      <section anchor="sect-4.3" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-example-ird-with-alto-cost-">Example IRD with ALTO Cost Calendars</name>
        <t indent="0" pn="section-4.3-1">This section provides an example ALTO Server IRD that supports
	various cost metrics and cost modes.  In particular, since <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> makes it mandatory, the Server
	uses metric "routingcost" in the "numerical" mode.</t>
        <t indent="0" pn="section-4.3-2">For illustrative purposes, this section introduces 3 other
	fictitious example metrics and modes that should be understood as
	examples and should not be used or considered as normative.</t>
        <t indent="0" pn="section-4.3-3">The cost type names used in the example IRD are as follows:</t>
        <dl newline="true" spacing="normal" indent="3" pn="section-4.3-4">
          <dt pn="section-4.3-4.1">"num-routingcost":</dt>
          <dd pn="section-4.3-4.2">Refers to metric "routingcost" in the
	  numerical mode, as defined in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and registered with IANA.</dd>
          <dt pn="section-4.3-4.3">"num-owdelay":</dt>
          <dd pn="section-4.3-4.4">Refers to fictitious performance metric "owdelay"
	  in the "numerical" mode to reflect the one-way packet transmission
	  delay on a path.  A related performance metric is currently under
	  definition in <xref target="I-D.ietf-alto-performance-metrics" format="default" sectionFormat="of" derivedContent="ALTO_METRICS"/>.</dd>
          <dt pn="section-4.3-4.5">"num-throughputrating":</dt>
          <dd pn="section-4.3-4.6">Refers to fictitious metric
	  "throughputrating" in the "numerical" mode to reflect the provider
	  preference in terms of end-to-end throughput.</dd>
          <dt pn="section-4.3-4.7">"string-servicestatus":</dt>
          <dd pn="section-4.3-4.8">Refers to fictitious metric
	  "servicestatus" containing a string to reflect the availability,
	  defined by the provider, of, for instance, path connectivity.</dd>
        </dl>
        <t indent="0" pn="section-4.3-5">The example IRD includes 2 particular URIs providing Calendars:</t>
        <dl newline="true" spacing="normal" indent="3" pn="section-4.3-6">
          <dt pn="section-4.3-6.1">"https://custom.alto.example.com/calendar/costmap/filtered":</dt>
          <dd pn="section-4.3-6.2">A Filtered Cost Map in which Calendar capabilities are indicated
	  for cost type names "num-routingcost", "num-throughputrating", and
	  "string-servicestatus" and</dd>
          <dt pn="section-4.3-6.3">"https://custom.alto.example.com/calendar/endpointcost/lookup":</dt>
          <dd pn="section-4.3-6.4">An Endpoint Cost Map in which Calendar capabilities are indicated
	  for cost type names "num-routingcost", "num-owdelay",
	  "num-throughputrating", and "string-servicestatus".</dd>
        </dl>
        <t indent="0" pn="section-4.3-7">The design of the Calendar capabilities allows some Calendars with
	the same cost type name to be available in several information
	resources with different Calendar attributes.  This is the case for
	Calendars on "num-routingcost", "num-throughputrating", and
	"string-servicestatus", available in both the Filtered Cost Map and
	Endpoint Cost Service but with different time interval sizes for
	"num-throughputrating" and "string-servicestatus".</t>
        <sourcecode markers="false" pn="section-4.3-8">
--- Client to Server request for IRD ----------

GET /calendars-directory HTTP/1.1
Host: custom.alto.example.com
Accept: application/alto-directory+json,application/alto-error+json

--- Server response to Client -----------------

HTTP/1.1 200 OK
Content-Length: 2622
Content-Type: application/alto-directory+json

{
  "meta" : {
    "default-alto-network-map" : "my-default-network-map",
    "cost-types": {
      "num-routingcost": {
        "cost-mode" : "numerical",
        "cost-metric" : "routingcost"
      },
      "num-owdelay": {
        "cost-mode"  : "numerical",
        "cost-metric": "owdelay"
      },
      "num-throughputrating": {
        "cost-mode"  : "numerical",
        "cost-metric": "throughputrating"
      },
      "string-servicestatus": {
        "cost-mode"  : "string",
        "cost-metric": "servicestatus"
      }
    }
  },
  "resources" : {
    "filtered-cost-map-calendar" : {
      "uri" :
        "https://custom.alto.example.com/calendar/costmap/filtered",
      "media-type" : "application/alto-costmap+json",
      "accepts" : "application/alto-costmapfilter+json",
      "capabilities" : {
        "cost-constraints" : true,
        "cost-type-names"  : [ "num-routingcost",
                               "num-throughputrating",
                               "string-servicestatus" ],
        "calendar-attributes" : [
          {"cost-type-names" : [ "num-routingcost",
                                 "num-throughputrating" ],
           "time-interval-size" : 7200,
           "number-of-intervals" : 12
          },
          {"cost-type-names" : [ "string-servicestatus" ],
           "time-interval-size" : 1800,
           "number-of-intervals" : 48
          }
        ]
      },
      "uses": [ "my-default-network-map" ]
    },
    "endpoint-cost-map-calendar" : {
      "uri" :
      "https://custom.alto.example.com/calendar/endpointcost/lookup",
      "media-type" : "application/alto-endpointcost+json",
      "accepts" : "application/alto-endpointcostparams+json",
      "capabilities" : {
        "cost-constraints" : true,
        "cost-type-names" : [ "num-routingcost",
                              "num-owdelay",
                              "num-throughputrating",
                              "string-servicestatus" ],
        "calendar-attributes" : [
          {"cost-type-names" : [ "num-routingcost" ],
           "time-interval-size" : 3600,
           "number-of-intervals" : 24
          },
          {"cost-type-names" : [ "num-owdelay" ],
           "time-interval-size" : 300,
           "number-of-intervals" : 12
          },
          {"cost-type-names" : [ "num-throughputrating" ],
           "time-interval-size" : 60,
           "number-of-intervals" : 60
          },
          {"cost-type-names" : [ "string-servicestatus" ],
           "time-interval-size" : 120,
           "number-of-intervals" : 30
          }
        ]
      }
    }
  }
}
</sourcecode>
        <t indent="0" pn="section-4.3-9">In this example IRD, for the Filtered Cost Map Service:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3-10">
          <li pn="section-4.3-10.1">the Calendar for "num-routingcost" and "num-throughputrating" is
	  an array of 12 values, each provided on a time interval lasting 7200
	  seconds (2 hours) and</li>
          <li pn="section-4.3-10.2">the Calendar for "string-servicestatus" is an array of 48
	  values, each provided on a time interval lasting 1800 seconds (30
	  minutes).</li>
        </ul>
        <t indent="0" pn="section-4.3-11">For the Endpoint Cost Service:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3-12">
          <li pn="section-4.3-12.1">the Calendar for "num-routingcost" is an array of 24 values, each
	  provided on a time interval lasting 3600 seconds (1 hour),</li>
          <li pn="section-4.3-12.2">the Calendar for "num-owdelay" is an array of 12 values, each
	  provided on a time interval lasting 300 seconds (5 minutes),</li>
          <li pn="section-4.3-12.3">the Calendar for "num-throughputrating" is an array of 60
	  values, each provided on a time interval lasting 60 seconds (1
	  minute), and</li>
          <li pn="section-4.3-12.4">the Calendar for "string-servicestatus" is an array of 30
	  values, each provided on a time interval lasting 120 seconds (2
	  minutes).</li>
        </ul>
        <t indent="0" pn="section-4.3-13">Note that in this example IRD, member "cost-constraints" is present
	with a value set to "true" in both information resources
	"filtered-cost-map-calendar" and
	"endpoint-cost-map-calendar". Although a Calendar-aware ALTO Server
	does not support constraints for the reasons explained in
	<xref target="sect-3.3" format="default" sectionFormat="of" derivedContent="Section 3.3"/>, it <bcp14>MUST</bcp14>
	support constraints on cost types that are not requested as Calendars
	but are requested as specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>.</t>
      </section>
    </section>
    <section anchor="sect-5" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-alto-calendar-specification-">ALTO Calendar Specification: Service Information Resources</name>
      <t indent="0" pn="section-5-1">This section documents extensions to two basic ALTO information
      resources (Filtered Cost Maps and Endpoint Cost Service) to provide
      calendared information services for them.</t>
      <t indent="0" pn="section-5-2">Both extensions return calendar start time (calendar-start-time, a
	point in time), which <bcp14>MUST</bcp14> be specified as an HTTP
	"Date" header field using the IMF-fixdate format specified in
	<xref target="RFC7231" sectionFormat="of" section="7.1.1.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7231#section-7.1.1.1" derivedContent="RFC7231"/>. Note that the
	IMF-fixdate format uses "GMT", not "UTC", to designate the time zone,
	as in this example:</t>
      <sourcecode markers="false" pn="section-5-3">
                 Date: Tue, 15 Nov 2019 08:12:31 GMT
</sourcecode>
      <section anchor="sect-5.1" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-calendar-extensions-for-fil">Calendar Extensions for Filtered Cost Maps (FCM)</name>
        <t indent="0" pn="section-5.1-1">A legacy ALTO Client requests and gets Filtered Cost Map responses,
	as specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
        <section anchor="sect-5.1.1" numbered="true" toc="include" removeInRFC="false" pn="section-5.1.1">
          <name slugifiedName="name-calendar-extensions-in-filt">Calendar Extensions in Filtered Cost Map Requests</name>
          <t indent="0" pn="section-5.1.1-1">The input parameters of a "legacy" request for a Filtered Cost
	  Map, defined by object ReqFilteredCostMap in <xref target="RFC7285" sectionFormat="of" section="11.3.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-11.3.2" derivedContent="RFC7285"/>, are augmented with one
	  additional member. The same augmentation applies to object
	  ReqFilteredCostMap defined in <xref target="RFC8189" sectionFormat="of" section="4.1.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8189#section-4.1.2" derivedContent="RFC8189"/>.</t>
          <t indent="0" pn="section-5.1.1-2">A Calendar-aware ALTO Client requesting a Calendar on a given
	  cost type for a Filtered Cost Map resource having Calendar
	  capabilities <bcp14>MUST</bcp14> add the following field to its
	  input parameters:</t>
          <sourcecode markers="false" pn="section-5.1.1-3">
                       JSONBoolean calendared&lt;1..*&gt;;
</sourcecode>
          <t indent="0" pn="section-5.1.1-4">This field is an array of 1 to N boolean values, where N is the
	  number of requested metrics. N is greater than 1 when the Client and
	  the Server also implement <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>.</t>
          <t indent="0" pn="section-5.1.1-5"> Each entry corresponds to the requested metric at the same array
	  position.  Each boolean value indicates whether or not the ALTO
	  Server should provide the values for this cost type as a Calendar.
	  The array <bcp14>MUST</bcp14> contain exactly N boolean values,
	  otherwise, the Server returns an error.</t>
          <t indent="0" pn="section-5.1.1-6">This field <bcp14>MUST NOT</bcp14> be included if no member
	  "calendar-attributes" is specified in this information resource.</t>
          <t indent="0" pn="section-5.1.1-7">If a value of field "calendared" is 'true' for a cost type name
	  for which no Calendar attributes have been specified, an ALTO
	  Server, whether it implements the extensions of this document or
	  only implements <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>,
	  <bcp14>MUST</bcp14> ignore it and return a response with a single
	  cost value, as specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
          <t indent="0" pn="section-5.1.1-8">If this field is not present, it <bcp14>MUST</bcp14> be assumed
	  to have only values equal to 'false'.</t>
          <t indent="0" pn="section-5.1.1-9">A Calendar-aware ALTO Client that supports requests for only one
	  cost type at a time and wants to request a Calendar
	  <bcp14>MUST</bcp14> provide an array of 1 element:</t>
          <sourcecode markers="false" pn="section-5.1.1-10">
                       "calendared" : [true],
</sourcecode>
          <t indent="0" pn="section-5.1.1-11">A Calendar-aware ALTO Client that supports requests for more than
	  one cost type at a time, as specified in <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>, <bcp14>MUST</bcp14> provide an array of N values
	  set to 'true' or 'false', depending whether it wants the applicable
	  cost type values as a single or calendared value.</t>
        </section>
        <section anchor="sect-5.1.2" numbered="true" toc="include" removeInRFC="false" pn="section-5.1.2">
          <name slugifiedName="name-calendar-extensions-in-filte">Calendar Extensions in Filtered Cost Map Responses</name>
          <t indent="0" pn="section-5.1.2-1">
   In a calendared ALTO Filtered Cost Map, a cost value between a source
   and a destination is a JSON array of JSON values.  An ALTO Calendar
   values array has a number of values equal to the value of member
   "number-of-intervals" of the Calendar attributes that are indicated
   in the IRD.  These attributes will be conveyed as metadata in the
   Filtered Cost Map response.  Each element of the array is valid for
   the time interval that matches its array position.</t>
          <t indent="0" pn="section-5.1.2-2">
   The FCM response conveys metadata, among which:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1.2-3">
            <li pn="section-5.1.2-3.1">some are not specific to Calendars and ensure compatibility
	    with <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/> and</li>
            <li pn="section-5.1.2-3.2">some are specific to Calendars.</li>
          </ul>
          <t indent="0" pn="section-5.1.2-4">The non-Calendar-specific "meta" fields of a calendared Filtered
	  Cost Map response <bcp14>MUST</bcp14> include at least:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1.2-5">
            <li pn="section-5.1.2-5.1">
              <t indent="0" pn="section-5.1.2-5.1.1">if the ALTO Client requests cost values for one cost type at
	      a time, only the "meta" fields specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> for these information
	      service responses:</t>
              <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1.2-5.1.2">
                <li pn="section-5.1.2-5.1.2.1">"dependent-vtags" and</li>
                <li pn="section-5.1.2-5.1.2.2">"cost-type" field.</li>
              </ul>
            </li>
            <li pn="section-5.1.2-5.2">
              <t indent="0" pn="section-5.1.2-5.2.1">if the ALTO Client implements the Multi-Cost ALTO extension
	      specified in <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/> and
	      requests cost values for several cost types at a time, the
	      "meta" fields specified in <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/> for these information service responses:</t>
              <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1.2-5.2.2">
                <li pn="section-5.1.2-5.2.2.1">"dependent-vtags",</li>
                <li pn="section-5.1.2-5.2.2.2">"cost-type" field with value set to '{}', for backwards
		compatibility with <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>,
		and</li>
                <li pn="section-5.1.2-5.2.2.3">"multi-cost-types" field.</li>
              </ul>
            </li>
          </ul>
          <t indent="0" pn="section-5.1.2-6">If the Client request does not provide member "calendared" or if
	  it provides it with a value equal to 'false' for all the requested
	  cost types, then the ALTO Server response is exactly as specified in
	  <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>.</t>
          <t indent="0" pn="section-5.1.2-7">
   If the value of member "calendared" is equal to 'false' for a given
   requested cost type, the ALTO Server <bcp14>MUST</bcp14> return, for this cost type,
   a single cost value as specified in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
          <t indent="0" pn="section-5.1.2-8">
   If the value of member "calendared" is equal to 'true' for a given
   requested cost type, the ALTO Server returns, for this cost type, a
   cost value Calendar, as specified above in this section.  In addition
   to the above cited non-Calendar-specific "meta" members, the Server
   <bcp14>MUST</bcp14> provide a Calendar-specific metadata field.</t>
          <t indent="0" pn="section-5.1.2-9">
   The Calendar-specific "meta" field that a calendared Filtered Cost
   Map response <bcp14>MUST</bcp14> include is a member called "calendar-response-attributes", 
   which describes properties of the Calendar and where:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.1.2-10">
            <li pn="section-5.1.2-10.1">member "calendar-response-attributes" is an array of one or
	    more objects of type "CalendarResponseAttributes",</li>
            <li pn="section-5.1.2-10.2">each "CalendarResponseAttributes" object in the array is specified
      for one or more cost types for which the value of member
      "calendared", in object ReqFilteredCostMap provided in the Client request,
      is equal to 'true' and for which a Calendar is
      provided for the requested information resource, and</li>
            <li pn="section-5.1.2-10.3">the "CalendarResponseAttributes" object that applies to a cost
	    type name has a corresponding "CalendarAttributes" object defined
	    for this cost type name in the IRD capabilities of the requested
	    information resource. This object is the entry in the
	    "calendar-attributes" array member of the IRD resource entry,
	    which includes the name of the requested cost type. This
	    corresponding "CalendarAttributes" object has the same values as
	    object "CalendarResponseAttributes" for members
	    "time-interval-size" and "number-of-intervals". The members of the
	    "CalendarResponseAttributes" object include all the members of the
	    corresponding "CalendarAttributes" object.</li>
          </ul>
          <t indent="0" pn="section-5.1.2-11">
   The format of member "CalendarResponseAttributes is defined as follows:</t>
          <t indent="0" pn="section-5.1.2-12">
   CalendarResponseAttributes calendar-response-attributes &lt;1..*&gt;;</t>
          <sourcecode markers="false" pn="section-5.1.2-13">
object{
  [JSONString cost-type-names &lt;1..*&gt;;]
  JSONString calendar-start-time;
  JSONNumber time-interval-size;
  JSONNumber number-of-intervals;
  [JSONNumber repeated;]
} CalendarResponseAttributes;

Object CalendarResponseAttributes has the following attributes:
</sourcecode>
          <dl newline="true" spacing="normal" indent="3" pn="section-5.1.2-14">
            <dt pn="section-5.1.2-14.1">"cost-type-names":</dt>
            <dd pn="section-5.1.2-14.2">An array of one or more cost type names to which the value
	    of the other members of CalendarResponseAttributes apply and for
	    which a Calendar has been requested. The value of this member is a
	    subset of the "cost-type-names" member of the abovementioned
	    corresponding "CalendarAttributes" object in the
	    "calendar-attributes" array member in the IRD. This member
	    <bcp14>MUST</bcp14> be present when Cost Calendars are provided
	    for more than one cost type.</dd>
            <dt pn="section-5.1.2-14.3">"calendar-start-time":</dt>
            <dd pn="section-5.1.2-14.4">Indicates the date at which the first value of the Calendar
	    applies. The value is a string that, as specified in <xref target="sect-5" format="default" sectionFormat="of" derivedContent="Section 5"/>, contains an HTTP "Date" header
	    field using the IMF-fixdate format specified in <xref target="RFC7231" sectionFormat="of" section="7.1.1.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7231#section-7.1.1.1" derivedContent="RFC7231"/>.  The
	    value provided for attribute "calendar-start-time" <bcp14>SHOULD NOT</bcp14> be later than the request date.</dd>
            <dt pn="section-5.1.2-14.5">"time-interval-size":</dt>
            <dd pn="section-5.1.2-14.6">As specified in <xref target="sect-4.1" format="default" sectionFormat="of" derivedContent="Section 4.1"/> and
	    with the same value as in the abovementioned corresponding
	    "CalendarAttributes" object.</dd>
            <dt pn="section-5.1.2-14.7">"number-of-intervals":</dt>
            <dd pn="section-5.1.2-14.8">As specified in <xref target="sect-4.1" format="default" sectionFormat="of" derivedContent="Section 4.1"/> and
	    with the same value as in the abovementioned corresponding
	    "CalendarAttributes" object.</dd>
            <dt pn="section-5.1.2-14.9">"repeated":</dt>
            <dd pn="section-5.1.2-14.10">An optional field provided for Calendars.  It is an integer
	    N greater or equal to '1' that indicates how many iterations of
	    the Calendar value array starting at the date indicated by
	    "calendar-start-time" have the same values.  The number N includes
	    the iteration provided in the returned response.</dd>
          </dl>
          <t indent="0" pn="section-5.1.2-15">For example, suppose the "calendar-start-time" member has value
	  "Mon, 30 Jun 2019 00:00:00 GMT", the "time-interval-size" member has
	  value '3600', the "number-of-intervals" member has value '24', and
	  the value of member "repeated" is equal to '4'.  This means that the
	  Calendar values are the same on Monday, Tuesday, Wednesday, and
	  Thursday on a period of 24 hours starting at 00:00:00 GMT.  The ALTO
	  Client thus may use the same Calendar for the next 4 days starting
	  at "calendar-start-time" and will only need to request a new one for
	  Friday, July 4th at 00:00:00 GMT.</t>
          <t indent="0" pn="section-5.1.2-16">Attribute "repeated" may take a very high value if a Calendar
	  represents a cyclic value pattern that the Server considers valid
	  for a long period and hence will only update once this period has
	  elapsed or if an unexpected event occurs on the network.  In the
	  latter case, the Client will be notified if it uses the "ALTO
	  Incremental Updates Using Server-Sent Events (SSE)" Service,
	  specified in <xref target="RFC8895" format="default" sectionFormat="of" derivedContent="RFC8895"/>.  To this
	  end, it is <bcp14>RECOMMENDED</bcp14> that ALTO Servers providing
	  ALTO Calendars also provide the "ALTO Incremental Updates Using
	  Server-Sent Events (SSE)" Service, which is specified in <xref target="RFC8895" format="default" sectionFormat="of" derivedContent="RFC8895"/>.  Likewise, ALTO Clients capable
	  of using ALTO Calendars <bcp14>SHOULD</bcp14> also use the SSE
	  Service.  See also discussion in <xref target="sect-8" format="default" sectionFormat="of" derivedContent="Section 8"/> "Operational Considerations".</t>
        </section>
        <section anchor="sect-5.1.3" numbered="true" toc="include" removeInRFC="false" pn="section-5.1.3">
          <name slugifiedName="name-use-case-and-example-fcm-wi">Use Case and Example: FCM with a Bandwidth Calendar</name>
          <t indent="0" pn="section-5.1.3-1">An example of non-real-time information that can be provisioned
	  in a Calendar is the expected path throughput.  While the
	  transmission rate can be measured in real time by end systems, the
	  operator of a data center is in the position of formulating
	  preferences for given paths at given time periods to avoid traffic
	  peaks due to diurnal usage patterns.  In this example, we assume
	  that an ALTO Client requests a Calendar of network-provider-defined
	  throughput ratings as specified in the IRD to schedule its bulk
	  data transfers as described in the use cases.</t>
          <t indent="0" pn="section-5.1.3-2">In the example IRD, Calendars for cost type name
	  "num-throughputrating" are available for the information resources
	  "filtered-cost-calendar-map" and "endpoint-cost-map-calendar".  The
	  ALTO Client requests a Calendar for "num-throughputrating" via a
	  POST request for a Filtered Cost Map.</t>
          <t indent="0" pn="section-5.1.3-3">
   We suppose in the present example that the ALTO Client sends its
   request on Tuesday, July 1st 2019 at 13:15.  The Server returns
   Calendars with arrays of 12 numbers for each source and destination
   pair.  The values for metric "throughputrating", in this example, are
   assumed to be encoded in 2 digits.</t>
          <sourcecode markers="false" pn="section-5.1.3-4">
  POST /calendar/costmap/filtered HTTP/1.1
  Host: custom.alto.example.com
  Content-Length: 217
  Content-Type: application/alto-costmapfilter+json
  Accept: application/alto-costmap+json,application/alto-error+json

  {
    "cost-type" : {"cost-mode" : "numerical",
                   "cost-metric" : "throughputrating"},
    "calendared" : [true],
    "pids" : {
      "srcs" : [ "PID1", "PID2" ],
      "dsts" : [ "PID1", "PID2", "PID3" ]
    }
  }

  HTTP/1.1 200 OK
  Content-Length: 1043
  Content-Type: application/alto-costmap+json

  {
    "meta" : {
      "dependent-vtags" : [
        {"resource-id": "my-default-network-map",
         "tag": "3ee2cb7e8d63d9fab71b9b34cbf764436315542e"
        }
      ],
      "cost-type" : {"cost-mode" : "numerical",
                     "cost-metric" : "throughputrating"},
      "calendar-response-attributes" : [
        {"calendar-start-time" : "Tue, 1 Jul 2019 13:00:00 GMT",
         "time-interval-size" : 7200,
         "number-of-intervals" : 12}
      ]
    },
    "cost-map" : {
      "PID1": { "PID1": [ 1, 12, 14, 18, 14, 14,
                         14, 18, 19, 20, 11, 12],
                "PID2": [13,  4, 15, 16, 17, 18,
                         19, 20, 11, 12, 13, 14],
                "PID3": [20, 20, 18, 14, 12, 12,
                         14, 14, 12, 12, 14, 16] },
      "PID2": { "PID1": [17, 18, 19, 10, 11, 12,
                         13, 14, 15, 16, 17, 18],
                "PID2": [20, 20, 18, 16, 14, 14,
                         14, 16, 16, 16, 14, 16],
                "PID3": [20, 20, 18, 14, 12, 12,
                         14, 14, 12, 12, 14, 16] }
    }
  }
</sourcecode>
        </section>
      </section>
      <section anchor="sect-5.2" numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-calendar-extensions-in-the-">Calendar Extensions in the Endpoint Cost Service</name>
        <t indent="0" pn="section-5.2-1">This document extends the Endpoint Cost Service, as defined in
	<xref target="RFC7285" sectionFormat="of" section="11.5.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-11.5.1" derivedContent="RFC7285"/>, by adding new
	input parameters and capabilities and by returning JSONArrays instead
	of JSONNumbers as the cost values. The media type (<xref target="RFC7285" sectionFormat="of" section="11.5.1.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-11.5.1.1" derivedContent="RFC7285"/>) and HTTP
	method (<xref target="RFC7285" sectionFormat="of" section="11.5.1.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-11.5.1.2" derivedContent="RFC7285"/>) are unchanged.</t>
        <section anchor="sect-5.2.1" numbered="true" toc="include" removeInRFC="false" pn="section-5.2.1">
          <name slugifiedName="name-calendar-specific-input-in-">Calendar-Specific Input in Endpoint Cost Requests</name>
          <t indent="0" pn="section-5.2.1-1">The extensions to the requests for calendared Endpoint Cost Maps
	  are the same as for the Filtered Cost Map Service, specified in
	  <xref target="sect-5.1.1" format="default" sectionFormat="of" derivedContent="Section 5.1.1"/> of this
	  document. Likewise, the rules defined around the extensions to ECM
	  requests are the same as those defined in <xref target="sect-5.1.1" format="default" sectionFormat="of" derivedContent="Section 5.1.1"/> for FCM requests. </t>
          <t indent="0" pn="section-5.2.1-2">
   The ReqEndpointCostMap object for a calendared ECM request will have
   the following format:</t>
          <sourcecode markers="false" pn="section-5.2.1-3">
object {
  [CostType cost-type;]
  [CostType multi-cost-types&lt;1..*&gt;;]
  [JSONBoolean calendared&lt;1..*&gt;;]
  EndpointFilter endpoints;
} ReqEndpointCostMap;

object {
  [TypedEndpointAddr srcs&lt;0..*&gt;;]
  [TypedEndpointAddr dsts&lt;0..*&gt;;]
} EndpointFilter;
</sourcecode>
          <t indent="0" pn="section-5.2.1-4">Member "cost-type" is optional because, in the ReqEndpointCostMap
	  object definition of this document, it is jointly present with
	  member "multi-cost-types" to ensure compatibility with <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>. In <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>, members "cost-type" and "multi-cost-types" are
	  both optional and have to obey the rule specified in <xref target="RFC8189" sectionFormat="of" section="4.1.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8189#section-4.1.2" derivedContent="RFC8189"/> stating that
	  "the Client <bcp14>MUST</bcp14> specify either "cost-type" or
	  "multi-cost-types" but <bcp14>MUST NOT</bcp14> specify both".</t>
          <t indent="0" pn="section-5.2.1-5">The interpretation of member "calendared" is the same as for the
	  ReqFilteredCostMap object defined in <xref target="sect-5.1.1" format="default" sectionFormat="of" derivedContent="Section 5.1.1"/> of this document. The interpretation of the other
	  members is the same as for object ReqEndpointCostMap defined in
	  <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>. The type TypedEndpointAddr is defined in <xref target="RFC7285" sectionFormat="of" section="10.4.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-10.4.1" derivedContent="RFC7285"/>.</t>
          <t indent="0" pn="section-5.2.1-6">For the reasons explained in <xref target="sect-3.3" format="default" sectionFormat="of" derivedContent="Section 3.3"/>, a Calendar-aware ALTO Server does not support
	  constraints. Therefore, member "[constraints]" is not present in the
	  ReqEndpointCostMap object, and member "constraints" <bcp14>MUST NOT</bcp14> be present in the input parameters of a request for an
	  Endpoint Cost Calendar. If this member is present, the Server
	  <bcp14>MUST</bcp14> ignore it.</t>
        </section>
        <section anchor="sect-5.2.2" numbered="true" toc="include" removeInRFC="false" pn="section-5.2.2">
          <name slugifiedName="name-calendar-attributes-in-the-e">Calendar Attributes in the Endpoint Cost Response</name>
          <t indent="0" pn="section-5.2.2-1">The "meta" field of a calendared Endpoint Cost response
	  <bcp14>MUST</bcp14> include at least:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2.2-2">
            <li pn="section-5.2.2-2.1">
              <t indent="0" pn="section-5.2.2-2.1.1">if the ALTO Client supports cost values for one cost type at
	      a time only, the "meta" fields specified in <xref target="RFC7285" sectionFormat="of" section="11.5.1.6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-11.5.1.6" derivedContent="RFC7285"/> for the
	      Endpoint Cost response:</t>
              <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2.2-2.1.2">
                <li pn="section-5.2.2-2.1.2.1">"cost-type" field.</li>
              </ul>
            </li>
            <li pn="section-5.2.2-2.2">
              <t indent="0" pn="section-5.2.2-2.2.1">if the ALTO Client supports cost values for several cost
	      types at a time, as specified in <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>, the "meta" fields specified in <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/> for the Endpoint Cost
	      response:</t>
              <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2.2-2.2.2">
                <li pn="section-5.2.2-2.2.2.1">"cost-type" field with value set to '{}', for backwards
		compatibility with <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</li>
                <li pn="section-5.2.2-2.2.2.2">"multi-cost-types" field.</li>
              </ul>
            </li>
          </ul>
          <t indent="0" pn="section-5.2.2-3">If the Client request does not provide member "calendared" or if
	  it provides it with a value equal to 'false', for all the requested
	  cost types, then the ALTO Server response is exactly as specified in
	  <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>.</t>
          <t indent="0" pn="section-5.2.2-4">If the ALTO Client provides member "calendared" in the input
	  parameters with a value equal to 'true' for given requested cost
	  types, the "meta" member of a calendared Endpoint Cost response
	  <bcp14>MUST</bcp14> include, for these cost types, an additional
	  member "calendar-response-attributes", the contents of which obey
	  the same rules as for the Filtered Cost Map Service, specified in
	  <xref target="sect-5.1.2" format="default" sectionFormat="of" derivedContent="Section 5.1.2"/>.  The Server response
	  is thus changed as follows, with respect to <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/> and <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/>:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2.2-5">
            <li pn="section-5.2.2-5.1">the "meta" member has one additional field
	    "CalendarResponseAttributes", as specified for the Filtered Cost
	    Map Service, and</li>
            <li pn="section-5.2.2-5.2">the calendared costs are JSONArrays instead of the JSONNumbers
	    format used by legacy ALTO implementations.  All arrays have a
	    number of values equal to 'number-of-intervals'. Each value
	    corresponds to the cost in that interval.</li>
          </ul>
          <t indent="0" pn="section-5.2.2-6">If the value of member "calendared" is equal to 'false' for a
	  given requested cost type, the ALTO Server <bcp14>MUST</bcp14>
	  return, for this cost type, a single cost value as specified in
	  <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
        </section>
        <section anchor="sect-5.2.3" numbered="true" toc="include" removeInRFC="false" pn="section-5.2.3">
          <name slugifiedName="name-use-case-and-example-ecs-wi">Use Case and Example: ECS with a routingcost Calendar</name>
          <t indent="0" pn="section-5.2.3-1">Let us assume an Application Client is located in an end system
	  with limited resources and has access to the network that is either
	  intermittent or provides an acceptable quality in limited but
	  predictable time periods.  Therefore, it needs to schedule both its
	  resource-greedy networking activities and its ALTO transactions.</t>
          <t indent="0" pn="section-5.2.3-2">The Application Client has the choice to trade content or
	  resources with a set of endpoints and needs to decide with which one
	  it will connect and at what time.  For instance, the endpoints are
	  spread in different time zones or have intermittent access.  In
	  this example, the 'routingcost' is assumed to be time-varying, with
	  values provided as ALTO Calendars.</t>
          <t indent="0" pn="section-5.2.3-3">The ALTO Client associated with the Application Client queries an
	  ALTO Calendar on 'routingcost' and will get the Calendar covering
	  the 24-hour time period "containing" the date and time of the ALTO
	  Client request.</t>
          <t indent="0" pn="section-5.2.3-4">
   For cost type "num-routingcost", the solicited ALTO Server has
   defined 3 different daily patterns, each represented by a Calendar to
   cover the week of Monday, June 30th at 00:00 to Sunday, July 6th 23:59:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2.3-5">
            <li pn="section-5.2.3-5.1">C1 for Monday, Tuesday, Wednesday, and Thursday (weekdays)</li>
            <li pn="section-5.2.3-5.2">C2 for Saturday and Sunday (weekends)</li>
            <li pn="section-5.2.3-5.3">C3 for Friday (maintenance outage on July 4, 2019 from
	    02:00:00 GMT to 04:00:00 GMT or a big holiday that
	    is widely celebrated and generates a large number of connections).</li>
          </ul>
          <t indent="0" pn="section-5.2.3-6">In the following example, the ALTO Client sends its request on
	  Tuesday, July 1st 2019 at 13:15.</t>
          <t indent="0" pn="section-5.2.3-7">The "routingcost" values are assumed to be encoded in 3
	  digits.</t>
          <sourcecode markers="false" pn="section-5.2.3-8">
POST /calendar/endpointcost/lookup HTTP/1.1
Host: custom.alto.example.com
Content-Length: 304
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,
        application/alto-error+json

{
  "cost-type" : {"cost-mode" : "numerical",
                 "cost-metric" : "routingcost"},
  "calendared" : [true],
  "endpoints" : {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [
      "ipv4:192.0.2.89",
      "ipv4:198.51.100.34",
      "ipv4:203.0.113.45",
      "ipv6:2001:db8::10"
    ]
  }
}

HTTP/1.1 200 OK

Content-Length: 1351
Content-Type: application/alto-endpointcost+json

{
  "meta" : {
    "cost-type" : {"cost-mode" : "numerical",
                   "cost-metric" : "routingcost"},
    "calendar-response-attributes" : [
      {"calendar-start-time" : "Mon, 30 Jun 2019 00:00:00 GMT",
       "time-interval-size" : 3600,
       "number-of-intervals" : 24,
       "repeated": 4
      }
    ]
  },
  "endpoint-cost-map" : {
    "ipv4:192.0.2.2": {
      "ipv4:192.0.2.89"    : [100, 100, 100, 100, 100, 150,
                              200, 300, 300, 300, 300, 250,
                              250, 300, 300, 300, 300, 300,
                              400, 250, 250, 200, 150, 150],
      "ipv4:198.51.100.34" : [ 80,  80,  80,  80, 150, 150,
                              250, 400, 400, 450, 400, 200,
                              200, 350, 400, 400, 400, 350,
                              500, 200, 200, 200, 100, 100],
      "ipv4:203.0.113.45"  : [300, 400, 250, 250, 200, 150,
                              150, 100, 100, 100, 100, 100,
                              100, 100, 100, 100, 100, 150,
                              200, 300, 300, 300, 300, 250],
      "ipv6:2001:db8::10"  : [200, 250, 300, 300, 300, 300,
                              250, 300, 300, 300, 300, 350,
                              300, 400, 250, 150, 100, 100,
                              100, 150, 200, 250, 250, 300]
    }
  }
}
</sourcecode>
          <t indent="0" pn="section-5.2.3-9">When the Client gets the Calendar for "routingcost", it sees that
	  the "calendar-start-time" is Monday at 00h00 GMT and member
	  "repeated" is equal to '4'.  It understands that the provided values
	  are valid until Thursday and will only need to get a Calendar update
	  on Friday.</t>
        </section>
        <section anchor="sect-5.2.4" numbered="true" toc="include" removeInRFC="false" pn="section-5.2.4">
          <name slugifiedName="name-use-case-and-example-ecs-wit">Use Case and Example: ECS with a Multi-cost Calendar for
	  routingcost and owdelay</name>
          <t indent="0" pn="section-5.2.4-1">In this example, it is assumed that the ALTO Server implements
	  multi-cost capabilities, as specified in <xref target="RFC8189" format="default" sectionFormat="of" derivedContent="RFC8189"/> . That is, an ALTO Client can request and receive
	  values for several cost types in one single transaction.  An
	  illustrating use case is a path selection done on the basis of 2
	  metrics: routingcost and owdelay.</t>
          <t indent="0" pn="section-5.2.4-2">As in the previous example, the IRD indicates that the ALTO
	  Server provides "routingcost" Calendars in terms of 24 time
	  intervals of 1 hour (3600 seconds) each.</t>
          <t indent="0" pn="section-5.2.4-3">For metric "owdelay", the IRD indicates that the ALTO Server
	  provides Calendars in terms of 12 time interval values lasting 5
	  minutes (300 seconds) each.</t>
          <t indent="0" pn="section-5.2.4-4">In the following example transaction, the ALTO Client sends its
	  request on Tuesday, July 1st 2019 at 13:15.</t>
          <t indent="0" pn="section-5.2.4-5">
   This example assumes that the values of metric "owdelay" and
   "routingcost" are encoded in 3 digits.</t>
          <sourcecode markers="false" pn="section-5.2.4-6">
POST calendar/endpointcost/lookup HTTP/1.1
Host: custom.alto.example.com
Content-Length: 390
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,
        application/alto-error+json

{
  "cost-type" : {},
  "multi-cost-types" : [
    {"cost-mode" : "numerical", "cost-metric" : "routingcost"},
    {"cost-mode" : "numerical", "cost-metric" : "owdelay"}
  ],
  "calendared" : [true, true],
  "endpoints" : {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [
      "ipv4:192.0.2.89",
      "ipv4:198.51.100.34",
      "ipv4:203.0.113.45",
      "ipv6:2001:db8::10"
    ]
  }
}

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

{
  "meta" : {
    "multi-cost-types" : [
      {"cost-mode" : "numerical", "cost-metric" : "routingcost"},
      {"cost-mode" : "numerical", "cost-metric" : "owdelay"}
    ],
    "calendar-response-attributes" : [
      {"cost-type-names" : [ "num-routingcost" ],
         "calendar-start-time" : "Mon, 30 Jun 2019 00:00:00 GMT",
         "time-interval-size" : 3600,
         "number-of-intervals" : 24,
         "repeated": 4 },
      {"cost-type-names" : [ "num-owdelay" ],
         "calendar-start-time" : "Tue, 1 Jul 2019 13:00:00 GMT",
         "time-interval-size" : 300,
         "number-of-intervals" : 12}
    ]
  },
  "endpoint-cost-map" : {
    "ipv4:192.0.2.2": {
      "ipv4:192.0.2.89"    : [[100, 100, 100, 100, 100, 150,
                               200, 300, 300, 300, 300, 250,
                               250, 300, 300, 300, 300, 300,
                               400, 250, 250, 200, 150, 150],
                              [ 20, 400,  20,  80,  80,  90,
                               100,  90,  60,  40,  30,  20]],
      "ipv4:198.51.100.34" : [[ 80,  80,  80,  80, 150, 150,
                               250, 400, 400, 450, 400, 200,
                               200, 350, 400, 400, 400, 350,
                               500, 200, 200, 200, 100, 100],
                              [ 20,  20,  50,  30,  30,  30,
                                30,  40,  40,  30,  20,  20]],
      "ipv4:203.0.113.45"  : [[300, 400, 250, 250, 200, 150,
                               150, 100, 100, 100, 100, 100,
                               100, 100, 100, 100, 100, 150,
                               200, 300, 300, 300, 300, 250],
                              [100,  90,  80,  60,  50,  50,
                                40,  40,  60,  90, 100,  80]],
      "ipv6:2001:db8::10"  : [[200, 250, 300, 300, 300, 300,
                               250, 300, 300, 300, 300, 350,
                               300, 400, 250, 150, 100, 100,
                               100, 150, 200, 250, 250, 300],
                              [ 40,  40,  40,  40,  50,  50,
                                50,  20,  10,  15,  30,  40]]
    }
  }
}
</sourcecode>
          <t indent="0" pn="section-5.2.4-7">When receiving the response, the Client sees that the Calendar
	  values for metric "routingcost" are repeated for 4 iterations.
	  Therefore, in its next requests until the "routingcost" Calendar is
	  expected to change, the Client will only need to request a Calendar
	  for "owdelay".</t>
          <t indent="0" pn="section-5.2.4-8">
   Without the ALTO Calendar extensions, the ALTO Client would have no
   clue on the dynamicity of the metric value change and would spend
   needless time requesting values at an inappropriate pace.  In
   addition, without the Multi-Cost ALTO capabilities, the ALTO Client
   would duplicate this waste of time as it would need to send one
   request per cost metric.</t>
        </section>
      </section>
    </section>
    <section anchor="sect-6" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">This document has no IANA actions.</t>
    </section>
    <section anchor="sect-7" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-7-1">As an extension of the base ALTO protocol <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>, this document fits into the architecture of the base
      protocol and hence the security considerations (<xref target="RFC7285" sectionFormat="of" section="15" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-15" derivedContent="RFC7285"/>) fully apply when this extension is
      provided by an ALTO Server.  For example, the same authenticity and
      integrity considerations (<xref target="RFC7285" sectionFormat="of" section="15.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-15.1" derivedContent="RFC7285"/>) still fully apply; the same considerations for the
      privacy of ALTO users (<xref target="RFC7285" sectionFormat="of" section="15.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-15.4" derivedContent="RFC7285"/>) also still fully apply.</t>
      <t indent="0" pn="section-7-2">
   The calendaring information provided by this extension requires
   additional considerations on three security considerations discussed
   in <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>: potential undesirable guidance to Clients
   (<xref target="RFC7285" sectionFormat="of" section="15.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-15.2" derivedContent="RFC7285"/>), confidentiality of ALTO information
   (<xref target="RFC7285" sectionFormat="of" section="15.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-15.3" derivedContent="RFC7285"/>), and
   availability of ALTO (<xref target="RFC7285" sectionFormat="of" section="15.5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-15.5" derivedContent="RFC7285"/>).  For example, by providing network information in the
   future in a Calendar, this extension may improve availability of
   ALTO when the ALTO Server is unavailable but related information is
   already provided in the Calendar.</t>
      <t indent="0" pn="section-7-3">
   For confidentiality of ALTO information, an operator should be
   cognizant that this extension may introduce a new risk, a malicious ALTO
   Client may get information for future events that are scheduled
   through Calendaring.  Possessing such information, the malicious Client may use
   it to generate massive connections to the network at times where its load
   is expected to be high.</t>
      <t indent="0" pn="section-7-4">To mitigate this risk, the operator should address the risk of ALTO
      information being leaked to malicious Clients or third parties. As
      specified in "Protection Strategies" (<xref target="RFC7285" sectionFormat="of" section="15.3.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-15.3.2" derivedContent="RFC7285"/>), the ALTO Server should 
      authenticate ALTO Clients and use the Transport Layer Security (TLS)
      protocol so that man-in-the-middle (MITM) attacks to intercept an ALTO
      Calendar are not possible. "Authentication and Encryption" (<xref target="RFC7285" sectionFormat="of" section="8.3.5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-8.3.5" derivedContent="RFC7285"/>) ensures the availability of such a
      solution. It specifies that "ALTO
      Server implementations as well as ALTO Client implementations
      <bcp14>MUST</bcp14> support the "https" URI scheme of <xref target="RFC2818" format="default" sectionFormat="of" derivedContent="RFC2818"/> and Transport Layer Security (TLS)
      of <xref target="RFC5246" format="default" sectionFormat="of" derivedContent="RFC5246"/>".</t>
      <t indent="0" pn="section-7-5">Section <xref target="RFC8446" sectionFormat="bare" section="1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-1" derivedContent="RFC8446"/> of
      TLS 1.3 <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> states: "While TLS 1.3 is not directly compatible with previous
      versions, all versions of TLS incorporate a versioning mechanism which
      allows Clients and Servers to interoperably negotiate a common version
      if one is supported by both peers". ALTO Clients and Servers
      <bcp14>SHOULD</bcp14> support both TLS 1.3 <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446"/> and TLS 1.2 <xref target="RFC5246" format="default" sectionFormat="of" derivedContent="RFC5246"/>
      and <bcp14>MAY</bcp14> support and use newer versions of TLS as long as
      the negotiation process succeeds.</t>
      <t indent="0" pn="section-7-6">The operator should be cognizant that the preceding mechanisms do not
      address all security risks. In particular, they will not help in the
      case of "malicious Clients" possessing valid authentication
      credentials. The threat here is that legitimate Clients have become
      subverted by an attacker and are now 'bots' being asked to participate
      in a DDoS attack. The Calendar information now becomes valuable in
      knowing exactly when to perpetrate a DDoS attack. A mechanism, such as a
      monitoring system that detects abnormal behaviors, may still be needed.</t>
      <t indent="0" pn="section-7-7">To avoid malicious or erroneous guidance from ALTO information, an
      ALTO Client should be cognizant that using calendaring information can
      have risks: (1) Calendar values, especially in "repeated" Calendars, may
      be only statistical and (2) future events may change. Hence, a more
      robust ALTO Client should adapt and extend protection strategies
      specified in <xref target="RFC7285" sectionFormat="of" section="15.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7285#section-15.2" derivedContent="RFC7285"/>.
      For example, to be notified immediately when a particular ALTO value
      that the Client depends on changes, it is <bcp14>RECOMMENDED</bcp14>
      that both the ALTO Client and ALTO Server using this extension support
      "Application-Layer Traffic
              Optimization (ALTO) Incremental Updates Using Server-Sent
              Events (SSE)" <xref target="RFC8895" format="default" sectionFormat="of" derivedContent="RFC8895"/>.</t>
      <t indent="0" pn="section-7-8">Another risk of erroneous guidance appears when the Server exposes an
      occurrence of a same cost type name in different elements of the
      Calendar objects array associated to an information resource. In this
      case, there is no way for the Client to figure out which Calendar object
      in the array is valid. The specification in this document recommends, in
      this case, that the Client uses the first encountered Calendar object
      occurrence containing the cost type name. However, the Client may want
      to avoid the risks of erroneous guidance associated to the use of
      potentially invalid Calendar values. To this end, as an alternative to
      the recommendation in this document, the Client <bcp14>MAY</bcp14>
      ignore the totality of occurrences of CalendarAttributes objects
      containing the cost type name and query this cost type using <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>.</t>
    </section>
    <section anchor="sect-8" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-operational-considerations">Operational Considerations</name>
      <t indent="0" pn="section-8-1">It is important that both the operator of the network and the
      operator of the applications consider both the feedback aspect and the
      prediction-based (uncertainty) aspect of using the Cost Calendar.</t>
      <t indent="0" pn="section-8-2">First, consider the feedback aspect and consider the Cost Calendar as
      a traffic-aware map service (e.g., Google Maps). Using the service
      without considering its own effect, a large fleet can turn a
      not-congested road into a congested one; a large number of individual
      cars each choosing a road with light traffic ("cheap link") can also
      result in congestion or result in a less-optimal global outcome (e.g.,
      the Braess' Paradox <xref target="BRAESS_PARADOX" format="default" sectionFormat="of" derivedContent="BRAESS_PARADOX"/>).</t>
      <t indent="0" pn="section-8-3">Next, consider the prediction aspect. Conveying ALTO Cost Calendars
      tends to reduce the on-the-wire data exchange volume compared to
      multiple single-cost ALTO transactions. An application using Calendars
      has a set of time-dependent values upon which it can plan its
      connections in advance with no need for the ALTO Client to query
      information at each time. Additionally, the Calendar response attribute
      "repeated", when provided, saves additional data exchanges in that it
      indicates that the ALTO Client does not need to query Calendars during a
      period indicated by this attribute. The preceding is true only when
      "accidents" do not happen.</t>
      <t indent="0" pn="section-8-4">Although individual network operators and application operators can
      choose their own approaches to address the aforementioned issues, this
      document recommends the following considerations. First, a typical
      approach to reducing instability and handling uncertainty is to ensure
      timely update of information. The SSE Service, as discussed in <xref target="sect-7" format="default" sectionFormat="of" derivedContent="Section 7"/>, can handle updates if supported by
      both the Server and the Client. Second, when a network operator updates
      the Cost Calendar and when an application reacts to the update, they
      should consider the feedback effects. This is the best approach even
      though there is theoretical analysis <xref target="SELFISH_RTG_2002" format="default" sectionFormat="of" derivedContent="SELFISH_RTG_2002"/> and
      Internet-based evaluation <xref target="SELFISH_RTG_2003" format="default" sectionFormat="of" derivedContent="SELFISH_RTG_2003"/> showing that uncoordinated behaviors do not always
      cause substantial suboptimal results.</t>
      <t indent="0" pn="section-8-5">
         High-resolution intervals may be needed when values change, sometimes
         during very small time intervals but in a significant manner.  A way
         to avoid conveying too many entries is to leverage on the "repeated"
         feature.  A Server can smartly set the Calendar start time and number
         of intervals so as to declare them "repeated" for a large number of
         periods until the Calendar values change and are conveyed to
         requesting Clients.
      </t>
      <t indent="0" pn="section-8-6">The newer JSON Data Interchange Format specification <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/> used in ALTO Calendars replaces the
      older one <xref target="RFC7159" format="default" sectionFormat="of" derivedContent="RFC7159"/> used in the base
      ALTO protocol <xref target="RFC7285" format="default" sectionFormat="of" derivedContent="RFC7285"/>. The newer JSON
      mandates UTF-8 text encoding to improve interoperability. Therefore,
      ALTO Clients and Servers implementations using UTF-{16,32} need to be
      cognizant of the subsequent interoperability risks and
      <bcp14>MUST</bcp14> switch to UTF-8 encoding if they want to
      interoperate with Calendar-aware Servers and Clients.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-alto-performance-metrics" to="ALTO_METRICS"/>
    <references pn="section-9">
      <name slugifiedName="name-references">References</name>
      <references pn="section-9.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="IEEE.754.2019" quoteTitle="true" target="https://doi.org/10.1109/IEEESTD.2019.8766229" derivedAnchor="IEEE.754.2019">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization showOnFrontPage="true">IEEE</organization>
            </author>
            <date month="June" year="2019"/>
          </front>
          <seriesInfo name="IEEE" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">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.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC5246" target="https://www.rfc-editor.org/info/rfc5246" quoteTitle="true" derivedAnchor="RFC5246">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
            <author initials="T." surname="Dierks" fullname="T. Dierks">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="August"/>
            <abstract>
              <t indent="0">This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5246"/>
          <seriesInfo name="DOI" value="10.17487/RFC5246"/>
        </reference>
        <reference anchor="RFC7231" target="https://www.rfc-editor.org/info/rfc7231" quoteTitle="true" derivedAnchor="RFC7231">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
            <author initials="R." surname="Fielding" fullname="R. Fielding" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Reschke" fullname="J. Reschke" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t indent="0">The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7231"/>
          <seriesInfo name="DOI" value="10.17487/RFC7231"/>
        </reference>
        <reference anchor="RFC7285" target="https://www.rfc-editor.org/info/rfc7285" quoteTitle="true" derivedAnchor="RFC7285">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author initials="R." surname="Alimi" fullname="R. Alimi" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Penno" fullname="R. Penno" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Yang" fullname="Y. Yang" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Kiesel" fullname="S. Kiesel">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Previdi" fullname="S. Previdi">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="W." surname="Roome" fullname="W. Roome">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Shalunov" fullname="S. Shalunov">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Woundy" fullname="R. Woundy">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="September"/>
            <abstract>
              <t indent="0">Applications using the Internet already have access to some topology information of Internet Service Provider (ISP) networks.  For example, views to Internet routing tables at Looking Glass servers are available and can be practically downloaded to many network application clients.  What is missing is knowledge of the underlying network topologies from the point of view of ISPs.  In other words, what an ISP prefers in terms of traffic optimization -- and a way to distribute it.</t>
              <t indent="0">The Application-Layer Traffic Optimization (ALTO) services defined in this document provide network information (e.g., basic network location structure and preferences of network paths) with the goal of modifying network resource consumption patterns while maintaining or improving application performance.  The basic information of ALTO is based on abstract maps of a network.  These maps provide a simplified view, yet enough information about a network for applications to effectively utilize them.  Additional services are built on top of the maps.</t>
              <t indent="0">This document describes a protocol implementing the ALTO services. Although the ALTO services would primarily be provided by ISPs, other entities, such as content service providers, could also provide ALTO services.  Applications that could use the ALTO services are those that have a choice to which end points to connect.  Examples of such applications are peer-to-peer (P2P) and content delivery networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7285"/>
          <seriesInfo name="DOI" value="10.17487/RFC7285"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8189" target="https://www.rfc-editor.org/info/rfc8189" quoteTitle="true" derivedAnchor="RFC8189">
          <front>
            <title>Multi-Cost Application-Layer Traffic Optimization (ALTO)</title>
            <author initials="S." surname="Randriamasy" fullname="S. Randriamasy">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="W." surname="Roome" fullname="W. Roome">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="N." surname="Schwan" fullname="N. Schwan">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="October"/>
            <abstract>
              <t indent="0">The Application-Layer Traffic Optimization (ALTO) protocol, specified in RFC 7285, defines several services that return various metrics describing the costs between network endpoints.</t>
              <t indent="0">This document defines a new service that allows an ALTO Client to retrieve several cost metrics in a single request for an ALTO filtered cost map and endpoint cost map.  In addition, it extends the constraints to further filter those maps by allowing an ALTO Client to specify a logical combination of tests on several cost metrics.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8189"/>
          <seriesInfo name="DOI" value="10.17487/RFC8189"/>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259" quoteTitle="true" derivedAnchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray" fullname="T. Bray" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="December"/>
            <abstract>
              <t indent="0">JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t indent="0">This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="August"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8895" target="https://www.rfc-editor.org/info/rfc8895" quoteTitle="true" derivedAnchor="RFC8895">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Incremental Updates Using Server-Sent Events (SSE)</title>
            <author initials="W" surname="Roome" fullname="Wendy Roome">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y" surname="Yang" fullname="Y. Yang">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="November" year="2020"/>
          </front>
          <seriesInfo name="RFC" value="8895"/>
          <seriesInfo name="DOI" value="10.17487/RFC8895"/>
        </reference>
      </references>
      <references pn="section-9.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-alto-performance-metrics" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-alto-performance-metrics-09" derivedAnchor="ALTO_METRICS">
          <front>
            <title>ALTO Performance Cost Metrics</title>
            <author initials="Q." surname="Wu" fullname="Qin Wu">
              <organization showOnFrontPage="true">Huawei</organization>
            </author>
            <author initials="Y. R." surname="Yang" fullname="Y. Richard Yang">
              <organization showOnFrontPage="true">Yale University</organization>
            </author>
            <author initials="D." surname="Dhody" fullname="Dhruv Dhody">
              <organization showOnFrontPage="true">Huawei</organization>
            </author>
            <author initials="S." surname="Randriamasy" fullname="Sabine Randriamasy">
              <organization showOnFrontPage="true">Nokia Bell Labs</organization>
            </author>
            <author initials="L. M." surname="Contreras" fullname="Luis M. Contreras">
              <organization showOnFrontPage="true">Telefonica</organization>
            </author>
            <date month="March" day="9" year="2020"/>
            <abstract>
              <t indent="0">   Cost metric is a basic concept in Application-Layer Traffic
   Optimization (ALTO), and is used in basic ALTO services including
   both the cost map service and the endpoint cost service.

   Different applications may use different cost metrics, but the ALTO
   base protocol [RFC7285] documents only one single cost metric, i.e.,
   the generic "routingcost" metric; see Sec. 14.2 of [RFC7285].  Hence,
   if the resource consumer of an application prefers a resource
   provider that offers low-delay delivery to the resource consumer, the
   base protocol does not define the cost metric to be used.

   ALTO cost metrics can be generic metrics and this document focuses on
   network performance metrics, including network delay, jitter, packet
   loss, hop count, and bandwidth.

   When using an ALTO performance metric, an application may need
   additional contextual information beyond the metric value.  For
   example, whether the metric is an estimation based on measurements or
   a service-level agreement (SLA) can define the meaning of a
   performance metric.  Hence, this document introduces an additional
   "cost-context" field to the ALTO "cost-type" field to convey such
   information.  To report an estimated value of a performance metric,
   the ALTO server may derive and aggregate 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.  These metrics may then
   be exposed by an ALTO Server to allow applications to determine
   "where" to connect based on network performance criteria.

   
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-performance-metrics-09"/>
          <format type="TXT" target="https://www.ietf.org/internet-drafts/draft-ietf-alto-performance-metrics-09.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="BRAESS_PARADOX" quoteTitle="true" target="https://doi.org/10.1287/trsc.17.3.301" derivedAnchor="BRAESS_PARADOX">
          <front>
            <title>The Prevalence of Braess' Paradox</title>
            <author initials="R." surname="Steinberg" fullname="Richard Steinberg"/>
            <author initials="W." surname="Zangwill" fullname="Willard I. Zangwill"/>
            <date day="1" month="August" year="1983"/>
          </front>
          <refcontent>Transportation Science Vol. 17, No. 3</refcontent>
          <seriesInfo name="DOI" value="10.1287/trsc.17.3.301"/>
        </reference>
        <reference anchor="RFC2818" target="https://www.rfc-editor.org/info/rfc2818" quoteTitle="true" derivedAnchor="RFC2818">
          <front>
            <title>HTTP Over TLS</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2000" month="May"/>
            <abstract>
              <t indent="0">This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2818"/>
          <seriesInfo name="DOI" value="10.17487/RFC2818"/>
        </reference>
        <reference anchor="RFC5693" target="https://www.rfc-editor.org/info/rfc5693" quoteTitle="true" derivedAnchor="RFC5693">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Problem Statement</title>
            <author initials="J." surname="Seedorf" fullname="J. Seedorf">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Burger" fullname="E. Burger">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2009" month="October"/>
            <abstract>
              <t indent="0">Distributed applications -- such as file sharing, real-time communication, and live and on-demand media streaming -- prevalent on the Internet use a significant amount of network resources.  Such applications often transfer large amounts of data through connections established between nodes distributed across the Internet with little knowledge of the underlying network topology.  Some applications are so designed that they choose a random subset of peers from a larger set with which to exchange data.  Absent any topology information guiding such choices, or acting on suboptimal or local information obtained from measurements and statistics, these applications often make less than desirable choices.</t>
              <t indent="0">This document discusses issues related to an information-sharing service that enables applications to perform better-than-random peer selection.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5693"/>
          <seriesInfo name="DOI" value="10.17487/RFC5693"/>
        </reference>
        <reference anchor="RFC6708" target="https://www.rfc-editor.org/info/rfc6708" quoteTitle="true" derivedAnchor="RFC6708">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Requirements</title>
            <author initials="S." surname="Kiesel" fullname="S. Kiesel" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Previdi" fullname="S. Previdi">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="M." surname="Stiemerling" fullname="M. Stiemerling">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Woundy" fullname="R. Woundy">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Yang" fullname="Y. Yang">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2012" month="September"/>
            <abstract>
              <t indent="0">Many Internet applications are used to access resources, such as pieces of information or server processes that are available in several equivalent replicas on different hosts.  This includes, but is not limited to, peer-to-peer file sharing applications.  The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This guidance shall be based on parameters that affect performance and efficiency of the data transmission between the hosts, e.g., the topological distance.  The ultimate goal is to improve performance or Quality of Experience in the application while reducing the utilization of the underlying network infrastructure.</t>
              <t indent="0">This document enumerates requirements for specifying, assessing, or comparing protocols and implementations.  This document is not an  Internet Standards Track specification; it is published for  informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6708"/>
          <seriesInfo name="DOI" value="10.17487/RFC6708"/>
        </reference>
        <reference anchor="RFC7159" target="https://www.rfc-editor.org/info/rfc7159" quoteTitle="true" derivedAnchor="RFC7159">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray" fullname="T. Bray" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="March"/>
            <abstract>
              <t indent="0">JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t indent="0">This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7159"/>
          <seriesInfo name="DOI" value="10.17487/RFC7159"/>
        </reference>
        <reference anchor="SELFISH_RTG_2002" quoteTitle="true" derivedAnchor="SELFISH_RTG_2002">
          <front>
            <title>Selfish Routing</title>
            <author initials="T." surname="Roughgarden" fullname="Tim Roughgarden"/>
            <date month="May" year="2002"/>
          </front>
          <refcontent>Dissertation Thesis, Cornell</refcontent>
        </reference>
        <reference anchor="SELFISH_RTG_2003" quoteTitle="true" target="https://doi.org/10.1145/863955.863974" derivedAnchor="SELFISH_RTG_2003">
          <front>
            <title>Selfish Routing in Internet-Like Environments</title>
            <author initials="L." surname="Qiu" fullname="Lili Qiu"/>
            <author initials="Y." surname="Yang" fullname="Yang Richard Yang"/>
            <author initials="Y." surname="Zhang" fullname="Yin Zhang"/>
            <author initials="S." surname="Shenker" fullname="Scott Shenker"/>
            <date month="August" year="2003"/>
          </front>
          <seriesInfo name="DOI" value="10.1145/863955.863974"/>
          <refcontent>Proceedings of SIGCOMM '03</refcontent>
        </reference>
        <reference anchor="SENSE" target="http://sense.es.net/overview" quoteTitle="true" derivedAnchor="SENSE">
          <front>
            <title>SDN for End-to-End Networked Science at the Exascale (SENSE)</title>
            <author>
              <organization showOnFrontPage="true">Department of Energy Office of Science Advanced Scientific Computing Research (ASCR) Program</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="UNICORN-FGCS" quoteTitle="true" target="https://doi.org/10.1016/j.future.2018.09.048" derivedAnchor="UNICORN-FGCS">
          <front>
            <title>Unicorn: Unified resource orchestration for multi-domain, geo-distributed data analytics</title>
            <author initials="Q." surname="Xiang" fullname="Qiao Xiang"/>
            <author initials="T." surname="Wang" fullname="Tony Wang"/>
            <author initials="J." surname="Zhang" fullname="Jensen Zhang"/>
            <author initials="H." surname="Newman" fullname="Harvey Newman"/>
            <author initials="Y." surname="Yang" fullname="Yang Richard Yang"/>
            <author initials="Y." surname="Liu" fullname="Jace Liu"/>
            <date month="March" year="2019"/>
          </front>
          <refcontent>Future Generation Computer Systems (FGCS), Vol. 93,
	    Pages 188-197</refcontent>
          <seriesInfo name="DOI" value="10.1016/j.future.2018.09.048"/>
          <seriesInfo name="ISSN" value="0167-739X"/>
        </reference>
      </references>
    </references>
    <section anchor="acks" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.a-1">
   The authors would like to thank <contact fullname="Fred Baker"/>, <contact fullname="Li Geng"/>, <contact fullname="Diego Lopez"/>, <contact fullname="He Peng"/>, and <contact fullname="Haibin Song"/> for fruitful
   discussions and feedback on earlier draft versions.  <contact fullname="Dawn Chan"/>, <contact fullname="Kai Gao"/>, <contact fullname="Vijay Gurbani"/>, <contact fullname="Yichen Qian"/>, <contact fullname="Jürgen Schönwälder"/>, <contact fullname="Brian Weis"/>, and
   <contact fullname="Jensen Zhang"/> provided substantial review feedback and
   suggestions to the protocol design.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
        <organization showOnFrontPage="true">Nokia Bell Labs</organization>
        <address>
          <postal>
            <street>Route de Villejust</street>
            <city>Nozay</city>
            <code>91460</code>
            <country>France</country>
          </postal>
          <email>Sabine.Randriamasy@nokia-bell-labs.com</email>
        </address>
      </author>
      <author fullname="Y. Richard Yang" initials="Y." surname="Yang">
        <organization showOnFrontPage="true">Yale University</organization>
        <address>
          <postal>
            <street>51 Prospect St.</street>
            <city>New Haven</city>
            <region>CT</region>
            <code>06520</code>
            <country>United States of America</country>
          </postal>
          <email>yry@cs.yale.edu</email>
        </address>
      </author>
      <author fullname="Qin Wu" initials="Q." surname="Wu">
        <organization showOnFrontPage="true">Huawei</organization>
        <address>
          <postal>
            <street>101 Software Avenue</street>
            <extaddr>Yuhua District</extaddr>
            <city>Nanjing</city>
            <region>Jiangsu</region>
            <code>210012</code>
            <country>China</country>
          </postal>
          <email>sunseawq@huawei.com</email>
        </address>
      </author>
      <author fullname="Lingli Deng" initials="L." surname="Deng">
        <organization showOnFrontPage="true">China Mobile</organization>
        <address>
          <postal>
            <country>China</country>
          </postal>
          <email>denglingli@chinamobile.com</email>
        </address>
      </author>
      <author fullname="Nico Schwan" initials="N." surname="Schwan">
        <organization showOnFrontPage="true">Thales Deutschland</organization>
        <address>
          <postal>
            <street>Lorenzstrasse 10</street>
            <city>Stuttgart</city>
            <code>70435</code>
            <country>Germany</country>
          </postal>
          <email>nico.schwan@thalesgroup.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
