<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" docName="draft-ietf-cdni-capacity-insights-extensions-12" number="9808" consensus="true" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" prepTime="2025-07-31T09:33:55" indexInclude="true" scripts="Common,Latin">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-cdni-capacity-insights-extensions-12" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9808" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="CDNI Capacity Capability Advertisement Extensions">Content Delivery Network Interconnection (CDNI) Capacity Capability Advertisement Extensions</title>
    <seriesInfo name="RFC" value="9808" stream="IETF"/>
    <author fullname="Andrew Ryan" initials="A." surname="Ryan">
      <organization showOnFrontPage="true">Disney Streaming</organization>
      <address>
        <postal>
          <street>1211 Avenue of the Americas</street>
          <city>New York</city>
          <region>NY</region>
          <code>10036</code>
          <country>United States of America</country>
        </postal>
        <email>andrew@andrewnryan.com</email>
      </address>
    </author>
    <author fullname="Ben Rosenblum" initials="B." surname="Rosenblum">
      <organization showOnFrontPage="true">Vecima</organization>
      <address>
        <postal>
          <street>4375 River Green Pkwy #100</street>
          <city>Duluth</city>
          <region>GA</region>
          <code>30096</code>
          <country>United States of America</country>
        </postal>
        <email>ben@rosenblum.dev</email>
      </address>
    </author>
    <author fullname="Nir B. Sopher" initials="N." surname="Sopher">
      <organization showOnFrontPage="true">Qwilt</organization>
      <address>
        <postal>
          <street>6, Ha'harash</street>
          <city>Hod HaSharon</city>
          <code>4524079</code>
          <country>Israel</country>
        </postal>
        <email>nir@apache.org</email>
      </address>
    </author>
    <date month="07" year="2025"/>
    <area>WIT</area>
    <workgroup>cdni</workgroup>
    <keyword>cdni</keyword>
    <keyword>Capacity</keyword>
    <keyword>telemetry</keyword>
    <keyword>observability</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This specification defines a set of additional
      Capability Objects that provide information about current downstream
      CDN (dCDN) utilization and specified usage limits to the delegating
      upstream CDN (uCDN) in order to inform traffic delegation decisions.
      </t>
      <t indent="0" pn="section-abstract-2">This document supplements the CDNI Capability Objects, defined in
      RFC 8008 as part of the Footprint &amp; Capabilities Advertisement
      Interface (FCI), with two additional Capability Objects:
      FCI.CapacityLimits and FCI.Telemetry.
      </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/rfc9808" 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) 2025 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 Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised 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" 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-terminology">Terminology</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-requirements-language">Requirements Language</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.3">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.3.1"><xref derivedContent="1.3" format="counter" sectionFormat="of" target="section-1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-objectives">Objectives</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-cdni-additional-capability-">CDNI Additional Capability Objects</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-telemetry-capability-object">Telemetry Capability Object</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.1.2">
                  <li pn="section-toc.1-1.2.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.2.2.1.2.1.1"><xref derivedContent="2.1.1" format="counter" sectionFormat="of" target="section-2.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-telemetry-source-object">Telemetry Source Object</xref></t>
                    <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.1.2.1.2">
                      <li pn="section-toc.1-1.2.2.1.2.1.2.1">
                        <t indent="0" pn="section-toc.1-1.2.2.1.2.1.2.1.1"><xref derivedContent="2.1.1.1" format="counter" sectionFormat="of" target="section-2.1.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-telemetry-source-types">Telemetry Source Types</xref></t>
                      </li>
                      <li pn="section-toc.1-1.2.2.1.2.1.2.2">
                        <t indent="0" pn="section-toc.1-1.2.2.1.2.1.2.2.1"><xref derivedContent="2.1.1.2" format="counter" sectionFormat="of" target="section-2.1.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-telemetry-source-metric-obj">Telemetry Source Metric Object</xref></t>
                      </li>
                    </ul>
                  </li>
                  <li pn="section-toc.1-1.2.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.2.2.1.2.2.1"><xref derivedContent="2.1.2" format="counter" sectionFormat="of" target="section-2.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-telemetry-capability-object-">Telemetry Capability Object Serialization</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-capacitylimits-capability-o">CapacityLimits Capability Object</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.2.2">
                  <li pn="section-toc.1-1.2.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.2.2.2.2.1.1"><xref derivedContent="2.2.1" format="counter" sectionFormat="of" target="section-2.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-capacitylimit-object">CapacityLimit Object</xref></t>
                    <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.2.2.1.2">
                      <li pn="section-toc.1-1.2.2.2.2.1.2.1">
                        <t indent="0" pn="section-toc.1-1.2.2.2.2.1.2.1.1"><xref derivedContent="2.2.1.1" format="counter" sectionFormat="of" target="section-2.2.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-capacitylimit-types">CapacityLimit Types</xref></t>
                      </li>
                      <li pn="section-toc.1-1.2.2.2.2.1.2.2">
                        <t indent="0" pn="section-toc.1-1.2.2.2.2.1.2.2.1"><xref derivedContent="2.2.1.2" format="counter" sectionFormat="of" target="section-2.2.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-capacitylimittelemetrysourc">CapacityLimitTelemetrySource Object</xref></t>
                      </li>
                    </ul>
                  </li>
                  <li pn="section-toc.1-1.2.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.2.2.2.2.2.1"><xref derivedContent="2.2.2" format="counter" sectionFormat="of" target="section-2.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-capacitylimit-object-serial">CapacityLimit Object Serialization</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </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-iana-considerations">IANA Considerations</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-cdni-payload-types">CDNI Payload Types</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.1.2">
                  <li pn="section-toc.1-1.3.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.1.1"><xref derivedContent="3.1.1" format="counter" sectionFormat="of" target="section-3.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cdni-fcitelemetry-payload-t">CDNI FCI.Telemetry Payload Type</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.2.1"><xref derivedContent="3.1.2" format="counter" sectionFormat="of" target="section-3.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cdni-fcicapacitylimits-payl">CDNI FCI.CapacityLimits Payload Type</xref></t>
                  </li>
                </ul>
              </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-cdni-telemetry-source-types">CDNI Telemetry Source Types Registry</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.2.2">
                  <li pn="section-toc.1-1.3.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.1.1"><xref derivedContent="3.2.1" format="counter" sectionFormat="of" target="section-3.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cdni-generic-telemetry-sour">CDNI Generic Telemetry Source Type</xref></t>
                  </li>
                </ul>
              </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-cdni-capacity-limit-types-r">CDNI Capacity Limit Types Registry</xref></t>
              </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-security-considerations">Security Considerations</xref></t>
          </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-references">References</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-normative-references">Normative References</xref></t>
              </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-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.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 numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">
                While delegating traffic from an upstream CDN (uCDN) to a
                downstream CDN (dCDN), it is important to ensure that an
                appropriate amount of traffic is delegated. To achieve that,
                this specification defines a feedback mechanism to inform the
                delegator how much traffic may be delegated. The traffic
                level information provided by that interface will be consumed
                by services, such as a request router, to inform that
                service's traffic delegation decisions. The provided information is advisory and does not represent a
                guarantee, commitment, or reservation of capacity.
      </t>
      <t indent="0" pn="section-1-2">
                This document defines and registers CDNI Payload Types (as defined in <xref section="7.1" target="RFC8006" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8006#section-7.1" derivedContent="RFC8006"/>). These Payload Types
                are used for Capability Objects, which are added to those defined in <xref section="4" target="RFC8008" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8008#section-4" derivedContent="RFC8008"/>.
      </t>
      <section anchor="terminology" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-terminology">Terminology</name>
        <t indent="0" pn="section-1.1-1">The following term is used throughout this document:</t>
        <dl spacing="normal" newline="false" indent="3" pn="section-1.1-2">
          <dt pn="section-1.1-2.1">CDN:</dt>
          <dd pn="section-1.1-2.2">Content Delivery Network</dd>
        </dl>
        <t indent="0" pn="section-1.1-3">Additionally, this document reuses the terminology defined in <xref target="RFC6707" format="default" sectionFormat="of" derivedContent="RFC6707"/>.  Specifically, the
        following CDNI acronyms are used:</t>
        <dl spacing="normal" newline="false" indent="3" pn="section-1.1-4">
          <dt pn="section-1.1-4.1">uCDN:</dt>
          <dd pn="section-1.1-4.2">upstream CDN</dd>
          <dt pn="section-1.1-4.3">dCDN:</dt>
          <dd pn="section-1.1-4.4">downstream CDN</dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-1.2">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.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>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-1.3">
        <name slugifiedName="name-objectives">Objectives</name>
        <t indent="0" pn="section-1.3-1">
                 To enable information exchange between a uCDN and a dCDN regarding acceptable levels of
                 traffic delegation, the following process has been defined:
        </t>
        <t indent="3" pn="section-1.3-2">
                 In normal operation, a uCDN will communicate with a dCDN, via an interface, to collect and
                 understand any limits that a dCDN has set forth for traffic delegation from a uCDN.  These limits
                 will come in the form of metrics such as bits per second, requests per second, etc.  These limits
                 can be thought of as Not to Exceed (NTE) limits.
        </t>
        <t indent="3" pn="section-1.3-3">
                 The dCDN should provide access to a Telemetry Source of near real-time metrics that the uCDN can
                 use to track current usage. The uCDN should compare its current usage to the limits the dCDN has
                 put forth and adjust traffic delegation decisions accordingly to keep current usage under the specified
                 limits.
        </t>
        <t indent="3" pn="section-1.3-4">
                 In summary, the dCDN will inform the uCDN of the amount of
                 traffic that may be delegated. Additionally, it will provide a
                 Telemetry Source aligned with this limit, allowing the uCDN to
                 monitor its current usage against the advertised value. Having
                 a limit and a corresponding Telemetry Source creates an
                 unambiguous definition understood by both parties.
        </t>
        <t indent="0" pn="section-1.3-5">
                 Limits that are communicated from the dCDN to the uCDN should
                 be considered valid based on the Time to Live (TTL) provided by
                 a mechanism of the underlying transport, e.g., an HTTP
                 Cache-Control header. The intention is that the limits would
                 have a long-lived TTL and would represent a reasonable peak
                 utilization limit that the uCDN should target. If the
                 underlying transport does not provide a mechanism for the dCDN
                 to communicate the TTL of the limits, the TTL should be
                 communicated through an out-of-band mechanism agreed upon between
                 the dCDN and uCDN.
        </t>
      </section>
    </section>
    <section anchor="cdni-additional-capability-objects" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-cdni-additional-capability-">CDNI Additional Capability Objects</name>
      <t indent="0" pn="section-2-1">
                <xref section="5" target="RFC8008" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8008#section-5" derivedContent="RFC8008"/> describes the FCI Capability Advertisement Object, which
                contains a CDNI Capability Object as well as the capability-type (a CDNI Payload Type).
                The section also defines the Capability Objects per such type. Below, we define two additional Capability Objects.
      </t>
      <aside pn="section-2-2">
        <t indent="0" pn="section-2-2.1">
                Note: In the following sections, the term "mandatory-to-specify"
                is used to convey which properties <bcp14>MUST</bcp14> be included when
                serializing a given capability object.  When
                mandatory-to-specify is defined as a "Yes" for an individual
                property, it means that if the object containing that property
                is included in an FCI message, then the mandatory-to-specify
                property <bcp14>MUST</bcp14> be included.
        </t>
      </aside>
      <section anchor="telemetry-capability-object" numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-telemetry-capability-object">Telemetry Capability Object</name>
        <t indent="0" pn="section-2.1-1">
                    The Telemetry Capability Object advertises a list of
                    Telemetry Sources made available to the uCDN by the dCDN. In
                    this document, telemetry data is being defined as near
                    real-time aggregated metrics of dCDN utilization, such as
                    bits per second egress, and is specific to the uCDN and dCDN
                    traffic delegation relationship.
        </t>
        <t indent="0" pn="section-2.1-2">    
                    Telemetry data is uniquely defined by a source ID, a metric
                    name, and the footprints that are associated with an
                    FCI Capabilities advertisement.  When defining a
                    CapacityLimit, the meaning of a limit might be ambiguous if
                    the uCDN and dCDN are observing telemetry via different data
                    sources. A dCDN-provided Telemetry Source that both parties
                    reference serves as a non-ambiguous metric for use when
                    comparing current usage to a limit.
        </t>
        <t indent="0" pn="section-2.1-3">
                    Telemetry data is important for making informed traffic
                    delegation decisions. Additionally, it is essential in
                    providing visibility of traffic that has been delegated. In
                    situations where there are multiple CDN delegations, a uCDN
                    will need to aggregate the usage information from any dCDNs
                    to which it delegated when asked to provide usage
                    information, otherwise the traffic may seem unaccounted for.
        </t>
        <t indent="0" pn="section-2.1-4">
                    Example: A Content Provider
                    delegates traffic directly to a uCDN, and that uCDN
                    delegates that traffic to a dCDN. When the Content Provider
                    polls the uCDN telemetry interface, any of the traffic the
                    uCDN delegated to the dCDN would
                    become invisible to the Content Provider, unless the uCDN
                    aggregates the dCDN telemetry with its own metrics.
        </t>
        <dl spacing="normal" newline="false" indent="3" pn="section-2.1-5">
          <dt pn="section-2.1-5.1">Property:</dt>
          <dd pn="section-2.1-5.2">
            <t indent="0" pn="section-2.1-5.2.1">sources</t>
            <dl spacing="normal" newline="false" indent="3" pn="section-2.1-5.2.2">
              <dt pn="section-2.1-5.2.2.1">Description:</dt>
              <dd pn="section-2.1-5.2.2.2">Telemetry Sources made available to the uCDN.</dd>
              <dt pn="section-2.1-5.2.2.3">Type:</dt>
              <dd pn="section-2.1-5.2.2.4">A JSON array of Telemetry Source objects (see
            <xref target="telemetry-source-object" format="default" sectionFormat="of" derivedContent="Section 2.1.1"/>).</dd>
              <dt pn="section-2.1-5.2.2.5">Mandatory-to-Specify:</dt>
              <dd pn="section-2.1-5.2.2.6">Yes</dd>
            </dl>
          </dd>
        </dl>
        <section anchor="telemetry-source-object" numbered="true" toc="include" removeInRFC="false" pn="section-2.1.1">
          <name slugifiedName="name-telemetry-source-object">Telemetry Source Object</name>
          <t indent="0" pn="section-2.1.1-1">The Telemetry Source Object is made of an associated type, a
          list of exposed metrics, and type-specific configuration data.
          </t>
          <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1-2">
            <dt pn="section-2.1.1-2.1">Property:</dt>
            <dd pn="section-2.1.1-2.2">
              <t indent="0" pn="section-2.1.1-2.2.1">id</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1-2.2.2">
                <dt pn="section-2.1.1-2.2.2.1">Description:</dt>
                <dd pn="section-2.1.1-2.2.2.2">An identifier of a telemetry source.  The
            ID string assigned to this Telemetry Source <bcp14>MUST</bcp14> be
            unique across all Telemetry Source objects in the advertisement
            containing this Telemetry Source Object. The ID string
            <bcp14>MUST</bcp14> remain consistent for the same source
            reference across advertisements.</dd>
                <dt pn="section-2.1.1-2.2.2.3">Type:</dt>
                <dd pn="section-2.1.1-2.2.2.4">String</dd>
                <dt pn="section-2.1.1-2.2.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.1.1-2.2.2.6">Yes</dd>
              </dl>
            </dd>
            <dt pn="section-2.1.1-2.3">Property:</dt>
            <dd pn="section-2.1.1-2.4">
              <t indent="0" pn="section-2.1.1-2.4.1">type</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1-2.4.2">
                <dt pn="section-2.1.1-2.4.2.1">Description:</dt>
                <dd pn="section-2.1.1-2.4.2.2">A valid Telemetry Source Type (see <xref target="telemetry-source-type" format="default" sectionFormat="of" derivedContent="Section 2.1.1.1"/>).</dd>
                <dt pn="section-2.1.1-2.4.2.3">Type:</dt>
                <dd pn="section-2.1.1-2.4.2.4">String</dd>
                <dt pn="section-2.1.1-2.4.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.1.1-2.4.2.6">Yes</dd>
              </dl>
            </dd>
            <dt pn="section-2.1.1-2.5">Property:</dt>
            <dd pn="section-2.1.1-2.6">
              <t indent="0" pn="section-2.1.1-2.6.1">metrics</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1-2.6.2">
                <dt pn="section-2.1.1-2.6.2.1">Description:</dt>
                <dd pn="section-2.1.1-2.6.2.2">The metrics exposed by this source.</dd>
                <dt pn="section-2.1.1-2.6.2.3">Type:</dt>
                <dd pn="section-2.1.1-2.6.2.4">A JSON array of Telemetry Source Metric Objects
            (see <xref target="telemetry-source-metric-object" format="default" sectionFormat="of" derivedContent="Section 2.1.1.2"/>).</dd>
                <dt pn="section-2.1.1-2.6.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.1.1-2.6.2.6">Yes</dd>
              </dl>
            </dd>
            <dt pn="section-2.1.1-2.7">Property:</dt>
            <dd pn="section-2.1.1-2.8">
              <t indent="0" pn="section-2.1.1-2.8.1">configuration</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1-2.8.2">
                <dt pn="section-2.1.1-2.8.2.1">Description:</dt>
                <dd pn="section-2.1.1-2.8.2.2">A source-specific representation of the
            Telemetry Source configuration. For the generic source type, this
            configuration format is defined as out-of-band. For other types, the
            configuration format will be specified in a yet-to-be-defined
            telemetry interface specification.  The goal of this element is to
            allow for forward compatibility with a formal telemetry
            interface.</dd>
                <dt pn="section-2.1.1-2.8.2.3">Type:</dt>
                <dd pn="section-2.1.1-2.8.2.4">A JSON object, the structure of which is
            specific to the Telemetry Source and outside the scope of this
            document.</dd>
                <dt pn="section-2.1.1-2.8.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.1.1-2.8.2.6">No</dd>
              </dl>
            </dd>
          </dl>
          <section anchor="telemetry-source-type" numbered="true" toc="include" removeInRFC="false" pn="section-2.1.1.1">
            <name slugifiedName="name-telemetry-source-types">Telemetry Source Types</name>
            <t indent="0" pn="section-2.1.1.1-1">
At the time of this writing, the "CDNI Telemetry Source Types" registry
is limited to a single type: generic (see <xref target="table3" format="default" sectionFormat="of" derivedContent="Table 3"/> in <xref target="IANA.cdni.telemetry.generic" format="default" sectionFormat="of" derivedContent="Section 3.2.1"/>).
            </t>
          </section>
          <section anchor="telemetry-source-metric-object" numbered="true" toc="include" removeInRFC="false" pn="section-2.1.1.2">
            <name slugifiedName="name-telemetry-source-metric-obj">Telemetry Source Metric Object</name>
            <t indent="0" pn="section-2.1.1.2-1"> The Telemetry Source Metric Object describes the metric to be
            exposed.
            </t>
            <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1.2-2">
              <dt pn="section-2.1.1.2-2.1">Property:</dt>
              <dd pn="section-2.1.1.2-2.2">
                <t indent="0" pn="section-2.1.1.2-2.2.1">name</t>
                <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1.2-2.2.2">
                  <dt pn="section-2.1.1.2-2.2.2.1">Description:</dt>
                  <dd pn="section-2.1.1.2-2.2.2.2">An identifier for this metric. This
                name <bcp14>MUST</bcp14> be unique among metric objects within
                the containing Telemetry Source.  The name <bcp14>MUST</bcp14>
                remain consistent for the same source reference across
                advertisements.</dd>
                  <dt pn="section-2.1.1.2-2.2.2.3">Type:</dt>
                  <dd pn="section-2.1.1.2-2.2.2.4">String</dd>
                  <dt pn="section-2.1.1.2-2.2.2.5">Mandatory-to-Specify:</dt>
                  <dd pn="section-2.1.1.2-2.2.2.6">Yes</dd>
                </dl>
              </dd>
              <dt pn="section-2.1.1.2-2.3">Property:</dt>
              <dd pn="section-2.1.1.2-2.4">
                <t indent="0" pn="section-2.1.1.2-2.4.1">time-granularity</t>
                <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1.2-2.4.2">
                  <dt pn="section-2.1.1.2-2.4.2.1">Description:</dt>
                  <dd pn="section-2.1.1.2-2.4.2.2">The time, in seconds, representing
                the metric data. For example, a value representing the last 5
                minutes would have a time-granularity of 300.</dd>
                  <dt pn="section-2.1.1.2-2.4.2.3">Type:</dt>
                  <dd pn="section-2.1.1.2-2.4.2.4">Unsigned Integer</dd>
                  <dt pn="section-2.1.1.2-2.4.2.5">Mandatory-to-Specify:</dt>
                  <dd pn="section-2.1.1.2-2.4.2.6">No</dd>
                </dl>
              </dd>
              <dt pn="section-2.1.1.2-2.5">Property:</dt>
              <dd pn="section-2.1.1.2-2.6">
                <t indent="0" pn="section-2.1.1.2-2.6.1">data-percentile</t>
                <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1.2-2.6.2">
                  <dt pn="section-2.1.1.2-2.6.2.1">Description:</dt>
                  <dd pn="section-2.1.1.2-2.6.2.2">The percentile calculation the data
                represents, i.e., 50 percentile would equate to the median
                over the time-granularity.  Lack of a data-percentile
                indicates that the data <bcp14>MUST</bcp14> be the mean over
                the time representation.</dd>
                  <dt pn="section-2.1.1.2-2.6.2.3">Type:</dt>
                  <dd pn="section-2.1.1.2-2.6.2.4">Unsigned Integer</dd>
                  <dt pn="section-2.1.1.2-2.6.2.5">Mandatory-to-Specify:</dt>
                  <dd pn="section-2.1.1.2-2.6.2.6">No</dd>
                </dl>
              </dd>
              <dt pn="section-2.1.1.2-2.7">Property:</dt>
              <dd pn="section-2.1.1.2-2.8">
                <t indent="0" pn="section-2.1.1.2-2.8.1">latency</t>
                <dl spacing="normal" newline="false" indent="3" pn="section-2.1.1.2-2.8.2">
                  <dt pn="section-2.1.1.2-2.8.2.1">Description:</dt>
                  <dd pn="section-2.1.1.2-2.8.2.2">Time in seconds that the data is
                behind real-time.  This is important to specify to help the
                uCDN understand how long it might take to reflect traffic
                adjustments in the metrics.</dd>
                  <dt pn="section-2.1.1.2-2.8.2.3">Type:</dt>
                  <dd pn="section-2.1.1.2-2.8.2.4">Unsigned Integer</dd>
                  <dt pn="section-2.1.1.2-2.8.2.5">Mandatory-to-Specify:</dt>
                  <dd pn="section-2.1.1.2-2.8.2.6">No</dd>
                </dl>
              </dd>
            </dl>
          </section>
        </section>
        <section anchor="telemetry-capability-object-serialization" numbered="true" toc="include" removeInRFC="false" pn="section-2.1.2">
          <name slugifiedName="name-telemetry-capability-object-">Telemetry Capability Object Serialization</name>
          <t indent="0" pn="section-2.1.2-1"> The following shows an example of a Telemetry Capability Object,
          including two metrics for a source, that is scoped to 
          a footprint.
          </t>
          <sourcecode type="json" markers="false" pn="section-2.1.2-2">
{
  "capabilities": [
    {
      "capability-type": "FCI.Telemetry",
      "capability-value": {
        "sources": [
          {
            "id": "capacity_metrics_region1",
            "type": "generic",
            "metrics": [
              {
                "name": "egress_5m",
                "time-granularity": 300,
                "data-percentile": 50,
                "latency": 1500
              },
              {
                "name": "requests_5m",
                 ...
              }
            ]
          }
        ]
      },
      "footprints": [
        &lt;footprint objects&gt;
      ]
    }
  ]
}</sourcecode>
        </section>
      </section>
      <section anchor="capacity-limits-capability-object" numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-capacitylimits-capability-o">CapacityLimits Capability Object</name>
        <t indent="0" pn="section-2.2-1">The CapacityLimits Capability Object enables the dCDN to specify
        traffic delegation limits to a uCDN within an FCI Capabilities
        advertisement.  The limits specified by the dCDN will inform the uCDN
        on how much traffic may be delegated to the dCDN. The limits specified
        by the dCDN should be considered NTE limits. The
        limits should be based on near real-time telemetry data that the dCDN
        provides to the uCDN. In other words, for each limit that is
        advertised, there should also exist a Telemetry Source that provides
        current utilization data against the particular advertised limit.</t>
        <dl spacing="normal" newline="false" indent="3" pn="section-2.2-2">
          <dt pn="section-2.2-2.1">Property:</dt>
          <dd pn="section-2.2-2.2">
            <t indent="0" pn="section-2.2-2.2.1">limits</t>
            <dl spacing="normal" newline="false" indent="3" pn="section-2.2-2.2.2">
              <dt pn="section-2.2-2.2.2.1">Description:</dt>
              <dd pn="section-2.2-2.2.2.2">A collection of CapacityLimit Objects.</dd>
              <dt pn="section-2.2-2.2.2.3">Type:</dt>
              <dd pn="section-2.2-2.2.2.4">A JSON array of CapacityLimit Objects (see
              <xref target="capacity-limit-object" format="default" sectionFormat="of" derivedContent="Section 2.2.1"/>).</dd>
              <dt pn="section-2.2-2.2.2.5">Mandatory-to-Specify:</dt>
              <dd pn="section-2.2-2.2.2.6">Yes</dd>
            </dl>
          </dd>
        </dl>
        <section anchor="capacity-limit-object" numbered="true" toc="include" removeInRFC="false" pn="section-2.2.1">
          <name slugifiedName="name-capacitylimit-object">CapacityLimit Object</name>
          <t indent="0" pn="section-2.2.1-1">A CapacityLimit Object is used to represent traffic limits for
          delegation from the uCDN towards the dCDN.  The limit object is
          scoped to the footprint associated with the FCI Capabilities
          advertisement encompassing this object. Limits <bcp14>MUST</bcp14>
          be considered using a logical "AND": A uCDN will need to ensure that
          all limits are considered rather than choosing only the most
          specific.
          </t>
          <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1-2">
            <dt pn="section-2.2.1-2.1">Property:</dt>
            <dd pn="section-2.2.1-2.2">
              <t indent="0" pn="section-2.2.1-2.2.1">limit-type</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1-2.2.2">
                <dt pn="section-2.2.1-2.2.2.1">Description:</dt>
                <dd pn="section-2.2.1-2.2.2.2">The units of maximum-hard and maximum-soft.</dd>
                <dt pn="section-2.2.1-2.2.2.3">Type:</dt>
                <dd pn="section-2.2.1-2.2.2.4">String. One of the values listed in <xref target="capacity-limit-type" format="default" sectionFormat="of" derivedContent="Section 2.2.1.1"/>.</dd>
                <dt pn="section-2.2.1-2.2.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.2.1-2.2.2.6">Yes</dd>
              </dl>
            </dd>
            <dt pn="section-2.2.1-2.3">Property:</dt>
            <dd pn="section-2.2.1-2.4">
              <t indent="0" pn="section-2.2.1-2.4.1">id</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1-2.4.2">
                <dt pn="section-2.2.1-2.4.2.1">Description:</dt>
                <dd pn="section-2.2.1-2.4.2.2">Specifies an identifier associated with
              a limit. This <bcp14>MAY</bcp14> be used as a relational
              identifier to a specific CapacityLimit Object. If specified,
              this identifier <bcp14>MUST</bcp14> be unique among specified
              identifiers associated with any other CapacityLimit Objects in
              the advertisement containing this CapacityLimit Object.</dd>
                <dt pn="section-2.2.1-2.4.2.3">Type:</dt>
                <dd pn="section-2.2.1-2.4.2.4">String</dd>
                <dt pn="section-2.2.1-2.4.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.2.1-2.4.2.6">No</dd>
              </dl>
            </dd>
            <dt pn="section-2.2.1-2.5">Property:</dt>
            <dd pn="section-2.2.1-2.6">
              <t indent="0" pn="section-2.2.1-2.6.1">maximum-hard</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1-2.6.2">
                <dt pn="section-2.2.1-2.6.2.1">Description:</dt>
                <dd pn="section-2.2.1-2.6.2.2">The maximum unit of capacity that is available for use.</dd>
                <dt pn="section-2.2.1-2.6.2.3">Type:</dt>
                <dd pn="section-2.2.1-2.6.2.4">Unsigned Integer</dd>
                <dt pn="section-2.2.1-2.6.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.2.1-2.6.2.6">Yes</dd>
              </dl>
            </dd>
            <dt pn="section-2.2.1-2.7">Property:</dt>
            <dd pn="section-2.2.1-2.8">
              <t indent="0" pn="section-2.2.1-2.8.1">maximum-soft</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1-2.8.2">
                <dt pn="section-2.2.1-2.8.2.1">Description:</dt>
                <dd pn="section-2.2.1-2.8.2.2">A soft limit at which a uCDN
              <bcp14>SHOULD</bcp14> reduce traffic before hitting the hard
              limit. This value <bcp14>MUST</bcp14> be less than the value of
              maximum-hard. If this value is not specified, it is equal to the
              value of maximum-hard.</dd>
                <dt pn="section-2.2.1-2.8.2.3">Type:</dt>
                <dd pn="section-2.2.1-2.8.2.4">Unsigned Integer</dd>
                <dt pn="section-2.2.1-2.8.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.2.1-2.8.2.6">No</dd>
              </dl>
            </dd>
            <dt pn="section-2.2.1-2.9">Property:</dt>
            <dd pn="section-2.2.1-2.10">
              <t indent="0" pn="section-2.2.1-2.10.1">current</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1-2.10.2">
                <dt pn="section-2.2.1-2.10.2.1">Description:</dt>
                <dd pn="section-2.2.1-2.10.2.2">Specifies the current usage value of
              the limit.  It is <bcp14>NOT RECOMMENDED</bcp14> to specify the
              current usage value inline with the FCI.CapacityLimits
              advertisements as it will reduce the ability to cache the
              response, but this mechanism exists for simple use cases where
              an external Telemetry Source cannot be feasibly implemented. The
              intended method for providing telemetry data is to reference a
              Telemetry Source Object (see <xref target="telemetry-source-object" format="default" sectionFormat="of" derivedContent="Section 2.1.1"/>) to poll for
              the current usage.</dd>
                <dt pn="section-2.2.1-2.10.2.3">Type:</dt>
                <dd pn="section-2.2.1-2.10.2.4">Unsigned Integer</dd>
                <dt pn="section-2.2.1-2.10.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.2.1-2.10.2.6">No</dd>
              </dl>
            </dd>
            <dt pn="section-2.2.1-2.11">Property:</dt>
            <dd pn="section-2.2.1-2.12">
              <t indent="0" pn="section-2.2.1-2.12.1">telemetry-source</t>
              <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1-2.12.2">
                <dt pn="section-2.2.1-2.12.2.1">Description:</dt>
                <dd pn="section-2.2.1-2.12.2.2">The mapping of each particular limit to a
              specific metric with relevant real-time data provided by a
              Telemetry Source.</dd>
                <dt pn="section-2.2.1-2.12.2.3">Type:</dt>
                <dd pn="section-2.2.1-2.12.2.4">CapacityLimitTelemetrySource object (see <xref target="capacity-limit-telemetry-source-object" format="default" sectionFormat="of" derivedContent="Section 2.2.1.2"/>).</dd>
                <dt pn="section-2.2.1-2.12.2.5">Mandatory-to-Specify:</dt>
                <dd pn="section-2.2.1-2.12.2.6">No</dd>
              </dl>
            </dd>
          </dl>
          <section anchor="capacity-limit-type" numbered="true" toc="include" removeInRFC="false" pn="section-2.2.1.1">
            <name slugifiedName="name-capacitylimit-types">CapacityLimit Types</name>
            <t indent="0" pn="section-2.2.1.1-1">Below are listed the valid limit-type entries registered in
            the "CDNI Capacity Limit Types" registry. The values specified here
            represent the types that were identified as being the most
            relevant metrics for the purposes of traffic delegation between
            CDNs.
            </t>
            <table align="center" pn="table-1">
              <thead>
                <tr>
                  <th align="left" colspan="1" rowspan="1">
                                Capacity Limit Type
                            </th>
                  <th align="left" colspan="1" rowspan="1">
                                Units
                            </th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left" colspan="1" rowspan="1">egress</td>
                  <td align="left" colspan="1" rowspan="1">Bits per second</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">requests</td>
                  <td align="left" colspan="1" rowspan="1">Requests per second</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">storage-size</td>
                  <td align="left" colspan="1" rowspan="1">Total bytes</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">storage-objects</td>
                  <td align="left" colspan="1" rowspan="1">Count</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">sessions</td>
                  <td align="left" colspan="1" rowspan="1">Count</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">cache-size</td>
                  <td align="left" colspan="1" rowspan="1">Total bytes</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="capacity-limit-telemetry-source-object" numbered="true" toc="include" removeInRFC="false" pn="section-2.2.1.2">
            <name slugifiedName="name-capacitylimittelemetrysourc">CapacityLimitTelemetrySource Object</name>
            <t indent="0" pn="section-2.2.1.2-1"> The CapacityLimitTelemetrySource Object refers to a specific
            metric within a Telemetry Source.</t>
            <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1.2-2">
              <dt pn="section-2.2.1.2-2.1">Property:</dt>
              <dd pn="section-2.2.1.2-2.2">
                <t indent="0" pn="section-2.2.1.2-2.2.1">id</t>
                <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1.2-2.2.2">
                  <dt pn="section-2.2.1.2-2.2.2.1">Description:</dt>
                  <dd pn="section-2.2.1.2-2.2.2.2">Reference to the "id" of a
                  Telemetry Source defined by a Telemetry Capability Object as
                  defined in <xref target="telemetry-capability-object" format="default" sectionFormat="of" derivedContent="Section 2.1"/>.</dd>
                  <dt pn="section-2.2.1.2-2.2.2.3">Type:</dt>
                  <dd pn="section-2.2.1.2-2.2.2.4">String</dd>
                  <dt pn="section-2.2.1.2-2.2.2.5">Mandatory-to-Specify:</dt>
                  <dd pn="section-2.2.1.2-2.2.2.6">Yes</dd>
                </dl>
              </dd>
              <dt pn="section-2.2.1.2-2.3">Property:</dt>
              <dd pn="section-2.2.1.2-2.4">
                <t indent="0" pn="section-2.2.1.2-2.4.1">metric</t>
                <dl spacing="normal" newline="false" indent="3" pn="section-2.2.1.2-2.4.2">
                  <dt pn="section-2.2.1.2-2.4.2.1">Description:</dt>
                  <dd pn="section-2.2.1.2-2.4.2.2">Reference to the "name" property of
                  a metric defined within a Telemetry Source of a Telemetry
                  Capability object.</dd>
                  <dt pn="section-2.2.1.2-2.4.2.3">Type:</dt>
                  <dd pn="section-2.2.1.2-2.4.2.4">String</dd>
                  <dt pn="section-2.2.1.2-2.4.2.5">Mandatory-to-Specify:</dt>
                  <dd pn="section-2.2.1.2-2.4.2.6">Yes</dd>
                </dl>
              </dd>
            </dl>
          </section>
        </section>
        <section anchor="capacity-limit-object-serialization" numbered="true" toc="include" removeInRFC="false" pn="section-2.2.2">
          <name slugifiedName="name-capacitylimit-object-serial">CapacityLimit Object Serialization</name>
          <t indent="0" pn="section-2.2.2-1"> The following shows an example of an FCI.CapacityLimits object.</t>
          <sourcecode type="json" markers="false" pn="section-2.2.2-2">
{
  "capabilities": [
    {
      "capability-type":"FCI.CapacityLimits",
      "capability-value":{
        "limits":[
          {
            "id":"capacity_limit_region1",
            "limit-type":"egress",
            "maximum-hard":50000000000,
            "maximum-soft":25000000000,
            "telemetry-source":{
              "id":"capacity_metrics_region1",
              "metric":"egress_5m"
            }
          }
        ]
      },
      "footprints":[
        "&lt;footprint objects&gt;"
      ]
    }
  ]
}</sourcecode>
        </section>
      </section>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="IANA.cdni.payload.types" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-cdni-payload-types">CDNI Payload Types</name>
        <t indent="0" pn="section-3.1-1">Per this document, IANA has registered two additional payload
        types in the "CDNI Payload Types" registry within the "Content Delivery Network Interconnection (CDNI) Parameters" registry group:
        </t>
        <table align="center" pn="table-2">
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Payload Type</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">FCI.Telemetry</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">FCI.CapacityLimits</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
          </tbody>
        </table>
        <section anchor="IANA.cdni.fci.telemetry.payload.type" numbered="true" toc="include" removeInRFC="false" pn="section-3.1.1">
          <name slugifiedName="name-cdni-fcitelemetry-payload-t">CDNI FCI.Telemetry Payload Type</name>
          <dl spacing="normal" newline="false" indent="3" pn="section-3.1.1-1">
            <dt pn="section-3.1.1-1.1">Purpose:</dt>
            <dd pn="section-3.1.1-1.2">The purpose of this Payload Type is to list
            the supported Telemetry Sources and the metrics made available by
            each source.</dd>
            <dt pn="section-3.1.1-1.3">Interface:</dt>
            <dd pn="section-3.1.1-1.4">FCI</dd>
            <dt pn="section-3.1.1-1.5">Encoding:</dt>
            <dd pn="section-3.1.1-1.6">See <xref target="telemetry-capability-object" format="default" sectionFormat="of" derivedContent="Section 2.1"/>.</dd>
          </dl>
        </section>
        <section anchor="IANA.cdni.fci.capacity.limits.payload.type" numbered="true" toc="include" removeInRFC="false" pn="section-3.1.2">
          <name slugifiedName="name-cdni-fcicapacitylimits-payl">CDNI FCI.CapacityLimits Payload Type</name>
          <dl spacing="normal" newline="false" indent="3" pn="section-3.1.2-1">
            <dt pn="section-3.1.2-1.1">Purpose:</dt>
            <dd pn="section-3.1.2-1.2">The purpose of this Payload Type is to define
            Capacity Limits based on utilization metrics corresponding to
            Telemetry Sources provided by the dCDN.</dd>
            <dt pn="section-3.1.2-1.3">Interface:</dt>
            <dd pn="section-3.1.2-1.4">FCI</dd>
            <dt pn="section-3.1.2-1.5">Encoding:</dt>
            <dd pn="section-3.1.2-1.6">See <xref target="capacity-limits-capability-object" format="default" sectionFormat="of" derivedContent="Section 2.2"/>.</dd>
          </dl>
        </section>
      </section>
      <section anchor="IANA.cdni.telemetry.registry" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-cdni-telemetry-source-types">CDNI Telemetry Source Types Registry</name>
        <t indent="0" pn="section-3.2-1">IANA has added the following new registry within the "Content Delivery
        Network Interconnection (CDNI) Parameters" registry group at
        <eref target="https://www.iana.org/assignments/cdni-parameters" brackets="angle"/>:</t>
        <dl spacing="normal" newline="false" indent="3" pn="section-3.2-2">
          <dt pn="section-3.2-2.1">Registry Name:</dt>
          <dd pn="section-3.2-2.2">CDNI Telemetry Source Types</dd>
          <dt pn="section-3.2-2.3">Registry Description:</dt>
          <dd pn="section-3.2-2.4">The "CDNI Telemetry Source Types"
          registry defines the valid values for the "type" property of the
          Telemetry Source object defined in <xref target="telemetry-source-object" format="default" sectionFormat="of" derivedContent="Section 2.1.1"/>.</dd>
          <dt pn="section-3.2-2.5">Registration Procedure:</dt>
          <dd pn="section-3.2-2.6">
            <t indent="0" pn="section-3.2-2.6.1">The registry follows the
          Specification Required policy as defined in <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.  The designated expert should consider the
          following guidelines when evaluating registration requests:</t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.2-2.6.2">
              <li pn="section-3.2-2.6.2.1">The new type definition does not duplicate existing
            types.</li>
              <li pn="section-3.2-2.6.2.2">The review should verify that the Telemetry Source is
            applicable to the CDNI use cases and that the description is clear
            and unambiguous.</li>
              <li pn="section-3.2-2.6.2.3">The registration is applicable for general use and is not proprietary.</li>
              <li pn="section-3.2-2.6.2.4">The "configuration" property has a fully specified object
            definition with a description of each defined property.</li>
            </ul>
          </dd>
        </dl>
        <t indent="0" pn="section-3.2-3">The following value has been registered:</t>
        <table anchor="table3" align="center" pn="table-3">
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Source Type</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">generic</td>
              <td align="left" colspan="1" rowspan="1">An object that allows for advertisement of generic data sources</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
          </tbody>
        </table>
        <section anchor="IANA.cdni.telemetry.generic" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1">
          <name slugifiedName="name-cdni-generic-telemetry-sour">CDNI Generic Telemetry Source Type</name>
          <dl spacing="normal" newline="false" indent="3" pn="section-3.2.1-1">
            <dt pn="section-3.2.1-1.1">Purpose:</dt>
            <dd pn="section-3.2.1-1.2">The purpose of this Telemetry Source Type is
            to provide a source-agnostic telemetry type that may be used for
            generic Telemetry Source advertisement.</dd>
            <dt pn="section-3.2.1-1.3">Usage:</dt>
            <dd pn="section-3.2.1-1.4">See <xref target="telemetry-source-object" format="default" sectionFormat="of" derivedContent="Section 2.1.1"/>.</dd>
          </dl>
        </section>
      </section>
      <section anchor="IANA.cdni.capacity.registry" numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-cdni-capacity-limit-types-r">CDNI Capacity Limit Types Registry</name>
        <t indent="0" pn="section-3.3-1">IANA has added the following new registry within the "Content Delivery
        Network Interconnection (CDNI) Parameters" registry group at
        <eref target="https://www.iana.org/assignments/cdni-parameters" brackets="angle"/>:</t>
        <dl spacing="normal" newline="false" indent="3" pn="section-3.3-2">
          <dt pn="section-3.3-2.1">Registry Name:</dt>
          <dd pn="section-3.3-2.2">CDNI Capacity Limit Types</dd>
          <dt pn="section-3.3-2.3">Registry Description:</dt>
          <dd pn="section-3.3-2.4">The "CDNI Capacity Limit Types"
          registry defines the valid values of the "limit-type" property of a
          CapacityLimit Object defined in <xref target="capacity-limit-object" format="default" sectionFormat="of" derivedContent="Section 2.2.1"/>.</dd>
          <dt pn="section-3.3-2.5">Registration Procedure:</dt>
          <dd pn="section-3.3-2.6">
            <t indent="0" pn="section-3.3-2.6.1">The registry follows the
          Specification Required policy as defined in <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.  The designated expert should consider the
          following guidelines when evaluating registration requests:</t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.3-2.6.2">
              <li pn="section-3.3-2.6.2.1">The new capacity limit-type does not duplicate existing entries.</li>
              <li pn="section-3.3-2.6.2.2">The submission has a defined purpose. The newly defined
            capacity limit-type should be clearly justified in the context of
            one or more CDNI use cases.</li>
              <li pn="section-3.3-2.6.2.3">The description of the capacity limit-type is well-documented and unambiguous.</li>
            </ul>
          </dd>
        </dl>
        <t indent="0" pn="section-3.3-3">The following values have been registered:</t>
        <table align="center" pn="table-4">
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Capacity Limit Type</th>
              <th align="left" colspan="1" rowspan="1">Units</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">egress</td>
              <td align="left" colspan="1" rowspan="1">Bits per second</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">requests</td>
              <td align="left" colspan="1" rowspan="1">Requests per second</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">storage-size</td>
              <td align="left" colspan="1" rowspan="1">Total bytes</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">storage-objects</td>
              <td align="left" colspan="1" rowspan="1">Count</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">sessions</td>
              <td align="left" colspan="1" rowspan="1">Count</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">cache-size</td>
              <td align="left" colspan="1" rowspan="1">Total bytes</td>
              <td align="left" colspan="1" rowspan="1">RFC 9808</td>
            </tr>
          </tbody>
        </table>
        <dl spacing="normal" newline="false" indent="3" pn="section-3.3-5">
          <dt pn="section-3.3-5.1">Usage:</dt>
          <dd pn="section-3.3-5.2">See <xref target="capacity-limit-type" format="default" sectionFormat="of" derivedContent="Section 2.2.1.1"/>.</dd>
        </dl>
      </section>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-4-1">This specification is in accordance with the CDNI Request Routing:
      Footprint and Capabilities Semantics. As such, it is subject to the
      security and privacy considerations as defined in <xref section="7" target="RFC8008" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8008#section-7" derivedContent="RFC8008"/>.
      </t>
    </section>
  </middle>
  <back>
    <references pn="section-5">
      <name slugifiedName="name-references">References</name>
      <references pn="section-5.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <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 fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC8008" target="https://www.rfc-editor.org/info/rfc8008" quoteTitle="true" derivedAnchor="RFC8008">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Request Routing: Footprint and Capabilities Semantics</title>
            <author fullname="J. Seedorf" initials="J." surname="Seedorf"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="S. Previdi" initials="S." surname="Previdi"/>
            <author fullname="R. van Brandenburg" initials="R." surname="van Brandenburg"/>
            <author fullname="K. Ma" initials="K." surname="Ma"/>
            <date month="December" year="2016"/>
            <abstract>
              <t indent="0">&lt;p&gt;This document captures the semantics of the "Footprint and Capabilities Advertisement" part of the Content Delivery Network Interconnection (CDNI) Request Routing interface, i.e., the desired meaning of "Footprint" and "Capabilities" in the CDNI context and what the "Footprint &amp; Capabilities Advertisement interface (FCI)" offers within CDNI. The document also provides guidelines for the CDNI FCI protocol. It further defines a Base Advertisement Object, the necessary registries for capabilities and footprints, and guidelines on how these registries can be extended in the future.&lt;/p&gt;</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8008"/>
          <seriesInfo name="DOI" value="10.17487/RFC8008"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </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 fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <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>
      </references>
      <references pn="section-5.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC6707" target="https://www.rfc-editor.org/info/rfc6707" quoteTitle="true" derivedAnchor="RFC6707">
          <front>
            <title>Content Distribution Network Interconnection (CDNI) Problem Statement</title>
            <author fullname="B. Niven-Jenkins" initials="B." surname="Niven-Jenkins"/>
            <author fullname="F. Le Faucheur" initials="F." surname="Le Faucheur"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <date month="September" year="2012"/>
            <abstract>
              <t indent="0">Content Delivery Networks (CDNs) provide numerous benefits for cacheable content: reduced delivery cost, improved quality of experience for End Users, and increased robustness of delivery. For these reasons, they are frequently used for large-scale content delivery. As a result, existing CDN Providers are scaling up their infrastructure, and many Network Service Providers (NSPs) are deploying their own CDNs. It is generally desirable that a given content item can be delivered to an End User regardless of that End User's location or attachment network. This is the motivation for interconnecting standalone CDNs so they can interoperate as an open content delivery infrastructure for the end-to-end delivery of content from Content Service Providers (CSPs) to End Users. However, no standards or open specifications currently exist to facilitate such CDN Interconnection.</t>
              <t indent="0">The goal of this document is to outline the problem area of CDN Interconnection for the IETF CDNI (CDN Interconnection) working group. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6707"/>
          <seriesInfo name="DOI" value="10.17487/RFC6707"/>
        </reference>
        <reference anchor="RFC8006" target="https://www.rfc-editor.org/info/rfc8006" quoteTitle="true" derivedAnchor="RFC8006">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Metadata</title>
            <author fullname="B. Niven-Jenkins" initials="B." surname="Niven-Jenkins"/>
            <author fullname="R. Murray" initials="R." surname="Murray"/>
            <author fullname="M. Caulfield" initials="M." surname="Caulfield"/>
            <author fullname="K. Ma" initials="K." surname="Ma"/>
            <date month="December" year="2016"/>
            <abstract>
              <t indent="0">The Content Delivery Network Interconnection (CDNI) Metadata interface enables interconnected Content Delivery Networks (CDNs) to exchange content distribution metadata in order to enable content acquisition and delivery. The CDNI Metadata associated with a piece of content provides a downstream CDN with sufficient information for the downstream CDN to service content requests on behalf of an upstream CDN. This document describes both a base set of CDNI Metadata and the protocol for exchanging that metadata.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8006"/>
          <seriesInfo name="DOI" value="10.17487/RFC8006"/>
        </reference>
        <reference anchor="SVTA" target="https://www.svta.org" quoteTitle="true" derivedAnchor="SVTA">
          <front>
            <title>Streaming Video Technology Alliance Home Page</title>
            <author/>
            <date/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="Acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1">The authors would like to express their gratitude to the members of
      the Streaming Video Technology Alliance <xref target="SVTA" format="default" sectionFormat="of" derivedContent="SVTA"/> Open Caching Working Group for their guidance,
      contribution, and review.
      </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="Andrew Ryan" initials="A." surname="Ryan">
        <organization showOnFrontPage="true">Disney Streaming</organization>
        <address>
          <postal>
            <street>1211 Avenue of the Americas</street>
            <city>New York</city>
            <region>NY</region>
            <code>10036</code>
            <country>United States of America</country>
          </postal>
          <email>andrew@andrewnryan.com</email>
        </address>
      </author>
      <author fullname="Ben Rosenblum" initials="B." surname="Rosenblum">
        <organization showOnFrontPage="true">Vecima</organization>
        <address>
          <postal>
            <street>4375 River Green Pkwy #100</street>
            <city>Duluth</city>
            <region>GA</region>
            <code>30096</code>
            <country>United States of America</country>
          </postal>
          <email>ben@rosenblum.dev</email>
        </address>
      </author>
      <author fullname="Nir B. Sopher" initials="N." surname="Sopher">
        <organization showOnFrontPage="true">Qwilt</organization>
        <address>
          <postal>
            <street>6, Ha'harash</street>
            <city>Hod HaSharon</city>
            <code>4524079</code>
            <country>Israel</country>
          </postal>
          <email>nir@apache.org</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
