RFC 9808

Content Delivery Network Interconnection (CDNI) Capacity Capability Advertisement Extensions

๐Ÿ“… published July 2025, from ietf

RFC 9808: CDNI Capacity Capability Advertisement Extensions ๐Ÿ’–

Title block tea โ˜•โœจ

Okay bestie, first the receipts. This is RFC 9808, and it's a Standards Track doc, so it's an actual Internet Standard, not just a vibe. It was published in July 2025 and its ISSN is 2070-1721. It's a Content Delivery Network Interconnection (CDNI) spec called Capacity Capability Advertisement Extensions. The authors are A. Ryan (Disney Streaming), B. Rosenblum (Vecima), and N. Sopher (Qwilt). The title block doesn't list anything this RFC obsoletes or updates. What it does is supplement RFC 8008. ๐Ÿฆ‹

Abstract

This spec defines a bunch of extra Capability Objects ๐Ÿงš that tell the upstream CDN (uCDN) how much the downstream CDN (dCDN) is currently using, plus any usage limits it has set. The uCDN uses that info to make smarter traffic delegation decisions. It's giving "know your limits" energy ๐Ÿ’…

It builds on the CDNI Capability Objects from RFC 8008, which live inside the Footprint & Capabilities Advertisement Interface (FCI). This doc adds two new Capability Objects: FCI.CapacityLimits and FCI.Telemetry. โœจ

Status of This Memo

Okay, this part is the official paperwork, but it's still cute. It's an Internet Standards Track document ๐ŸŽ€

It's a product of the Internet Engineering Task Force (IETF), which means it reflects the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check Section 2 of RFC 7841.

To get the current status, any errata, or to leave feedback, go to https://www.rfc-editor.org/info/rfc9808 ๐ŸŒธ

Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved. ๐Ÿ”’

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents, which you can find at https://trustee.ietf.org/license-info (as in effect on the publication date). Read these carefully because they lay out your rights and restrictions for this doc. Any Code Components pulled out of this document must include the Revised BSD License text described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as the Revised BSD License says. ๐Ÿ“œ

Table of Contents

   1.  Introduction
     1.1.  Terminology
     1.2.  Requirements Language
     1.3.  Objectives
   2.  CDNI Additional Capability Objects
     2.1.  Telemetry Capability Object
       2.1.1.  Telemetry Source Object
         2.1.1.1.  Telemetry Source Types
         2.1.1.2.  Telemetry Source Metric Object
       2.1.2.  Telemetry Capability Object Serialization
     2.2.  CapacityLimits Capability Object
       2.2.1.  CapacityLimit Object
         2.2.1.1.  CapacityLimit Types
         2.2.1.2.  CapacityLimitTelemetrySource Object
       2.2.2.  CapacityLimit Object Serialization
   3.  IANA Considerations
     3.1.  CDNI Payload Types
       3.1.1.  CDNI FCI.Telemetry Payload Type
       3.1.2.  CDNI FCI.CapacityLimits Payload Type
     3.2.  CDNI Telemetry Source Types Registry
       3.2.1.  CDNI Generic Telemetry Source Type
     3.3.  CDNI Capacity Limit Types Registry
   4.  Security Considerations
   5.  References
     5.1.  Normative References
     5.2.  Informative References
   Acknowledgements
   Authors' Addresses

1. Introduction ๐ŸŒท

Okay so, when you're delegating traffic from an upstream CDN (uCDN) to a downstream CDN (dCDN), you really want to make sure you're delegating the right amount. ๐Ÿ˜ค This spec gives the delegator a feedback loop that says how much traffic it can send over. The traffic level info goes to stuff like a request router, which uses it for its own delegation decisions. Just know the info is advisory. It is NOT a guarantee, commitment, or reservation of capacity ๐Ÿ™…โ€โ™€๏ธ

This document defines and registers CDNI Payload Types (see Section 7.1 of [RFC8006]). These Payload Types are for Capability Objects, which get added to the ones already defined in Section 4 of [RFC8008]. ๐ŸŽ

1.1. Terminology

Here's the vocab we're using everywhere in this doc:

  • CDN: Content Delivery Network

