<?xml version="1.0" encoding="utf-8"?>
<!-- 
     draft-rfcxml-general-template-standard-00
  
     This template includes examples of the most commonly used features of RFCXML with comments 
     explaining how to customise them. This template can be quickly turned into an I-D by editing 
     the examples provided. Look for [REPLACE], [REPLACE/DELETE], [CHECK] and edit accordingly.
     Note - 'DELETE' means delete the element or attribute, not just the contents.
     
     Documentation is at https://authors.ietf.org/en/templates-and-schemas
-->
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema validation and schema-aware editing -->
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> -->
<!-- This third-party XSLT can be enabled for direct transformations in XML processors, including most browsers -->


<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="std"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3"
  tocInclude="true"
  tocDepth="5"
  symRefs="true"
  sortRefs="true"
  consensus="true"
  docName="draft-bichot-delivery-metadata-05"
  >
  
   <front>
      <title abbrev="CDNI Delivery Metadata">CDNI Delivery Metadata</title>
      <author initials="G." surname="Bichot" fullname="Guillaume Bichot">
         <organization>Broadpeak</organization>
         <address>
            <postal>
               <street />
               <city />
               <region />
               <code />
               <country>France</country>
            </postal>
            <email>guillaume.bichot@broadpeak.tv</email>
         </address>
      </author> 

      <author initials="A." surname="Siloniz" fullname="Alfonso Siloniz">
         <organization>Telefonica</organization>
         <address>
            <postal>
               <street />
               <city />
               <region />
               <code />
               <country>Spain</country>
            </postal>
            <email>alfonsosiloniz@gmail.com</email>
         </address>
      </author> 
      <author fullname="Glenn Goldstein" initials="G." surname="Goldstein">
         <organization>Lumen Technologies</organization>
         <address>
            <postal>
               <street />
               <city />
               <region />
               <code />
               <country>US</country>
            </postal>
            <email>glenng1215@gmail.com</email>
         </address>
      </author>
      <date />
      <workgroup>Content Delivery Networks Interconnection</workgroup>
      <abstract>
         <t>
         This specification adds to the core set of configuration metadata defined in RFC8006, providing delivery metadata to define traffic types, request delegation behavior for downstream CDN (dCDN) node selection, and request routing modes of traffic delegation.
         </t>
      </abstract>
   </front>
<middle>
<section anchor="h.3znysh7">
  <name>Introduction</name>
  <t>This specification introduces a set of metadata objects and related footprint and capabilities objects that guide content delivery. The specification includes traffic types and service descriptions, dCDN node selection directives, and request routing metadata.</t>
</section><section anchor="requirements" title="Requirements">
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/>.</t>
</section><section anchor="h.h93e8j4pggmk">
  <name>MI.CdnSelection</name>
  <t>MI.CdnSelection is a GenericMetadata object that allows the uCDN to indicate a preference to the dCDN, in terms of dCDN delivery arrangement selection.</t>
  <t>Configuration metadata is required to select the dCDN delivery networks and/or transport arrangements among a set of possibilities exposed by the dCDN through the Footprint and Capability Interface (the FCI.CdnSelection object). Associated with the dCDN delivery network, there is a default selection policy that is "best-effort",  i.e., the dCDN tries its best to fulfill the requested policy without providing guarantees. </t>
  <t>For more details on Open Caching node selection, refer to  the Open Casting specification <xref target="SVTA2065"/> and Open Caching Request Routing Functional Specification <xref target="SVTA2007"/></t>
  <t>Property: cdn-name</t>
  <ul>
    <li>
      <t>Description: Instructs the dCDN to perform delegation operations for a particular delivery arrangement. The MI.CdnSelection configuration object MUST be associated with the metadata configuration objects dedicated to a particular host or a particular path match (see <xref target="RFC8006"/>)</t>
    </li>
    <li>
      <t>Type: String.  Must be one of those dCDN delivery arrangement names as exposed by the dCDN through the FCI.CdnSelection object.</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: Yes.</t>
    </li>
  </ul>
  <t>Property: cdn-selection</t>
  <ul>
    <li>
      <t>Description: Enforces the selection of this downstream CDN (dCDN) delivery arrangement according to a specified policy.</t>
    </li>
    <li>
      <t>Type: String. One of  "attempt-or-failed", "attempt-or-besteffort", or "best-effort". For either of the first two values,  the delegation MUST be attempted according to  the dCDN delivery arrangement corresponding to the cdn-name property  If this is not possible, it is considered as an error and either fails (configuration failure) or the dCDN continues with a best-effort procedure. The "best-effort" value instructs the dCDN to try its best to fulfill the requested cdn-selection policy with no guarantees. See the Open Casting specification <xref target="SVTA2065"/> for more explanation related to the multicast delivery scenario.</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: No. The value "best-effort" is the default selection policy. </t>
    </li>
  </ul>
  <t>The following is an example of the MI.CdnSelection object:</t>
  <figure>
    <sourcecode><![CDATA[{
  "generic-metadata-type": "MI.CdnSelection",
  "generic-metadata-value": {
    "cdn-name": "MULTICAST",
    "cdn-selection": "attempt-or-failed"
  }
}]]></sourcecode>
  </figure>
