<?xmlversion="1.0" encoding="US-ASCII"?>version='1.0' encoding='UTF-8'?> <!DOCTYPE rfcSYSTEM "rfc2629.dtd"> <?rfc toc="yes"?> <?rfc tocompact="yes"?> <?rfc tocdepth="4"?> <?rfc tocindent="yes"?> <?rfc symrefs="yes"?> <?rfc sortrefs="yes"?> <?rfc comments="yes"?> <?rfc inline="yes"?> <?rfc compact="yes"?>[ <!ENTITY nbsp " "> <!ENTITY zwsp "​"> <!ENTITY nbhy "‑"> <!ENTITY wj "⁠"> ]> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-cdni-capacity-insights-extensions-12"ipr="trust200902">number="9808" consensus="true" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" version="3"> <front> <title abbrev="CDNI Capacity Capability AdvertisementExtensions"> CDNIExtensions">Content Delivery Network Interconnection (CDNI) Capacity Capability AdvertisementExtensions </title>Extensions</title> <seriesInfo name="RFC" value="9808"/> <author fullname="Andrew Ryan" initials="A." surname="Ryan"><organization> Disney Streaming </organization><organization>Disney Streaming</organization> <address> <postal><street> 1211<street>1211 Avenue of theAmericas </street> <city> New York </city> <region> NY </region> <code> 10036 </code> <country> US </country>Americas</street> <city>New York</city> <region>NY</region> <code>10036</code> <country>United States of America</country> </postal><email> andrew@andrewnryan.com </email><email>andrew@andrewnryan.com</email> </address> </author> <author fullname="Ben Rosenblum" initials="B." surname="Rosenblum"><organization> Vecima </organization><organization>Vecima</organization> <address> <postal><street> 4375<street>4375 River Green Pkwy#100 </street> <city> Duluth </city> <region> GA </region> <code> 30096 </code> <country> US </country>#100</street> <city>Duluth</city> <region>GA</region> <code>30096</code> <country>United States of America</country> </postal><email> ben@rosenblum.dev </email><email>ben@rosenblum.dev</email> </address> </author> <author fullname="Nir B. Sopher" initials="N." surname="Sopher"><organization> Qwilt </organization><organization>Qwilt</organization> <address> <postal><street> 6, Ha'harash </street> <city> Hod HaSharon </city> <region> </region> <code> 4524079 </code> <country> Israel </country><street>6, Ha'harash</street> <city>Hod HaSharon</city> <code>4524079</code> <country>Israel</country> </postal><email> nir@apache.org </email><email>nir@apache.org</email> </address> </author> <date/> <workgroup>Contentmonth="June" year="2025"/> <area>WIT</area> <workgroup>cdni</workgroup> <!-- [rfced] Please insert any keywords (beyond those that appear in the title) for use on https://www.rfc-editor.org/search. --> <keyword>example</keyword> <!-- [rfced] Do the extensions define or does this specification define "a set of additional Capability Objects..."? Current: The Content DeliveryNetworks Interconnection</workgroup>Network Interconnection (CDNI) Capacity Capability Advertisement Extensions define 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. Perhaps: 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. --> <abstract><t> The<t>The Content DeliveryNetworksNetwork Interconnection (CDNI) Capacity Capability Advertisement Extensions define 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> This<t>This document supplements the CDNI Capability Objects, defined in RFC 8008 as part of theFootprintsFootprint & Capabilities Advertisement Interface (FCI), with two additional Capability Objects: FCI.CapacityLimits and FCI.Telemetry. </t> </abstract> </front> <middle> <sectiontitle="Introduction">numbered="true" toc="default"> <name>Introduction</name> <t> 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> This document defines and registers CDNI Payload Types (as definedat section 7.1 ofin <xref section="7.1" target="RFC8006"/>).format="default"/>). These Payload types are used for CapabilityObjectsObjects, which are added to those definedat section 4 ofin <xref section="4" target="RFC8008"/>.format="default"/>. </t> <section anchor="terminology"title="Terminology"> <t> Thenumbered="true" toc="default"> <name>Terminology</name> <t>The followingterms areterm is used throughout thisdocument: <list style="symbols"> <t> CDN - Contentdocument:</t> <dl spacing="normal" newline="false"> <dt>CDN:</dt><dd>Content DeliveryNetwork </t> </list> </t> <t> Additionally,Network</dd> </dl> <t>Additionally, this document reuses the terminology defined in <xref target="RFC6707"/>.format="default"/>. Specifically,we usethe following CDNIacronyms: <list style="symbols"> <t> uCDN, dCDN - Upstream CDN and Downstream CDN, respectively </t> </list> </t>acronyms are used:</t> <dl spacing="normal" newline="false"> <dt>uCDN:</dt><dd>upstream CDN</dd> <dt>dCDN:</dt><dd>downstream CDN</dd> </dl> </section> <sectiontitle="Requirements Language"> <t> Thenumbered="true" toc="default"> <name>Requirements Language</name> <t>The key words"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY","<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"OPTIONAL""<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described inBCP 14BCP 14 <xreftarget="RFC2119" />target="RFC2119"/> <xreftarget="RFC8174" />target="RFC8174"/> when, and only when, they appear in all capitals, as shown here. </t> </section> <sectiontitle="Objectives">numbered="true" toc="default"> <name>Objectives</name> <t> To enable information exchange between a uCDN and a dCDN regarding acceptable levels of traffic delegation, the following process has been defined: </t><t><t indent="3"> In normaloperationoperation, 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><t indent="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><t indent="3"> 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> Limits that are communicated from the dCDN to the uCDN should be considered valid based on theTTL (Time To Live)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 mechanismagrredagreed upon between the dCDN and uCDN. </t> </section> </section> <section anchor="cdni-additional-capability-objects"title="CDNInumbered="true" toc="default"> <name>CDNI Additional CapabilityObjects">Objects</name> <t>Section 5 of<xref section="5" target="RFC8008"/>format="default"/> describes the FCI Capability Advertisement Object, which contains a CDNI Capability Object as well as the capability object type (a CDNI Payload Type). The section also defines the Capability Objects per such type. Below, we define two additional Capability Objects. </t> <t> Note: In the following sections, the term "mandatory-to-specify" is used to convey which propertiesMUST<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 propertyMUST<bcp14>MUST</bcp14> be included. </t> <section anchor="telemetry-capability-object"title="Telemetrynumbered="true" toc="default"> <name>Telemetry CapabilityObject">Object</name> <t> 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> Telemetry data is uniquely defined by a source ID, a metric name, and the footprints that are associated with an FCI.Capability 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> 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> 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 ContentProviderProvider, unless the uCDN aggregates the dCDN telemetry with its own metrics. </t><t><list style="empty"> <t>Property: sources<list style="empty"> <t>Description: Telemetry<!--[rfced] There are several lists for properties throughout the document. If the "Type" and "Mandatory-to-Specify" fields only contain one word and a period, may we remove the period? We note that this document follows the formatting style in RFC 8008; however, our current practice is to remove the punctuation if a description only contains one word (see similar examples in RFCs 9538 and 9677). Please let us know your preference. One example Current: Property: type Description: A valid telemetry source type (see Section 2.1.1.1). Type: String. Mandatory-to-Specify: Yes. Perhaps: Property: type Description: A valid telemetry source type (see Section 2.1.1.1). Type: String Mandatory-to-Specify: Yes --> <dl spacing="normal" newline="false"> <dt>Property:</dt><dd><t>sources</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>Telemetry sources made available to theuCDN.</t> <t>Type: AuCDN.</dd> <dt>Type:</dt><dd>A JSON array of Telemetry Source objects (see <xreftarget="telemetry-source-object"/>).</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> </list></t>target="telemetry-source-object" format="default"/>).</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> </dl> <section anchor="telemetry-source-object"title="Telemetrynumbered="true" toc="default"> <name>Telemetry SourceObject"> <t> TheObject</name> <t>The Telemetry Source Object isbuiltmade of an associated type, a list of exposed metrics, and type-specific configuration data. </t><t><list style="empty"> <t>Property: id<list style="empty"> <t>Description: An<dl spacing="normal" newline="false"> <dt>Property:</dt><dd><t>id</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>An identifier of a telemetry source. The ID string assigned to this Telemetry SourceMUST<bcp14>MUST</bcp14> be unique across all Telemetry Source objects in the advertisementcontaininingcontaining this Telemetry Source Object. The ID stringMUST<bcp14>MUST</bcp14> remain consistent for the same source reference acrossadvertisements.</t> <t>Type: String.</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> <t>Property: type<list style="empty"> <t>Description: Aadvertisements.</dd> <dt>Type:</dt><dd>String.</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> <dt>Property:</dt><dd><t>type</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>A valid telemetry sourcetype. Seetype (see <xreftarget="telemetry-source-type"/>.</t> <t>Type: String.</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> <t>Property: metrics<list style="empty"> <t>Description: Thetarget="telemetry-source-type" format="default"/>).</dd> <dt>Type:</dt><dd>String.</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> <dt>Property:</dt><dd><t>metrics</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>The metrics exposed by thissource.</t> <t>Type: Asource.</dd> <dt>Type:</dt><dd>A JSON array of Telemetry Source Metric objects (see <xreftarget="telemetry-source-metric-object"/>).</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> <t>Property: configuration<list style="empty"> <t>Description: atarget="telemetry-source-metric-object" format="default"/>).</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> <dt>Property:</dt><dd><t>configuration</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>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 ayet to be definedyet-to-be-defined telemetry interface specification. The goal of this element is to allow for forward compatibility with a formal telemetryinterface.</t> <t>Type: Ainterface.</dd> <dt>Type:</dt><dd>A JSON object, the structure of which is specific to the Telemetry Source and outside the scope of thisdocument.</t> <t>Mandatory-to-Specify: No.</t> </list></t> </list></t>document.</dd> <dt>Mandatory-to-Specify:</dt><dd>No.</dd> </dl> </dd> </dl> <section anchor="telemetry-source-type"title="Telemetrynumbered="true" toc="default"> <name>Telemetry SourceTypes">Types</name> <t> At the time of this writing, the registry of valid Telemetry SourceObject typesTypes is limited to a single type:Genericgeneric (see <xreftarget="IANA.cdni.telemetry.generic"/>).target="IANA.cdni.telemetry.generic" format="default"/>). </t><texttable> <ttcol<table align="center"> <thead> <tr> <th align="left"> Source Type</ttcol> <ttcol</th> <th align="left"> Description</ttcol> <c>generic</c><c>An</th> </tr> </thead> <tbody> <tr> <td align="left">generic</td> <td align="left">An objectwhichthat allows for advertisement of generic datasources</c> </texttable>sources</td> </tr> </tbody> </table> </section> <section anchor="telemetry-source-metric-object"title="Telemetrynumbered="true" toc="default"> <name>Telemetry Source MetricObject">Object</name> <t> The Telemetry Source Metric Object describes the metric to be exposed. </t><t><list style="empty"> <t>Property: name<list style="empty"> <t>Description: An<dl spacing="normal" newline="false"> <dt>Property:</dt><dd><t>name</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>An identifier for this metric. This nameMUST<bcp14>MUST</bcp14> be unique among metric objects within the containing Telemetry Source. The nameMUST<bcp14>MUST</bcp14> remain consistent for the same source reference acrossadvertisements.</t> <t>Type: String.</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> <t>Property: time-granularity<list style="empty"> <t>Description: Theadvertisements.</dd> <dt>Type:</dt><dd>String.</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> <dt>Property:</dt><dd><t>time-granularity</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>The time, in seconds, representing the metric data. For example, a value representing the last 5 minutes would have a time-granularity of300.</t> <t>Type: Unsigned Integer.</t> <t>Mandatory-to-Specify: No.</t> </list></t> <t>Property: data-percentile<list style="empty"> <t>Description: The300.</dd> <dt>Type:</dt><dd>Unsigned Integer.</dd> <dt>Mandatory-to-Specify:</dt><dd>No.</dd> </dl> </dd> <dt>Property:</dt><dd><t>data-percentile</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>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 dataMUST<bcp14>MUST</bcp14> be the mean over the timerepresentation.</t> <t>Type: Unsigned Integer.</t> <t>Mandatory-to-Specify: No.</t> </list></t> <t>Property: latency<list style="empty"> <t>Description: Timerepresentation.</dd> <dt>Type:</dt><dd>Unsigned Integer.</dd> <dt>Mandatory-to-Specify:</dt><dd>No.</dd> </dl> </dd> <dt>Property:</dt><dd><t>latency</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>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 themetrics.</t> <t>Type: Unsigned Integer.</t> <t>Mandatory-to-Specify: No.</t> </list></t> </list></t>metrics.</dd> <dt>Type:</dt><dd>Unsigned Integer.</dd> <dt>Mandatory-to-Specify:</dt><dd>No.</dd> </dl> </dd> </dl> </section> </section> <section anchor="telemetry-capability-object-serialization"title="Telemetrynumbered="true" toc="default"> <name>Telemetry Capability ObjectSerialization">Serialization</name> <!--[rfced] For consistency, should "Telemetry Capability" be updated as "the Telemetry Capability Object" in the following sentence? Original: The following shows an example of a Telemetry Capability including two metrics for a source, that is scoped to a footprint. Perhaps: The following shows an example of a Telemetry Capability Object, including two metrics for a source, that is scoped to a footprint. --> <t> The following shows an example of Telemetry Capability including two metrics for a source, that is scoped to a footprint. </t><figure> <sourcecode> <![CDATA[<sourcecode type=""><![CDATA[ { "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": [ <footprint objects> ] } ]} ]]> </sourcecode> </figure>}]]></sourcecode> </section> </section> <section anchor="capacity-limits-capability-object"title="CapacityLimitsnumbered="true" toc="default"> <name>CapacityLimits CapabilityObject"> <t> TheObject</name> <t>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 consideredNot To Exceed (NTE)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 sourcewhichthat provides current utilization data against the particular advertisedlimit. </t> <t><list style="empty"> <t>Property: limits<list style="empty"> <t>Description: Alimit.</t> <dl spacing="normal" newline="false"> <dt>Property:</dt><dd><t>limits</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>A collection of CapacityLimitobjects.</t> <t>Type: Aobjects.</dd> <dt>Type:</dt><dd>A JSON array of CapacityLimit objects (see <xreftarget="capacity-limit-object"/>).</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> </list></t>target="capacity-limit-object" format="default"/>).</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> </dl> <section anchor="capacity-limit-object"title="CapacityLimit Object"> <t> Anumbered="true" toc="default"> <name>CapacityLimit Object</name> <t>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 capability advertisement encompassing this object. LimitsMUST<bcp14>MUST</bcp14> be considered using a logical "AND":aA uCDN will need to ensure that all limits are considered rather than choosing only the most specific. </t><t><list style="empty"> <t>Property: limit-type<list style="empty"> <t>Description: The<dl spacing="normal" newline="false"> <dt>Property:</dt><dd><t>limit-type</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>The units of maximum-hard andmaximum-soft.</t> <t>Type: String.maximum-soft.</dd> <dt>Type:</dt><dd>String. One of the values listed in <xreftarget="capacity-limit-type"/>.</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> <t>Property: id<list style="empty"> <t>Description: Specifiestarget="capacity-limit-type" format="default"/>.</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> <dt>Property:</dt><dd><t>id</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>Specifies an identifier associated with a limit. ThisMAY<bcp14>MAY</bcp14> be used as a relational identifier to a specific CapacityLimit Object. If specified, this identifierMUST<bcp14>MUST</bcp14> be unique among specified identifiers associated with any other CapacityLimit objects in the advertisement containing this CapacityLimitObject.</t> <t>Type: String.</t> <t>Mandatory-to-Specify: No.</t> </list></t> <t>Property: maximum-hard<list style="empty"> <t>Description: TheObject.</dd> <dt>Type:</dt><dd>String.</dd> <dt>Mandatory-to-Specify:</dt><dd>No.</dd> </dl> </dd> <dt>Property:</dt><dd><t>maximum-hard</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>The maximum unit of capacity that is available foruse.</t> <t>Type: Unsigned Integer.</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> <t>Property: maximum-soft<list style="empty"> <t>Description: Ause.</dd> <dt>Type:</dt><dd>Unsigned Integer.</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> <dt>Property:</dt><dd><t>maximum-soft</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>A soft limit at which a uCDNSHOULD<bcp14>SHOULD</bcp14> reduce traffic before hitting the hard limit. This valueMUST<bcp14>MUST</bcp14> be less than the value of maximum-hard. If this value is not specified, it is equal to the value ofmaximum-hard.</t> <t>Type: Unsigned Integer.</t> <t>Mandatory-to-Specify: No.</t> </list></t> <t>Property: current<list style="empty"> <t>Description: Specifiesmaximum-hard.</dd> <dt>Type:</dt><dd>Unsigned Integer.</dd> <dt>Mandatory-to-Specify:</dt><dd>No.</dd> </dl> </dd> <dt>Property:</dt><dd><t>current</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>Specifies the current usage value of the limit. It isNOT RECOMMENDED<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 <xreftarget="telemetry-source-object"/>)target="telemetry-source-object" format="default"/>) to poll for the currentusage.</t> <t>Type: Unsigned Integer.</t> <t>Mandatory-to-Specify: No.</t> </list></t> <t>Property: telemetry-source<list style="empty"> <t>Description: Mappingusage.</dd> <dt>Type:</dt><dd>Unsigned Integer.</dd> <dt>Mandatory-to-Specify:</dt><dd>No.</dd> </dl> </dd> <dt>Property:</dt><dd><t>telemetry-source</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>The mapping of each particular limit to a specific metric with relevant real-time data provided by a telemetrysource.</t> <t>Type: CapacityLimitTelemetrySourcesource.</dd> <dt>Type:</dt><dd>CapacityLimitTelemetrySource object (see <xreftarget="capacity-limit-telemetry-source-object"/>).</t> <t>Mandatory-to-Specify: No.</t> </list></t> </list></t>target="capacity-limit-telemetry-source-object" format="default"/>).</dd> <dt>Mandatory-to-Specify:</dt><dd>No.</dd> </dl> </dd> </dl> <section anchor="capacity-limit-type"title="CapacityLimit Types"> <t> Belownumbered="true" toc="default"> <name>CapacityLimit Types</name> <t>Below are listed the valid capacity limit-types registered in theCDNI"CDNI Capacity LimitTypesTypes" 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><texttable> <ttcol<table align="center"> <thead> <tr> <th align="left"> Capacity Limit Type</ttcol> <ttcol</th> <th align="left"> Units</ttcol> <c>egress</c><c>Bits</th> </tr> </thead> <tbody> <tr> <td align="left">egress</td> <td align="left">Bits persecond</c> <c>requests</c><c>Requestssecond</td> </tr> <tr> <td align="left">requests</td> <td align="left">Requests persecond</c> <c>storage-size</c><c>Total bytes</c> <c>storage-objects</c><c>Count</c> <c>sessions</c><c>Count</c> <c>cache-size</c><c>Total bytes</c> </texttable>second</td> </tr> <tr> <td align="left">storage-size</td> <td align="left">Total bytes</td> </tr> <tr> <td align="left">storage-objects</td> <td align="left">Count</td> </tr> <tr> <td align="left">sessions</td> <td align="left">Count</td> </tr> <tr> <td align="left">cache-size</td> <td align="left">Total bytes</td> </tr> </tbody> </table> </section> <section anchor="capacity-limit-telemetry-source-object"title="CapacityLimitTelemetrySource Object">numbered="true" toc="default"> <name>CapacityLimitTelemetrySource Object</name> <t> The CapacityLimitTelemetrySource Object refers to a specific metric within a TelemetrySource. </t> <t><list style="empty"> <t>Property: id<list style="empty"> <t>Description: ReferenceSource.</t> <dl spacing="normal" newline="false"> <dt>Property:</dt><dd><t>id</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>Reference to the "id" of a telemetry source defined by a Telemetry Capability object as defined in <xreftarget="telemetry-capability-object"/>.</t> <t>Type: String.</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> <t>Property: metric<list style="empty"> <t>Description: Referencetarget="telemetry-capability-object" format="default"/>.</dd> <dt>Type:</dt><dd>String.</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> <dt>Property:</dt><dd><t>metric</t> <dl spacing="normal" newline="false"> <dt>Description:</dt><dd>Reference to the "name" property of a metric defined within a telemetry source of a Telemetry Capabilityobject.</t> <t>Type: String.</t> <t>Mandatory-to-Specify: Yes.</t> </list></t> </list></t>object.</dd> <dt>Type:</dt><dd>String.</dd> <dt>Mandatory-to-Specify:</dt><dd>Yes.</dd> </dl> </dd> </dl> </section> </section> <section anchor="capacity-limit-object-serialization"title="CapacityLimitnumbered="true" toc="default"> <name>CapacityLimit ObjectSerialization">Serialization</name> <t> The following shows an example of an FCI.CapacityLimitsobject. </t> <figure> <sourcecode> <![CDATA[object.</t> <sourcecode type=""><![CDATA[ { "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":[ "<footprint objects>" ] } ]} ]]> </sourcecode> </figure>}]]></sourcecode> </section> </section> </section> <section anchor="IANA"title="IANA Considerations">numbered="true" toc="default"> <name>IANA Considerations</name> <section anchor="IANA.cdni.payload.types"title="CDNInumbered="true" toc="default"> <name>CDNI PayloadTypes"> <t> This document requests the registration ofTypes</name> <t>Per this document, IANA has registered two additional payload typestoin theContent Delivery Network Interconnection (CDNI) Parameters"CDNI Payload Types"registry: </t> <texttable> <ttcol align="left"> Payload Type </ttcol> <ttcol align="left"> Specification </ttcol> <c>FCI.Telemetry</c><c>RFCthis</c> <c>FCI.CapacityLimits</c><c>RFCthis</c> </texttable> <t> [RFC Editor: Please replace RFCthis withregistry within thepublished RFC number for this document.]"Content Delivery Network Interconnection (CDNI) Parameters" registry group: </t> <table align="center"> <thead> <tr> <th align="left">Payload Type</th> <th align="left">Reference</th> </tr> </thead> <tbody> <tr> <td align="left">FCI.Telemetry</td> <td align="left">RFC 9808</td> </tr> <tr> <td align="left">FCI.CapacityLimits</td> <td align="left">RFC 9808</td> </tr> </tbody> </table> <section anchor="IANA.cdni.fci.telemetry.payload.type"title="CDNInumbered="true" toc="default"> <name>CDNI FCI Telemetry PayloadType"> <t><list style="empty"> <t>Purpose: TheType</name> <dl spacing="normal" newline="false"> <dt>Purpose:</dt><dd>The purpose of this Payload Type is to list the supported telemetry sources and the metrics made available by eachsource.</t> <t>Interface: FCI.</t> <t>Encoding: Seesource.</dd> <dt>Interface:</dt><dd>FCI.</dd> <dt>Encoding:</dt><dd>See <xreftarget="telemetry-capability-object"/>.</t> </list></t>target="telemetry-capability-object" format="default"/>.</dd> </dl> </section> <section anchor="IANA.cdni.fci.capacity.limits.payload.type"title="CDNInumbered="true" toc="default"> <name>CDNI FCI Capacity Limits PayloadType"> <t><list style="empty"> <t>Purpose: TheType</name> <dl spacing="normal" newline="false"> <dt>Purpose:</dt><dd>The purpose of this Payload Type is to define Capacity Limits based on utilization metrics corresponding to telemetry sources provided by thedCDN.</t> <t>Interface: FCI.</t> <t>Encoding: SeedCDN.</dd> <dt>Interface:</dt><dd>FCI.</dd> <dt>Encoding:</dt><dd>See <xreftarget="capacity-limits-capability-object"/>.</t> </list></t>target="capacity-limits-capability-object" format="default"/>.</dd> </dl> </section> </section> <section anchor="IANA.cdni.telemetry.registry"title=""CDNInumbered="true" toc="default"> <name>CDNI Telemetry SourceTypes" Registry"> <t> IANA will addTypes Registry</name> <t>IANA has added the following new registrytowithin the "Content Delivery Network Interconnection (CDNI) Parameters" registry group athttps://www.iana.org/assignments/cdni-parameters: </t> <t>Registry Name: CDNI<eref target="https://www.iana.org/assignments/cdni-parameters" brackets="angle"/>:</t> <dl spacing="normal" newline="false"> <dt>Registry Name:</dt><dd>CDNI Telemetry SourceTypes</t> <t>Registry Description: The CDNITypes</dd> <dt>Registry Description:</dt><dd>The "CDNI Telemetry SourceTypesTypes" registry defines the valid values for the "type" property of the Telemetry Source object defined in <xreftarget="telemetry-source-object"/>.</t> <t>Registration Procedure: Thetarget="telemetry-source-object" format="default"/>.</dd> <dt>Registration Procedure:</dt><dd><t>The registry follows the Specification Required policy as defined in <xref target="RFC8126"/>.format="default"/>. TheDesignated Expertdesignated expert should consider the following guidelines when evaluating registration requests:</t><list style="symbols"> <t>The<ul spacing="normal"> <li>The new type definition does not duplicate existingtypes.</t> <t>Thetypes.</li> <li>The review should verify that the telemetry source is applicable to the CDNI use cases and that the description is clear andunambiguous.</t> <t>Theunambiguous.</li> <li>The registration is applicable for general use and is notproprietary.</t> <t>Theproprietary.</li> <li>The "configuration" property has a fully specified object definition with a description of each definedproperty.</t> </list>property.</li> </ul> </dd> </dl> <t>The followingvalues will bevalue has been registered:</t><texttable> <ttcol align="left"><!--[rfced] We note that Table 1 includes a description of the "generic" source type, whereas Table 4 and the IANA registry do not. Should the description be added to Table 4 and the IANA registry? In Section 2.1.1.1, should Table 1 be replaced with a link to Table 4 to avoid duplication? Current (Section 2.1.1.1): At the time of this writing, the registry of valid Telemetry Source Object types is limited to a single type: Generic (see Section 3.2.1). Perhaps A: At the time of this writing, the registry of valid Telemetry Source Types is limited to a single type: generic (see Table 4 in Section 3.2.1). or Perhaps B: At the time of this writing, the "CDNI Telemetry Source Types" registry is limited to a single type: generic (see Table 4 in Section 3.2.1). ... Current (Section 3.2): +=============+===========+ | Source Type</ttcol> <ttcol align="left"> Specification </ttcol> <c>generic</c><c>RFCthis</c> </texttable>| Reference | +=============+===========+ | generic | RFC 9808 | +=============+===========+ Table 4 Perhaps: +=============+=======================================+===========+ | Source Type | Description | Reference | +=============+=======================================+===========+ | generic | An object that allows for | RFC 9808 | | | advertisement of generic data sources | | +=============+=======================================+===========+ Table 4 --> <table align="center"> <thead> <tr> <th align="left">Source Type</th> <th align="left">Reference</th> </tr> </thead> <tbody> <tr> <td align="left">generic</td> <td align="left">RFC 9808</td> </tr> </tbody> </table> <section anchor="IANA.cdni.telemetry.generic"title="CDNInumbered="true" toc="default"> <name>CDNI Generic Telemetry SourceType"> <t><list style="empty"> <t>Purpose: TheType</name> <dl spacing="normal" newline="false"> <dt>Purpose:</dt><dd>The purpose of this Telemetry Source Type is to provide a source-agnostic telemetry type that may be used for generic telemetry sourceadvertisement.</t> <t>Usage: Seeadvertisement.</dd> <dt>Usage:</dt><dd>See <xreftarget="telemetry-source-object"/>.</t> </list></t>target="telemetry-source-object" format="default"/>.</dd> </dl> </section> </section><!-- New CDNI Capacity Limit Types Registry --><section anchor="IANA.cdni.capacity.registry"title=""CDNInumbered="true" toc="default"> <name>CDNI Capacity LimitTypes" Registry"> <t> IANA will addTypes Registry</name> <t>IANA has added the following new registrytowithin the "Content Delivery Network Interconnection (CDNI) Parameters" registry group athttps://www.iana.org/assignments/cdni-parameters: </t> <t>Registry Name: CDNI<eref target="https://www.iana.org/assignments/cdni-parameters" brackets="angle"/>:</t> <dl spacing="normal" newline="false"> <dt>Registry Name:</dt><dd>CDNI Capacity LimitTypes</t> <t>Registry Description: The CDNITypes</dd> <dt>Registry Description:</dt><dd>The "CDNI Capacity LimitTypesTypes" registry defines the valid values of the "limit-type" property of a CapacityLimit object defined in <xreftarget="capacity-limit-object"/>.</t> <t>Registration Procedure: Thetarget="capacity-limit-object" format="default"/>.</dd> <dt>Registration Procedure:</dt><dd><t>The registry follows the Specification Required policy as defined in <xref target="RFC8126"/>.format="default"/>. TheDesignated Expertdesignated expert should consider the following guidelines when evaluating registration requests:</t><list style="symbols"> <t>The<ul spacing="normal"> <li>The new capacity limit type does not duplicate existingentries.</t> <t>Theentries.</li> <li>The submission has a defined purpose. The newly defined capacity limit type should be clearly justified in the context of one or more CDNI usecases.</t> <t>Thecases.</li> <li>The description of the capacity limit type is well-documented andunambiguous.</t> </list>unambiguous.</li> </ul> </dd> </dl> <t>The following valueswill behave been registered:</t><texttable> <ttcol align="left"> Capacity<table align="center"> <thead> <tr> <th align="left">Capacity LimitType </ttcol> <ttcol align="left"> Units </ttcol> <ttcol align="left"> Specification </ttcol> <c>egress</c><c>BitsType</th> <th align="left">Units</th> <th align="left">Reference</th> </tr> </thead> <tbody> <tr> <td align="left">egress</td> <td align="left">Bits persecond</c><c>RFCthis</c> <c>requests</c><c>Requestssecond</td> <td align="left">RFC 9808</td> </tr> <tr> <td align="left">requests</td> <td align="left">Requests persecond</c><c>RFCthis</c> <c>storage-size</c><c>Total bytes</c><c>RFCthis</c> <c>storage-objects</c><c>Count</c><c>RFCthis</c> <c>sessions</c><c>Count</c><c>RFCthis</c> <c>cache-size</c><c>Total bytes</c><c>RFCthis</c> </texttable> <t>Usage: Seesecond</td> <td align="left">RFC 9808</td> </tr> <tr> <td align="left">storage-size</td> <td align="left">Total bytes</td> <td align="left">RFC 9808</td> </tr> <tr> <td align="left">storage-objects</td> <td align="left">Count</td> <td align="left">RFC 9808</td> </tr> <tr> <td align="left">sessions</td> <td align="left">Count</td> <td align="left">RFC 9808</td> </tr> <tr> <td align="left">cache-size</td> <td align="left">Total bytes</td> <td align="left">RFC 9808</td> </tr> </tbody> </table> <dl spacing="normal" newline="false"> <dt>Usage:</dt><dd>See <xreftarget="capacity-limit-type"/>.</t>target="capacity-limit-type" format="default"/>.</dd> </dl> </section> </section> <section anchor="Security"title="Security Considerations"> <t> Thisnumbered="true" toc="default"> <name>Security Considerations</name> <t>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 inSection 7 of<xref section="7" target="RFC8008"/>. </t> </section> <section anchor="Acknowledgements" title="Acknowledgements"> <t> The authors would like to express their gratitude to the members of the Streaming Video Technology Alliance <xref target="SVTA"/> Open Caching Working Group for their guidance, contribution, and review.format="default"/>. </t> </section> </middle> <back><references title="Normative References"> <?rfc include="reference.RFC.2119"?> <?rfc include="reference.RFC.8008"?> <?rfc include="reference.RFC.8126"?> <?rfc include="reference.RFC.8174"?><references> <name>References</name> <references> <name>Normative References</name> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8008.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> </references><references title="Informative References"> <?rfc include="reference.RFC.8006"?> <?rfc include="reference.RFC.6707"?><references> <name>Informative References</name> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8006.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6707.xml"/> <reference anchor="SVTA" target="https://www.svta.org"> <front><title> Streaming<title>Streaming Video Technology Alliance HomePage </title> <author /> <date />Page</title> <author/> <date/> </front> </reference> <!-- [rfced] We note that the following reference entries are not cited anywhere in the document. These entries will be removed prior to publication, unless you would like to let us know where they may be added in the text. [OC-CII] Ryan, A., Ed., Rosenblum, B., Goldstein, G., Roskin, R., and G. Bichot, "Open Caching Capacity Insights - Functional Specification (Placeholder before publication)", <https://www.svta.org/document/open- caching-capacity-interface/>. [OC-RR] Finkelman, O., Ed., Hofmann, J., Klein, E., Mishra, S., Ma, K., Sahar, D., and B. Zurat, "Open Caching Request Routing - Functional Specification", Version 1.1, 4 October 2019, <https://www.svta.org/product/open-cache- request-routing-functional-specification/>. [OCWG] "Open Caching Home Page", <https://opencaching.svta.org/>. --> <!-- [OCWG] Not referenced in the text <reference anchor="OCWG" target="https://opencaching.svta.org/"> <front> <title> Open Caching Home Page </title><author /> <date /><author/> <date/> </front> </reference> --> <!-- [OC-CII] Not referenced in the text <reference anchor="OC-CII" target="https://www.svta.org/document/open-caching-capacity-interface/"> <front> <title> Open Caching Capacity Insights - Functional Specification (Placeholder before publication) </title> <author initials="A." surname="Ryan" fullname="Andrew Ryan" role="editor"> <organization> Limelight Networks </organization> </author> <author initials="B." surname="Rosenblum" fullname="Ben Rosemblum"> <organization> Vecima </organization> </author> <author initials="G." surname="Goldstein" fullname="Glenn Goldstein"> <organization> Lumen Technologies </organization> </author> <author initials="R." surname="Roskin" fullname="Rob Roskin"> <organization> Lumen Technologies </organization> </author> <author initials="G." surname="Bichot" fullname="Guillaume Bichot"> <organization> Broadpeak </organization> </author><date /><date/> </front> </reference> --> <!-- [OC-RR] Not referenced in the text <reference anchor="OC-RR" target="https://www.svta.org/product/open-cache-request-routing-functional-specification/"> <front> <title> Open Caching Request Routing - Functional Specification </title> <author initials="O." surname="Finkelman" fullname="Ori Finkelman" role="editor"> <organization> Qwilt </organization> </author> <author initials="J." surname="Hofmann" fullname="Jason Hofmann"> <organization> Limelight Networks </organization> </author> <author initials="E." surname="Klein" fullname="Eric Klein"> <organization> Disney Streaming Services </organization> </author> <author initials="S." surname="Mishra" fullname="Sanjay Mishra"> <organization> Verizon </organization> </author> <author initials="K." surname="Ma" fullname="Kevin J. Ma"> <organization> Disney Streaming Services </organization> </author> <author initials="D." surname="Sahar" fullname="Dan Sahar"> <organization> Qwilt </organization> </author> <author initials="B." surname="Zurat" fullname="Bill Zurat"> <organization> Disney Streaming Services </organization> </author> <date day="4" month="October"year="2019" />year="2019"/> </front> <seriesInfo name="Version"value="1.1" />value="1.1"/> </reference> --> </references> </references> <section anchor="Acknowledgements" numbered="false" toc="default"> <name>Acknowledgements</name> <t>The authors would like to express their gratitude to the members of the Streaming Video Technology Alliance <xref target="SVTA" format="default"/> Open Caching Working Group for their guidance, contribution, and review. </t> </section> </back> <!-- [rfced] Terminology a) Throughout the text, the following terminology appears to be used inconsistently. Please review these occurrences and let us know if/how they may be made consistent. capability object type Capability Objects capacity limit-types Capacity Limits CDNI Capacity Limit Types CapacityLimit Object CapacityLimit object CapacityLimits Capability Object FCI capability FCI.Capability FCI.Capabilities limit-type limit type Limit Type Payload types Payload Types Telemetry Capability object Telemetry Capability Object Telemetry Source telemetry source Telemetry sources Telemetry Source Type telemetry source type Telemetry Source Metric Object Telemetry Source Metric objects Telemetry Source Object Telemetry Source object b) Should the payload types in the following titles be updated to match the payload types listed in Table 3? Original: 3.1.1. CDNI FCI Telemetry Payload Type 3.1.2. CDNI FCI Capacity Limits Payload Type Perhaps: 3.1.1. CDNI FCI.Telemetry Payload Type 3.1.2. CDNI FCI.CapacityLimits Payload Type --> <!--[rfced] FYI - We updated the following expansions to the form on the right for consistency within this document and/or the RFC Series. Please let us know of any objections. Content Delivery Networks Interconnection (CDNI) -> Content Delivery Network Interconnection (CDNI) Footprints & Capabilities Advertisement Interface (FCI) -> Footprint & Capabilities Advertisement interface (FCI) Time To Live (TTL) -> Time to Live (TTL) --> <!-- [rfced] Please consider whether the "type" attribute of any sourcecode element should be set. The current list of preferred values for "type" is available at <https://www.rfc-editor.org/rpc/wiki/doku.php?id=sourcecode-types>. If the current list does not contain an applicable type, feel free to suggest additions for consideration. Note that it is also acceptable to leave the "type" attribute not set. --> <!-- [rfced] Please review whether any of the notes in this document should be in the <aside> element. It is defined as "a container for content that is semantically less important or tangential to the content that surrounds it" (https://authors.ietf.org/en/rfcxml-vocabulary#aside). --> <!-- [rfced] Please review the "Inclusive Language" portion of the online Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language> and let us know if any changes are needed. Updates of this nature typically result in more precise language, which is helpful for readers. Note that our script did not flag any words in particular, but this should still be reviewed as a best practice. --> </rfc>