The doc also reuses the terminology from [RFC6707]. So the CDNI acronyms are:

  • uCDN: upstream CDN
  • dCDN: downstream CDN

1.2. Requirements Language

This one's the rulebook for the capital-letter words ๐Ÿ“ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be read as described in BCP 14 [RFC2119] [RFC8174], but only when they show up in ALL CAPS, exactly like that. ๐Ÿ’…

1.3. Objectives

Okay, here's the big picture of how uCDNs and dCDNs talk about how much traffic is okay to delegate ๐Ÿ—ฃ๏ธ

In normal operation, a uCDN talks to a dCDN through an interface to collect and understand any limits the dCDN has set for traffic delegated from that uCDN. These limits show up as metrics like bits per second, requests per second, and so on. Think of them as Not to Exceed (NTE) limits. ๐Ÿšซ
The dCDN should give access to a Telemetry Source of near real-time metrics that the uCDN can use to track its current usage. The uCDN should compare its current usage with the limits the dCDN put out there, then adjust its traffic delegation decisions to keep usage under those limits. ๐Ÿ“Š
So basically, the dCDN tells the uCDN how much traffic can be delegated. It also provides a Telemetry Source that matches that limit, so the uCDN can watch its usage against the advertised number. Pairing a limit with a matching Telemetry Source makes the definition unambiguous, and both parties understand it the same way. ๐Ÿซถ

Limits the dCDN sends to the uCDN should be treated as valid based on the Time to Live (TTL) from the underlying transport mechanism, like an HTTP Cache-Control header. The idea is that limits have a long-lived TTL and represent a reasonable peak utilization target for the uCDN. If the underlying transport doesn't give the dCDN a way to communicate the TTL of the limits, the TTL should be communicated through an out-of-band mechanism that the dCDN and uCDN agree on. โณ

2. CDNI Additional Capability Objects ๐ŸŽ€

Section 5 of [RFC8008] describes the FCI Capability Advertisement Object. It holds a CDNI Capability Object along with the capability-type (which is a CDNI Payload Type). That section also defines the Capability Objects for each type. Down below, we define two more Capability Objects ๐Ÿคฉ

Note: In the sections that follow, "mandatory-to-specify" tells you which properties MUST be included when serializing a given capability object. If a property is marked as "Yes" for mandatory-to-specify, that means that if the object holding that property shows up in an FCI message, the mandatory-to-specify property MUST be included too. โš ๏ธ

2.1. Telemetry Capability Object

The Telemetry Capability Object advertises a list of Telemetry Sources the dCDN makes available to the uCDN. In this doc, telemetry data is near real-time aggregated metrics of dCDN utilization, like bits per second egress. It's specific to the uCDN and dCDN traffic delegation relationship ๐Ÿ“ก

Telemetry data is uniquely identified by a source ID, a metric name, and the footprints associated with an FCI Capabilities advertisement. When you define a CapacityLimit, the meaning of a limit could be ambiguous if the uCDN and dCDN are looking at telemetry from different data sources. A dCDN-provided Telemetry Source that both parties reference is the non-ambiguous metric to use when comparing current usage against a limit. ๐Ÿ™Œ

Telemetry data is super important for making informed traffic delegation decisions. It's also essential for visibility into traffic that has been delegated. When there are multiple CDN delegations, a uCDN needs to aggregate usage info from every dCDN it delegated to whenever it's asked for usage info. Otherwise the traffic might look unaccounted for ๐Ÿ‘€

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 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. ๐Ÿ˜ฑ

Property: sources

Description: The Telemetry Sources made available to the uCDN. ๐Ÿ“ฆ

Type: A JSON array of Telemetry Source objects (see Section 2.1.1).

Mandatory-to-Specify: Yes

2.1.1. Telemetry Source Object

The Telemetry Source Object is made of an associated type, a list of exposed metrics, and type-specific configuration data. ๐Ÿงฉ

Property: id

Description: An identifier of a telemetry source. The ID string assigned to this Telemetry Source MUST be unique across all Telemetry Source objects in the advertisement that contains this Telemetry Source Object. The ID string MUST remain consistent for the same source reference across advertisements. ๐Ÿ†”

Type: String

Mandatory-to-Specify: Yes