</section><section anchor="h.vxay4hjptwpn">
  <name>MI.RequestRouting</name>
  <t>The uCDN requires the ability to indicate whether Hypertext Transfer Protocol (HTTP) redirect, Domain Name System (DNS) redirect, and manifest rewrite are allowed, and indicate which is preferable. This is REQUIRED in cases where the uCDN would like to delegate the traffic relying on the iterative method but knows the client will not support HTTP redirection. In that case, the uCDN needs a means to force the dCDN to perform request routing based on DNS redirect (or manifest rewrite).</t>
  <t>For more details on Open Caching request routing, refer to the Open Caching Request Routing Functional Specification <xref target="SVTA2007"/></t>
  <t>This configuration possibility is useful only if the dCDN can advertise the mode of redirection it supports. There is an ongoing discussion in the IETF CDNI group to understand the semantics behind the redirection modes currently in the Footprint &amp; Capabilities Advertising Interface (I-DNS and I-HTTP). It is not clear whether this indicates that the dCDN supports one or both delegation modes (the request routing performed by the uCDN can only be based on DNS redirect or HTTP redirect, or both), or whether it indicates that the dCDN supports, as its own request routing mode, DNS redirect and/or HTTP redirect. The latter is REQUIRED for this new configuration object to be valid.</t>
  <t>MI.RequestRouting is a GenericMetadata object that allows the uCDN to force the dCDN request routing mode(s) to be applied when working in iterative redirection mode. The list of redirection modes supported by the dCDN is advertised through the  FCI.RedirectionMode object. The list of request routing modes supported by the dCDN is advertised through the  FCI.RequestRoutingMode object documented in the <xref target="h.n6dfs1bc72vm">Capabilities Advertisements</xref> section.</t>
  <t>Property: request-routing-modes</t>
  <ul>
    <li>
      <t>Description: Instructs the dCDN to perform request routing according to one or more preferred modes among those supported and advertised by the dCDN through the FCI.RequestRouting object. One must understand that forcing (instead of letting the dCDN request router select) one particular request routing mode may trigger some inefficiency in the request routing process. </t>
    </li>
    <li>
      <t>Type: Array of iterative request routing modes. The values are: "DNS", "HTTP", or "MANIFEST_REWRITE".</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: No. By default, all request routing modes supported by the dCDN can be used by the dCDN as part of its request routing process.  </t>
    </li>
  </ul>
  <t>The following example, illustrates the uCDN forcing the dCDN to use DNS or HTTP as the method for request routing in case the uCDN performs an iterative delegation (i.e., iterative redirection mode):</t>
  <figure>
    <sourcecode><![CDATA[{
  "generic-metadata-type": "MI.RequestRouting",
  "generic-metadata-value": {
    "request-routing-modes": [ "DNS", "HTTP" ]
  }
}]]></sourcecode>
  </figure>