Property: type

Description: A valid Telemetry Source Type (see Section 2.1.1.1).

Type: String

Mandatory-to-Specify: Yes

Property: metrics

Description: The metrics this source exposes.

Type: A JSON array of Telemetry Source Metric Objects (see Section 2.1.1.2).

Mandatory-to-Specify: Yes

Property: configuration

Description: A source-specific representation of the Telemetry Source configuration. For the generic source type, this configuration format is defined 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 forward compatibility with a formal telemetry interface. ๐Ÿ”ฎ

Type: A JSON object. Its structure is specific to the Telemetry Source and is outside the scope of this document.

Mandatory-to-Specify: No

2.1.1.1. Telemetry Source Types

Right now, the "CDNI Telemetry Source Types" registry only has one type: generic (see Table 3 in Section 3.2.1). That's it, that's the tea ๐Ÿซ–

2.1.1.2. Telemetry Source Metric Object โœจ

Okay so this one describes the metric that gets exposed ๐Ÿ“Š Here are the properties:

  • Property: name
    • Description: An identifier for this metric. This name MUST be unique among metric objects within the containing Telemetry Source. The name MUST remain consistent for the same source reference across advertisements.
    • Type: String
    • Mandatory-to-Specify: Yes
  • Property: time-granularity
    • Description: The time, in seconds, representing the metric data. For example, a value representing the last 5 minutes would have a time-granularity of 300. ๐Ÿ•”
    • Type: Unsigned Integer
    • Mandatory-to-Specify: No
  • Property: data-percentile
    • Description: 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 MUST be the mean over the time representation. ๐Ÿงฎ
    • Type: Unsigned Integer
    • Mandatory-to-Specify: No
  • Property: latency
    • Description: 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. โณ
    • Type: Unsigned Integer
    • Mandatory-to-Specify: No

2.1.2. Telemetry Capability Object Serialization ๐ŸŽ€

Here's an example of a Telemetry Capability Object. It has two metrics for a source and is scoped to a footprint. Look at how clean it is ๐Ÿ˜ญ๐Ÿซถ

{
  "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>
      ]
    }
  ]
}

2.2. CapacityLimits Capability Object ๐Ÿ’–

The CapacityLimits Capability Object lets the dCDN set traffic delegation limits for a uCDN inside an FCI Capabilities advertisement. These limits tell the uCDN how much traffic it can delegate to the dCDN ๐Ÿฆ‹ The limits the dCDN sets should be considered NTE limits. They should also be based on near real-time telemetry data that the dCDN gives to the uCDN. So basically, for every limit that gets advertised, there should also be a Telemetry Source showing current utilization against that exact limit. The receipts have to match, bestie ๐Ÿ’…

  • Property: limits
    • Description: A collection of CapacityLimit Objects.
    • Type: A JSON array of CapacityLimit Objects (see Section 2.2.1).
    • Mandatory-to-Specify: Yes

2.2.1. CapacityLimit Object ๐Ÿ‘‘

A CapacityLimit Object represents traffic limits for delegation from the uCDN towards the dCDN. The limit object is scoped to the footprint attached to the FCI Capabilities advertisement that contains it. Limits MUST be considered using a logical "AND": a uCDN has to make sure every limit gets considered, not just picking the most specific one. No skipping, periodt ๐Ÿ™…โ€โ™€๏ธโœจ

  • Property: limit-type
    • Description: The units of maximum-hard and maximum-soft.
    • Type: String. One of the values listed in Section 2.2.1.1.
    • Mandatory-to-Specify: Yes
  • Property: id
    • Description: Specifies an identifier associated with a limit. This MAY be used as a relational identifier to a specific CapacityLimit Object. If specified, this identifier MUST be unique among specified identifiers associated with any other CapacityLimit Objects in the advertisement containing this CapacityLimit Object. ๐Ÿท๏ธ
    • Type: String
    • Mandatory-to-Specify: No
  • Property: maximum-hard
    • Description: The maximum unit of capacity that is available for use.
    • Type: Unsigned Integer
    • Mandatory-to-Specify: Yes
  • Property: maximum-soft
    • Description: A soft limit at which a uCDN SHOULD reduce traffic before hitting the hard limit. This value MUST be less than the value of maximum-hard. If this value is not specified, it is equal to the value of maximum-hard. ๐Ÿšฆ
    • Type: Unsigned Integer
    • Mandatory-to-Specify: No
  • Property: current
    • Description: Specifies the current usage value of the limit. It is NOT RECOMMENDED to specify the current usage value inline with the FCI.CapacityLimits advertisements, because it makes the response harder to cache. This mechanism still exists for simple cases where an external Telemetry Source can't realistically be set up. The intended method for providing telemetry is to reference a Telemetry Source Object (see Section 2.1.1) and poll it for current usage. ๐Ÿ“‰
    • Type: Unsigned Integer
    • Mandatory-to-Specify: No
  • Property: telemetry-source
    • Description: The mapping of each particular limit to a specific metric with relevant real-time data provided by a Telemetry Source. ๐Ÿ”—
    • Type: CapacityLimitTelemetrySource object (see Section 2.2.1.2).
    • Mandatory-to-Specify: No