</section><section anchor="h.e8sm6vtg0eob">
  <name>MI.TrafficType</name>
  <t>Content delivery networks often apply different infrastructure, network routes, and internal metadata for different types of traffic. Delivery of large static objects (such as software downloads), may, for example, use different edge servers and network routes than video stream delivery. In an HTTP adaptive bitrate video service, every video title corresponds to a set of video files and descriptors according to different video protocols, and this is independent of the type of service (video-on-demand, live, catch-up, etc.).</t>
  <t>The way the video service is consumed by the user agents can vary. For instance, a segment that belongs to a video on demand (VOD) title can be requested for every moment the content is available for the user agents to consume, while a segment of live content will be only requested as long as the time-shift duration is configured for that service. Knowing those differences, a provider can implement specific strategies that will maximize performance and thereby provide more available capacity to the upstream provider. It should be noted that the dCDNs handling of the traffic types is implementation-specific and not prescribed here.</t>
  <t>MI.TrafficType metadata defines a set of descriptors that characterize either the type or usage of the traffic, enabling providers to apply any internal configuration rules without exposing an unnecessary number of internal details. Note that the interpretation of these traffic types and application of rules, such as rate limiting or delivery pacing, are implementation specific.</t>
  <t>Property: traffic-type</t>
  <ul>
    <li>
      <t>Description: Designates the traffic type. The uCDN will use the literal that is most representative of the traffic being delegated. </t>
    </li>
    <li>
      <t>Type: String, one of (vod | live | object-download)</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: Yes</t>
    </li>
  </ul>
  <t>Property: hints</t>
  <ul>
    <li>
      <t>Description: Other traffic characteristics that the uCDN can indicate to the dCDN as suggestions for service optimization. This property accepts by default free-form unconstrained values Some SVTA specifications may impose some well-defined values, as with the Open Casting specification <xref target="SVTA2065"/></t>
    </li>
    <li>
      <t>Type: Array of strings</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: No</t>
    </li>
  </ul>
  <t>The following is an example of MI.TrafficType that designates VOD catch-up TV viewing:</t>
  <t> </t>
  <figure>
    <sourcecode><![CDATA[{
  "generic-metadata-type": "MI.TrafficType",
  "generic-metadata-value": {
    "traffic-type": "vod",
    "hints": [ "catch-up"]
  }
}]]></sourcecode>
  </figure>
</section><section anchor="h.bhnrdrk6xhj7">
  <name>MI.MediaServiceDescription</name>
  <t>MI.MediaServiceDescription metadata defines a set of descriptors associated with a media service delegated to the dCDN. This metadata can be used by the dCDN provider to implement specific strategies that will maximize performance. Note that these strategies are implementation specific and not specified in this document. With knowledge of the streaming manifest URL, for example, the dCDN MAY implement segment prefetching strategies. Furthermore, the notion of a media service MAY allow the dCDN provider to track and monitor streaming sessions in a more comprehensive manner.</t>
  <t>Property: manifestURL</t>
  <ul>
    <li>
      <t>Description: Path of the manifest (mpd or m3u8) file related to this media service. </t>
    </li>
    <li>
      <t>Type: String.</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: No.  </t>
    </li>
  </ul>
  <t>Property: mediaServiceName</t>
  <ul>
    <li>
      <t>Description: String describing or identifying the media service.</t>
    </li>
    <li>
      <t>Type: String.</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: No. </t>
    </li>
  </ul>
  <t>Property: maximumBitrate</t>
  <ul>
    <li>
      <t>Description: This is the maximum bitrate in bits per second (bps) attached to the service delivery. If the service includes multiple representations or playlists, this property restricts the bitrate of each representation or playlist with a published bitrate to a value below this property's value.  In multicast, the property's value indicates the maximum bitrate provisioned for the service, regardless of the representations or playlists sent concurrently. This property must be set according to the maximum bitrate dedicated to the uCDN by the dCDN and published through the FCI.CdnSelection (limit type "ingress"). In unicast, the property's value indicates the maximum bitrate provisioned for the service regardless of the representation/playlist that is downstream. This property must be set according to the maximum bitrate dedicated to the uCDN by the dCDN and published through FCI.CapacityLimit (limit type  "ingress") or possibly through the FCI.CdnSelectionMulticastDelivery (limit type "ingress").</t>
    </li>
    <li>
      <t>Type: integer.</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: No. If not specified, the uCDN relies entirely on the dCDN for all uCDN multicast service delivery. It is strongly encouraged to specify a maximum bitrate for allowing the uCDN to operate multicast delivery for several concurrent services involving live delivery.</t>
    </li>
  </ul>
  <t>The following example of MI.MediaServiceDescription pointing to the manifest of a live channel and associates a name to this channel:</t>
  <figure>
    <sourcecode><![CDATA[{
   "generic-metadata-type": "MI.MediaServiceDescription",
   "generic-metadata-value": {
     "manifestURL": "/live/channelXYZ/index.mpd",
     "mediaServiceName": "ChannelXYZ",
     "maximumBitRate": 5000000,
   }
}]]></sourcecode>
  </figure>