2.2.1.1. CapacityLimit Types ๐ŸŒธ

Here are the valid limit-type entries registered in the "CDNI Capacity Limit Types" registry. These are the types that were picked as the most relevant metrics for traffic delegation between CDNs, so they're the main ones you'll see ๐Ÿซถ

            +=====================+=====================+
            | Capacity Limit Type | Units               |
            +=====================+=====================+
            | egress              | Bits per second     |
            +---------------------+---------------------+
            | requests            | Requests per second |
            +---------------------+---------------------+
            | storage-size        | Total bytes         |
            +---------------------+---------------------+
            | storage-objects     | Count               |
            +---------------------+---------------------+
            | sessions            | Count               |
            +---------------------+---------------------+
            | cache-size          | Total bytes         |
            +---------------------+---------------------+

                               Table 1

2.2.1.2. CapacityLimitTelemetrySource Object ๐Ÿงš

The CapacityLimitTelemetrySource Object points at one specific metric inside a Telemetry Source. Think of it as the address label on the envelope ๐Ÿ’Œ

  • Property: id
    • Description: Reference to the "id" of a Telemetry Source defined by a Telemetry Capability Object as defined in Section 2.1.
    • Type: String
    • Mandatory-to-Specify: Yes
  • Property: metric
    • Description: Reference to the "name" property of a metric defined within a Telemetry Source of a Telemetry Capability object.
    • Type: String
    • Mandatory-to-Specify: Yes

2.2.2. CapacityLimit Object Serialization ๐Ÿ“

Here's an example of an FCI.CapacityLimits object. It's giving clean JSON energy ๐Ÿ’œ

{
  "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>"
      ]
    }
  ]
}

3. IANA Considerations ๐ŸŒˆ

3.1. CDNI Payload Types ๐Ÿ’…

Per this document, IANA has registered two new payload types in the "CDNI Payload Types" registry, which sits inside the "Content Delivery Network Interconnection (CDNI) Parameters" registry group:

                 +====================+===========+
                 | Payload Type       | Reference |
                 +====================+===========+
                 | FCI.Telemetry      | RFC 9808  |
                 +--------------------+-----------+
                 | FCI.CapacityLimits | RFC 9808  |
                 +--------------------+-----------+

                              Table 2

3.1.1. CDNI FCI.Telemetry Payload Type ๐Ÿ“ก

  • Purpose: The purpose of this Payload Type is to list the supported Telemetry Sources and the metrics made available by each source.
  • Interface: FCI
  • Encoding: See Section 2.1.

3.1.2. CDNI FCI.CapacityLimits Payload Type ๐Ÿ”ฅ

  • Purpose: The purpose of this Payload Type is to define Capacity Limits based on utilization metrics corresponding to Telemetry Sources provided by the dCDN.
  • Interface: FCI
  • Encoding: See Section 2.2.

3.2. CDNI Telemetry Source Types Registry ๐Ÿฆ‹