</section><section anchor="h.n6dfs1bc72vm">
  <name>Capabilities Advertisements</name>
  <t>This section introduces FCI objects that allow a dCDN to advertise its specific capabilities related to the MI.RequestRouting and  MI.CdnSelection and objects.</t>
<section anchor="h.xibugx1wopf3">
  <name>FCI.RequestRouting</name>
  <t>This object is used by the dCDN to advertise the supported request routing modes. This can be optionally used by the uCDN to further select a subset of those modes when operating one of the iterative delegation modes. See the section <xref target="h.vxay4hjptwpn">MI.RequestRouting</xref></t>
  <t>Property: request-routing-modes</t>
  <ul>
    <li>
      <t>Description: A list of supported request routing modes by the dCDN. This information is useful when the uCDN decides to perform a delegation in iterative mode.</t>
    </li>
    <li>
      <t>Type: Array of strings. Values are: "DNS", "HTTP-R", or "MANIFEST_REWRITE".</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: No. If the dCDN does not advertise the supported request routing modes, they are all supported by default.</t>
    </li>
  </ul>
  <t>The following example advertises support for all the request routing modes:</t>
  <figure>
    <sourcecode><![CDATA[{
  "capabilities": [
    {
      "capability-type": "FCI.RequestRouting",
      "capability-value": {
        "request-routing-modes": [
          "DNS",
          "HTTP",
          "MANIFEST_REWRITE"
        ]
      }
    }
  ]
}]]></sourcecode>
  </figure>
</section><section anchor="h.t002f9j0j2xh">
  <name>FCI.CdnSelection</name>
  <t>This object is used by the dCDN to advertise the network delivery arrangements supported by the dCDN. </t>
  <t>Property: cdn-delivery-list</t>
  <ul>
    <li>
      <t>Description: A list of supported dCDN network delivery arrangements.</t>
    </li>
    <li>
      <t>Type: Array of FCI.CdnDelivery objects that specify the allowed combinations.</t>
    </li>
    <li>
      <t>Mandatory-to-Specify: Yes.</t>
    </li>
  </ul>
  <section anchor="h.ajca665jxklr">
    <name>FCI.CdnDelivery</name>
    <t>This sub-object is used to describe a particular dCDN delivery arrangement.</t>
    <t>Property: cdn-name</t>
    <ul>
      <li>
        <t>Description: name of the downstream CDN delivery arrangement. A downstream CDN operator may own several delivery infrastructure instances which may be the subject of a different delegation. A dCDN delivery arrangement is named according to that property. The name is used with the corresponding MI.CdnSelection for pointing out one particular delivery arrangement associated with the configuration metadata.</t>
      </li>
      <li>
        <t>Type: String.</t>
      </li>
      <li>
        <t>Mandatory-to-Specify: Yes. The name MUST be unique among the list exposed by the Cdn-delivery-list property of the FCI.CdnSelection object.</t>
      </li>
    </ul>
    <t>Property: cdn-transport-type</t>
    <ul>
      <li>
        <t>Description: Main transport characteristic of the downstream CDN delivery instance.</t>
      </li>
      <li>
        <t>Type: String.  Must be one of these values: "MULTICAST", "UNICAST". </t>
      </li>
      <li>
        <t>Mandatory-to-Specify: No. The default is unicast. There is always one default dCDN unicast delivery infrastructure/arrangement.</t>
      </li>
    </ul>
    <t>Property: cdn-capacity-limits</t>
    <ul>
      <li>
        <t>Description: exposes some capacity limits associated with that dCDN delivery arrangement</t>
      </li>
      <li>
        <t>Type: An array of FCI.CapacityLimit objects as defined in <xref target="SVTA2049"/> and <xref target="SVTA2065"/></t>
      </li>
      <li>
        <t>Mandatory-to-Specify: No.</t>
      </li>
    </ul>
    <t>Property: cdn-traffic-types</t>
    <ul>
      <li>
        <t>Description: a set of traffic types supported by this dCDN delivery arrangement.</t>
      </li>
      <li>
        <t>Type: An array of MI.TrafficType objects</t>
      </li>
      <li>
        <t>Mandatory-to-Specify: No.</t>
      </li>
    </ul>
    <t>The following is an example advertising support for Multicast delivery:</t>
    <figure>
      <sourcecode><![CDATA[{
  "capabilities": [
    {
      "capability-type": "FCI.CdnSelection",
      "capability-value": {
        "cdn-delivery-list": [
          {
            "cdn-name": "MULTICAST",
            "cdn-transport-type": "MULTICAST",
            "cdn-capacity-limit": [
              {
                "id": "capacity_limit_multicast",
                "limit-type": "ingress",
                "maximum-hard": 50000000,
                "maximum-soft": 40000000,
                "current": 15000000
              },
              {
                "id": "capacity_limit_multicast",
                "limit-type": "egress",
                "maximum-hard": 5000000,
                "maximum-soft": 4000000
              }
            ],
            "cdn-traffic-types": [
              {
                "traffic-type": "live"
              }
            ]
          }
        ]
      }
    }
  ]
}]]></sourcecode>
    </figure>
  </section>