IANA has added a new registry inside the "Content Delivery Network Interconnection (CDNI) Parameters" registry group, at https://www.iana.org/assignments/cdni-parameters.

  • Registry Name: CDNI Telemetry Source Types
  • Registry Description: The "CDNI Telemetry Source Types" registry defines the valid values for the "type" property of the Telemetry Source object defined in Section 2.1.1.
  • Registration Procedure: The registry follows the Specification Required policy as defined in [RFC8126]. The designated expert should consider the following guidelines when evaluating registration requests:
    • The new type definition does not duplicate existing types.
    • The review should verify that the Telemetry Source is applicable to the CDNI use cases and that the description is clear and unambiguous.
    • The registration is applicable for general use and is not proprietary.
    • The "configuration" property has a fully specified object definition with a description of each defined property.

The following value has been registered:

  +=============+=======================================+===========+
  | Source Type | Description                           | Reference |
  +=============+=======================================+===========+
  | generic     | An object that allows for             | RFC 9808  |
  |             | advertisement of generic data sources |           |
  +-------------+---------------------------------------+-----------+

                                Table 3

3.2.1. CDNI Generic Telemetry Source Type โœจ

  • Purpose: The purpose of this Telemetry Source Type is to provide a source-agnostic telemetry type that may be used for generic Telemetry Source advertisement.
  • Usage: See Section 2.1.1.

3.3. CDNI Capacity Limit Types Registry ๐ŸŽ€

okay so IANA made a brand-new registry ๐Ÿงš It lives inside the "Content Delivery Network Interconnection (CDNI) Parameters" registry group at https://www.iana.org/assignments/cdni-parameters, and it's giving organized ๐Ÿ’…

  • Registry Name: CDNI Capacity Limit Types
  • Registry Description: This is the list of valid values for the "limit-type" property of a CapacityLimit Object, which is defined in Section 2.2.1 ๐Ÿฆ‹
  • Registration Procedure: This one follows the Specification Required policy from [RFC8126]. The designated expert should consider these guidelines when they review a request:
    • The new capacity limit-type does not duplicate existing entries.
    • The submission has a defined purpose. The new capacity limit-type should be clearly justified in the context of one or more CDNI use cases.
    • The description of the capacity limit-type is well-documented and unambiguous.

the values that got registered ๐Ÿ‘‘ all of them point to RFC 9808:

+=====================+=====================+===========+
| Capacity Limit Type | Units               | Reference |
+=====================+=====================+===========+
| egress              | Bits per second     | RFC 9808  |
+---------------------+---------------------+-----------+
| requests            | Requests per second | RFC 9808  |
+---------------------+---------------------+-----------+
| storage-size        | Total bytes         | RFC 9808  |
+---------------------+---------------------+-----------+
| storage-objects     | Count               | RFC 9808  |
+---------------------+---------------------+-----------+
| sessions            | Count               | RFC 9808  |
+---------------------+---------------------+-----------+
| cache-size          | Total bytes         | RFC 9808  |
+---------------------+---------------------+-----------+

Table 4 ๐ŸŒธ

Usage: check out Section 2.2.1.1 for the details ๐Ÿซถ


4. Security Considerations ๐Ÿ”ฅ

okay this part is serious, bestie ๐Ÿ˜ญ This specification is in accordance with the CDNI Request Routing: Footprint and Capabilities Semantics. That means it's subject to the security and privacy considerations defined in Section 7 of [RFC8008]. Go read that section too, no skipping ๐Ÿ™ˆ


5. References ๐Ÿ“š

5.1. Normative References ๐Ÿ’œ

5.2. Informative References ๐Ÿฆ‹


Acknowledgements ๐Ÿซถ

the authors want to give a huge shoutout to the members of the Streaming Video Technology Alliance [SVTA] Open Caching Working Group โœจ thank you for the guidance, the contributions, and the review ๐Ÿ’–


Authors' Addresses ๐Ÿ’Œ

Andrew Ryan
Disney Streaming
1211 Avenue of the Americas
New York, NY 10036
United States of America
Email: andrew@andrewnryan.com


Ben Rosenblum
Vecima
4375 River Green Pkwy #100
Duluth, GA 30096
United States of America
Email: ben@rosenblum.dev


Nir B. Sopher
Qwilt
6, Ha'harash
Hod HaSharon 4524079
Israel
Email: nir@apache.org
๐Ÿ“ฆ where this page comes from