</section></section><section anchor="Security" title="Security Considerations">
            <t>
            The FCI and MI objects defined in this document are transferred via the interfaces defined in CDNI <xref target="RFC8006"/> which describes how to secure these interfaces by protecting integrity and confidentiality while ensuring the authenticity of the dCDN and uCDN.
            </t>
        </section><section anchor="IANA" title="IANA Considerations">
            <section anchor="IANA.cdni.payload.types" title="CDNI Payload Types">
                <t>This document requests the registration of the following entries under the "CDNI Payload Types" registry hosted by IANA:
                </t>
                <table>
                    <name>CDNI Payload Types</name>
                    <thead>
                        <tr><td>Payload Type</td><td>Specification</td></tr>
                    </thead>
                    <tbody>
                        <tr><td>MI.CdnSelection</td><td>RFCthis</td></tr>
                        <tr><td>MI.RequestRouting</td><td>RFCthis</td></tr>
                        <tr><td>MI.TrafficType</td><td>RFCthis</td></tr>
                        <tr><td>MI.MediaServiceDescription</td><td>RFCthis</td></tr>
                        <tr><td>FCI.CdnSelection</td><td>RFCthis</td></tr>
                        <tr><td>FCI.CdnDelivery</td><td>RFCthis</td></tr>
                    </tbody>
                 </table>
            </section>
</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 contributions and guidance.
            </t>
            <t>Particulary the following people contribute in one or other way to the content of this draft:</t>  
                <ul>
                    <li>Christoph Neumann - Broadpeak</li>
                    <li>Will Power - Lumen</li>
                    <li>Shmuel Asafi - Qwilt</li>
                    <li>Yoav Gressel - Qwilt</li>
                    <li>Nir Sopher - Qwilt</li>
                    <li>Arnon Warshavsky - Qwilt</li>
                    <li>Francisco Cano Hila - Telefonica</li>
                </ul>
        </section>
   </middle>
   <back>
      <references title="Normative References">
         <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.8006.xml"/>
      </references>
      <references title="Informative References">
         <reference anchor="SVTA" target="https://www.svta.org">
            <front>
               <title>Streaming Video Technology Alliance Home Page</title>
               <author><organization>SVTA</organization></author>
               <date />
            </front>
         </reference>
         <reference anchor="SVTA2007" target="https://svta.org/documents/SVTA2007">
            <front>
               <title>Open Caching Request Routing Functional Specification</title>
               <author><organization>SVTA</organization></author>
               <date />
            </front>
         </reference>
         <reference anchor="SVTA2049" target="https://svta.org/documents/SVTA2049">
            <front>
               <title>Capacity Insights Interface</title>
               <author><organization>SVTA</organization></author>
               <date />
            </front>
         </reference>
         <reference anchor="SVTA2065" target="https://svta.org/documents/SVTA2065">
            <front>
               <title>SVTA Open Casting</title>
               <author><organization>SVTA</organization></author>
               <date />
            </front>
         </reference>

       </references>
   </back>
</rfc>
