draft-ietf-cdni-triggers-extensions-05.txt | draft-ietf-cdni-triggers-extensions-06.txt | |||
---|---|---|---|---|
Network Working Group O. Finkelman | Network Working Group O. Finkelman | |||
Internet-Draft Qwilt | Internet-Draft Qwilt | |||
Updates: 8007 (if approved) S. Mishra | Updates: 8007 (if approved) S. Mishra | |||
Intended status: Standards Track Verizon | Intended status: Standards Track Verizon | |||
Expires: March 22, 2021 September 18, 2020 | Expires: March 28, 2021 N. Sopher | |||
Qwilt | ||||
September 24, 2020 | ||||
CDNI Control Triggers Interface Extensions | CDNI Control Triggers Interface Extensions | |||
draft-ietf-cdni-triggers-extensions-05 | draft-ietf-cdni-triggers-extensions-06 | |||
Abstract | Abstract | |||
This document updates RFC 8007 to include generic extensions and more | This document updates RFC 8007 to include generic extensions and more | |||
granular content matching options, required by the Open Caching | granular content matching options, required by the Open Caching | |||
architecture. The Open Caching working group of the Streaming Video | architecture. The Open Caching architeccture is a use case of | |||
Alliance is focused on the delegation of video delivery request from | Content Delivery Network Interconnection (CDNI) in which the | |||
commercial CDNs to a caching layer at the ISP. In that aspect, Open | commercial Content Delivery Network (CDN) is the upstream CDN (uCDN) | |||
Caching is a specific use case of CDNI, where the commercial CDN is | and the ISP caching layer serves as the downstream CDN (dCDN). This | |||
the upstream CDN (uCDN) and the ISP caching layer is the downstream | document defines extensions to the Content Delivery Network | |||
CDN (dCDN). The extensions specified in this document to the CDNI | Interconnection (CDNI) Control Interface/Triggers. These extensions | |||
Control Interface / Triggers are derived from requirements of Open | are derived from requirements raised by Open Caching architecture but | |||
Caching but are applicable to CDNI use cases in general. | are also applicable to CDNI use cases in general. | |||
Requirements Language | Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 48 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on March 22, 2021. | This Internet-Draft will expire on March 28, 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.2. Structure of this document . . . . . . . . . . . . . . . 4 | 1.2. Structure of this document . . . . . . . . . . . . . . . 4 | |||
2. Interfaces Extensions Overview . . . . . . . . . . . . . . . 4 | 2. Interfaces Extensions Overview . . . . . . . . . . . . . . . 5 | |||
2.1. CDNI Control Interface / Triggers Extensions . . . . . . 5 | 2.1. CDNI Control Interface / Triggers Extensions . . . . . . 5 | |||
2.1.1. CI/T Objects . . . . . . . . . . . . . . . . . . . . 5 | 2.1.1. CI/T Objects . . . . . . . . . . . . . . . . . . . . 5 | |||
2.1.2. Trigger Specification . . . . . . . . . . . . . . . . 5 | 2.1.2. Trigger Specification . . . . . . . . . . . . . . . . 5 | |||
2.1.3. Content Selection . . . . . . . . . . . . . . . . . . 5 | 2.1.3. Content Selection . . . . . . . . . . . . . . . . . . 5 | |||
2.1.4. Trigger Extensibility . . . . . . . . . . . . . . . . 5 | 2.1.4. Trigger Extensibility . . . . . . . . . . . . . . . . 6 | |||
2.1.5. Error Handling . . . . . . . . . . . . . . . . . . . 6 | 2.1.5. Error Handling . . . . . . . . . . . . . . . . . . . 6 | |||
2.2. CDNI Footprint and Capabilities Interface Extensions . . 6 | 2.2. CDNI Footprint and Capabilities Interface Extensions . . 7 | |||
3. CI/T Version 2 . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. CI/T Version 2 . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3.1. CI/T Objects V2 . . . . . . . . . . . . . . . . . . . . . 7 | 3.1. CI/T Objects V2 . . . . . . . . . . . . . . . . . . . . . 7 | |||
3.2. Error Handling V2 . . . . . . . . . . . . . . . . . . . . 9 | 3.2. Error Handling V2 . . . . . . . . . . . . . . . . . . . . 10 | |||
3.3. Properties of CI/T Version 2 objects . . . . . . . . . . 10 | 3.3. Properties of CI/T Version 2 objects . . . . . . . . . . 11 | |||
3.3.1. Trigger Specification Version 2 . . . . . . . . . . . 10 | 3.3.1. Trigger Specification Version 2 . . . . . . . . . . . 11 | |||
3.3.2. RegexMatch . . . . . . . . . . . . . . . . . . . . . 11 | 3.3.2. RegexMatch . . . . . . . . . . . . . . . . . . . . . 12 | |||
3.3.3. Playlist . . . . . . . . . . . . . . . . . . . . . . 13 | 3.3.3. Playlist . . . . . . . . . . . . . . . . . . . . . . 14 | |||
3.3.4. MediaProtocol . . . . . . . . . . . . . . . . . . . . 13 | 3.3.4. MediaProtocol . . . . . . . . . . . . . . . . . . . . 14 | |||
3.3.5. CI/T Trigger Extensions . . . . . . . . . . . . . . . 14 | 3.3.5. CI/T Trigger Extensions . . . . . . . . . . . . . . . 15 | |||
3.3.5.1. Enforcement Options . . . . . . . . . . . . . . . 14 | 3.3.5.1. Enforcement Options . . . . . . . . . . . . . . . 15 | |||
3.3.5.2. GenericExtensionObject . . . . . . . . . . . . . 17 | 3.3.5.2. GenericExtensionObject . . . . . . . . . . . . . 18 | |||
3.3.6. Error Description Version 2 . . . . . . . . . . . . . 19 | 3.3.6. Error Description Version 2 . . . . . . . . . . . . . 20 | |||
3.3.7. Error codes . . . . . . . . . . . . . . . . . . . . . 21 | 3.3.7. Error codes . . . . . . . . . . . . . . . . . . . . . 22 | |||
3.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 21 | 3.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
3.4.1. Invalidation with Regex . . . . . . . . . . . . . . . 21 | 3.4.1. Invalidation with Regex . . . . . . . . . . . . . . . 22 | |||
3.4.2. Preposition with Playlists . . . . . . . . . . . . . 23 | 3.4.2. Preposition with Playlists . . . . . . . . . . . . . 24 | |||
3.4.3. Extensions with Error Propagation . . . . . . . . . . 24 | 3.4.3. Extensions with Error Propagation . . . . . . . . . . 25 | |||
4. Trigger Extension Objects . . . . . . . . . . . . . . . . . . 26 | 4. Trigger Extension Objects . . . . . . . . . . . . . . . . . . 27 | |||
4.1. LocationPolicy extension . . . . . . . . . . . . . . . . 26 | 4.1. LocationPolicy extension . . . . . . . . . . . . . . . . 27 | |||
4.2. TimePolicy Extension . . . . . . . . . . . . . . . . . . 28 | 4.2. TimePolicy Extension . . . . . . . . . . . . . . . . . . 29 | |||
4.2.1. UTCWindow . . . . . . . . . . . . . . . . . . . . . . 30 | 4.2.1. UTCWindow . . . . . . . . . . . . . . . . . . . . . . 31 | |||
4.2.2. LocalTimeWindow . . . . . . . . . . . . . . . . . . . 31 | 4.2.2. LocalTimeWindow . . . . . . . . . . . . . . . . . . . 32 | |||
4.2.3. DateLocalTime . . . . . . . . . . . . . . . . . . . . 32 | 4.2.3. DateLocalTime . . . . . . . . . . . . . . . . . . . . 33 | |||
4.2.3.1. Date and Local Time Format . . . . . . . . . . . 32 | 4.2.3.1. Date and Local Time Format . . . . . . . . . . . 33 | |||
4.2.3.2. Restrictions . . . . . . . . . . . . . . . . . . 32 | 4.2.3.2. Restrictions . . . . . . . . . . . . . . . . . . 34 | |||
5. Footprint and Capabilities . . . . . . . . . . . . . . . . . 33 | 5. Footprint and Capabilities . . . . . . . . . . . . . . . . . 34 | |||
5.1. CI/T Versions Capability Object . . . . . . . . . . . . . 33 | 5.1. CI/T Versions Capability Object . . . . . . . . . . . . . 34 | |||
5.1.1. CI/T Versions Capability Object Serialization . . . . 34 | 5.1.1. CI/T Versions Capability Object Serialization . . . . 35 | |||
5.2. CI/T Playlist Protocol Capability Object . . . . . . . . 34 | 5.2. CI/T Playlist Protocol Capability Object . . . . . . . . 35 | |||
5.2.1. CI/T Playlist Protocol Capability Object | 5.2.1. CI/T Playlist Protocol Capability Object | |||
Serialization . . . . . . . . . . . . . . . . . . . . 34 | ||||
5.3. CI/T Trigger Extension Capability Object . . . . . . . . 35 | ||||
5.3.1. CI/T Trigger Extension Capability Object | ||||
Serialization . . . . . . . . . . . . . . . . . . . . 35 | Serialization . . . . . . . . . . . . . . . . . . . . 35 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 | 5.3. CI/T Trigger Extension Capability Object . . . . . . . . 36 | |||
6.1. CDNI Payload Types . . . . . . . . . . . . . . . . . . . 36 | 5.3.1. CI/T Trigger Extension Capability Object | |||
6.1.1. CDNI ci-trigger-command.v2 Payload Type . . . . . . . 36 | Serialization . . . . . . . . . . . . . . . . . . . . 36 | |||
6.1.2. CDNI ci-trigger-status.v2 Payload Type . . . . . . . 37 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 | |||
6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type . . . 37 | 6.1. CDNI Payload Types . . . . . . . . . . . . . . . . . . . 37 | |||
6.1.4. CDNI CI/T TimePolicy Trigger Extension Type . . . . . 37 | 6.1.1. CDNI ci-trigger-command.v2 Payload Type . . . . . . . 37 | |||
6.1.5. CDNI FCI CI/T Versions Payload Type . . . . . . . . . 37 | 6.1.2. CDNI ci-trigger-status.v2 Payload Type . . . . . . . 38 | |||
6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type . . . . 37 | 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type . . . 38 | |||
6.1.7. CDNI FCI CI/T Extension Objects Payload Type . . . . 38 | 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type . . . . . 38 | |||
6.2. CDNI CI/T Trigger Error Codes types . . . . . . . . . . . 38 | 6.1.5. CDNI FCI CI/T Versions Payload Type . . . . . . . . . 38 | |||
6.3. CDNI Media protocol types . . . . . . . . . . . . . . . . 38 | 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type . . . . 38 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 39 | 6.1.7. CDNI FCI CI/T Extension Objects Payload Type . . . . 39 | |||
8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 39 | 6.2. CDNI CI/T Trigger Error Codes types . . . . . . . . . . . 39 | |||
9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 39 | 6.3. CDNI Media protocol types . . . . . . . . . . . . . . . . 39 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 40 | 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 41 | 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 41 | ||||
10.2. Informative References . . . . . . . . . . . . . . . . . 42 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 43 | ||||
1. Introduction | 1. Introduction | |||
The Streaming Video Alliance [SVA] is a global association that works | ||||
to solve streaming video challenges in an effort to improve end-user | ||||
experience and adoption. The Open Caching Working Group [OCWG] of | ||||
the Streaming Video Alliance [SVA] is focused on the delegation of | ||||
video delivery requests from commerical CDNs to a caching layer at | ||||
the ISP's network. Open Caching architecture is a specific use case | ||||
of CDNI where the commercial CDN is the upstream CDN (uCDN) and the | ||||
ISP caching layer is the downstream CDN (dCDN). The Open Caching | ||||
Content Management Operations Specification [OC-CM] defines objects | ||||
and extensions required by Open Caching architecture for granular | ||||
content management operations such as new content selection options. | ||||
This document defines the objects and extensions required for | This document defines the objects and extensions required for | |||
granular content management operations. For that purpose it extends | granular content management operations. For that purpose it extends | |||
CDNI Control Interface / Triggers [RFC8007] by adding new content | CDNI Control Interface / Triggers [RFC8007] by adding new content | |||
selection options to the trigger specification and specifying a | selection options to the trigger specification and specifying a | |||
generic extension mechanism that enables adding future functions for | generic extension mechanism that enables adding future functions for | |||
controlling the trigger execution. This document also defines and | controlling the trigger execution. This document also defines and | |||
initial set of extension objects. This document gives examples for | initial set of extension objects. This document gives examples for | |||
the extensions specified herein, for complete examples of the trigger | the extensions specified herein, for complete examples of the trigger | |||
interface usage see Section 6 of [RFC8007]. | interface usage see Section 6 of [RFC8007]. | |||
The CDNI Metadata Interface is described in [RFC8006]. | The CDNI Metadata Interface is described in [RFC8006]. | |||
The CDNI Footprint and Capability Interface is described in | The CDNI Footprint and Capability Interface is described in | |||
[RFC8008]. | [RFC8008]. | |||
The CDNI Control Interface / Triggers is described in [RFC8007]. | The CDNI Control Interface / Triggers is described in [RFC8007]. | |||
For consistency with other CDNI documents, this document follows the | ||||
CDNI convention of uCDN (upstream CDN) and dCDN downstream CDN) to | ||||
represent the commercial CDN and ISP caching layer, respectively. | ||||
1.1. Terminology | 1.1. Terminology | |||
This document reuses the terminology defined in [RFC6707], [RFC8006], | This document reuses the terminology defined in [RFC6707], [RFC8006], | |||
[RFC8007], and [RFC8008]. | [RFC8007], and [RFC8008]. | |||
Additionally, the following terms are used throughout this document | Additionally, the following terms are used throughout this document | |||
and are defined as follows: | and are defined as follows: | |||
o HLS - HTTP Live Streaming | o HLS - HTTP Live Streaming | |||
skipping to change at page 10, line 12 ¶ | skipping to change at page 11, line 12 ¶ | |||
take actions to fix them. This document adds a mechanism to | take actions to fix them. This document adds a mechanism to | |||
report extension errors. | report extension errors. | |||
o Error propagation - enable the uCDN to traceback an error to the | o Error propagation - enable the uCDN to traceback an error to the | |||
dCDN in which it occurred. CDNI triggers may be propagated over a | dCDN in which it occurred. CDNI triggers may be propagated over a | |||
chain of downstream CDNs. Let us take for example an upstream | chain of downstream CDNs. Let us take for example an upstream | |||
(uCDN-A) CDN A that is delegating to a downstream CDN B (dCDN-B) | (uCDN-A) CDN A that is delegating to a downstream CDN B (dCDN-B) | |||
and dCDN-B is delegating to a downstream CDN C (dCDN-C). Triggers | and dCDN-B is delegating to a downstream CDN C (dCDN-C). Triggers | |||
sent from uCDN-A to dCDN-B may be redistributed from dCDN-B to | sent from uCDN-A to dCDN-B may be redistributed from dCDN-B to | |||
dCDN-C and errors can happen anywhere along the path. Therefore, | dCDN-C and errors can happen anywhere along the path. Therefore, | |||
it is essential for uCDN-A that sets the trigger, to be able to | it might be essential for uCDN-A that sets the trigger, to be able | |||
trace back an error to the downstream CDN where it occurred. This | to trace back an error to the downstream CDN where it occurred. | |||
document adds a mechanism to propagate the ID of the faulty dCDN | This document adds a mechanism to propagate the ID of the faulty | |||
back to the uCDN by adding the CDN ID to the error description. | dCDN back to the uCDN by adding the CDN ID to the error | |||
When a downstream dCDN-B propagates a trigger to another | description. When a downstream dCDN-B propagates a trigger to | |||
downstream dCDN-C, it MUST also propagate back the errors received | another downstream dCDN-C, it MUST also propagate back the errors | |||
in the trigger status resource from dCDN-C by adding them to the | received in the trigger status resource from dCDN-C by adding them | |||
errors array in its own status resource to be sent back to the | to the errors array in its own status resource to be sent back to | |||
originating uCDN-A. This makes sure that the trigger originating | the originating uCDN-A. While propagating back the errors, and | |||
upstream CDN will receive an array of errors that occurred in all | depending on the implementation, downstream dCDN-B MAY also | |||
the CDNs along the execution path, each error carrying its own CDN | specify the dCDN-C CDN identifier, indicating that the error | |||
identifier. | relates spefically to this CDN. The trigger originating upstream | |||
CDN will receive an array of errors that occurred in all the CDNs | ||||
along the execution path, where each error MAY carrying its own | ||||
CDN identifier. | ||||
3.3. Properties of CI/T Version 2 objects | 3.3. Properties of CI/T Version 2 objects | |||
This section defines the values that can appear in the top-level | This section defines the values that can appear in the top-level | |||
objects described in Section 3.1, and their encodings. | objects described in Section 3.1, and their encodings. | |||
3.3.1. Trigger Specification Version 2 | 3.3.1. Trigger Specification Version 2 | |||
Version 2 of the Trigger Specification adds the following properties | Version 2 of the Trigger Specification adds the following properties | |||
on top of the existing properties of the trigger specification | on top of the existing properties of the trigger specification | |||
skipping to change at page 11, line 15 ¶ | skipping to change at page 12, line 17 ¶ | |||
Mandatory: No, but at least one of "metadata.*" or "content.*" | Mandatory: No, but at least one of "metadata.*" or "content.*" | |||
MUST be present and non-empty. | MUST be present and non-empty. | |||
Property: extensions | Property: extensions | |||
Description: Array of trigger extension data. | Description: Array of trigger extension data. | |||
Type: Array of GenericTriggerExtension objects (see | Type: Array of GenericTriggerExtension objects (see | |||
Section 3.3.5.2). | Section 3.3.5.2). | |||
Mandatory-to-Specify: No. The default is no extensions. | Mandatory: No. The default is no extensions. | |||
Example of an invalidation trigger.v2 with a list of regex objects, a | Example of an invalidation trigger.v2 with a list of regex objects, a | |||
list of playlist objects, and extensions: | list of playlist objects, and extensions: | |||
{ | { | |||
"trigger.v2": { | "trigger.v2": { | |||
"type": "invalidate", | "type": "invalidate", | |||
"content.regexs": [ <list of RegexMatch objects> ], | "content.regexs": [ <list of RegexMatch objects> ], | |||
"content.playlists": [ <list of Playlist objects> ], | "content.playlists": [ <list of Playlist objects> ], | |||
"extensions": [ <list of GenericTriggerExtension objects ] | "extensions": [ <list of GenericTriggerExtension objects ] | |||
skipping to change at page 17, line 44 ¶ | skipping to change at page 18, line 44 ¶ | |||
Property: generic-trigger-extension-type | Property: generic-trigger-extension-type | |||
Description: Case-insensitive CDNI Trigger extension object | Description: Case-insensitive CDNI Trigger extension object | |||
type. | type. | |||
Type: String containing the CDNI Payload Type [RFC7736] of the | Type: String containing the CDNI Payload Type [RFC7736] of the | |||
object contained in the generic-trigger-extension-value | object contained in the generic-trigger-extension-value | |||
property (see table in Section 6.1). | property (see table in Section 6.1). | |||
Mandatory-to-Specify: Yes. | Mandatory: Yes. | |||
Property: generic-trigger-extension-value | Property: generic-trigger-extension-value | |||
Description: CDNI Trigger extension object. | Description: CDNI Trigger extension object. | |||
Type: Format/Type is defined by the value of the generic- | Type: Format/Type is defined by the value of the generic- | |||
trigger-extension-type property above. | trigger-extension-type property above. | |||
Mandatory-to-Specify: Yes. | Mandatory: Yes. | |||
Property: mandatory-to-enforce | Property: mandatory-to-enforce | |||
Description: Flag identifying whether or not the enforcement of | Description: Flag identifying whether or not the enforcement of | |||
this trigger extension is mandatory. | this trigger extension is mandatory. | |||
Type: Boolean | Type: Boolean | |||
Mandatory-to-Specify: No. Default is to treat the trigger | Mandatory: No. Default is to treat the trigger extension as | |||
extension as mandatory-to-enforce (i.e., a value of True). | mandatory-to-enforce (i.e., a value of True). | |||
Property: safe-to-redistribute | Property: safe-to-redistribute | |||
Description: Flag identifying whether or not this trigger | Description: Flag identifying whether or not this trigger | |||
extension can be safely redistributed without modification. | extension can be safely redistributed without modification, | |||
even if the CDN fails to understand the extension. | ||||
Type: Boolean | Type: Boolean | |||
Mandatory-to-Specify: No. Default is to allow transparent | Mandatory: No. Default is to allow transparent redistribution | |||
redistribution (i.e., a value of True). | (i.e., a value of True). | |||
Property: incomprehensible | Property: incomprehensible | |||
Description: Flag identifying whether or not any CDN in the | Description: Flag identifying whether or not any CDN in the | |||
chain of delegation has failed to understand and/or failed to | chain of delegation has failed to understand and/or failed to | |||
properly transform this trigger extension object. Note: This | properly transform this trigger extension object. Note: This | |||
flag only applies to trigger extension objects whose safe-to- | flag only applies to trigger extension objects whose safe-to- | |||
redistribute property has a value of False. | redistribute property has a value of False. | |||
Type: Boolean | Type: Boolean | |||
Mandatory-to-Specify: No. Default is comprehensible (i.e., a | Mandatory: No. Default is comprehensible (i.e., a value of | |||
value of False). | False). | |||
Example of a GenericTriggerExtension containing a specific trigger | Example of a GenericTriggerExtension containing a specific trigger | |||
extension object: | extension object: | |||
{ | { | |||
"generic-trigger-extension-type": | "generic-trigger-extension-type": | |||
<Type of this trigger extension object>, | <Type of this trigger extension object>, | |||
"generic-trigger-extension-value": | "generic-trigger-extension-value": | |||
{ | { | |||
<properties of this trigger extension object> | <properties of this trigger extension object> | |||
skipping to change at page 20, line 22 ¶ | skipping to change at page 21, line 22 ¶ | |||
Property: cdn | Property: cdn | |||
Description: The CDN PID of the CDN where the error occurred. | Description: The CDN PID of the CDN where the error occurred. | |||
The "cdn" property is used by the originating uCDN or by | The "cdn" property is used by the originating uCDN or by | |||
propagating dCDN in order to distinguish in which CDN the error | propagating dCDN in order to distinguish in which CDN the error | |||
occured. | occured. | |||
Type: A non-empty JSON string, where the string is a CDN PID as | Type: A non-empty JSON string, where the string is a CDN PID as | |||
defined in Section 4.6 of [RFC8007]. | defined in Section 4.6 of [RFC8007]. | |||
Mandatory: Yes. | Mandatory: Yes. In the case the dCDN does not like to expose | |||
this information, it should provide its own CDN PID. | ||||
Example of an Error Description object reporting a malformed | Example of an Error Description object reporting a malformed | |||
Playlist: | Playlist: | |||
{ | { | |||
"content.playlists": [ | "content.playlists": [ | |||
{ | { | |||
"playlist": "https://www.example.com/hls/title/index.m3u8", | "playlist": "https://www.example.com/hls/title/index.m3u8", | |||
"media-protocol": "hls" | "media-protocol": "hls" | |||
} | } | |||
skipping to change at page 21, line 31 ¶ | skipping to change at page 22, line 31 ¶ | |||
}, | }, | |||
] | ] | |||
} | } | |||
3.3.7. Error codes | 3.3.7. Error codes | |||
This document adds the error code "eextension" to the error codes | This document adds the error code "eextension" to the error codes | |||
table defined in Section 5.2.6 of [RFC8007]. This error code | table defined in Section 5.2.6 of [RFC8007]. This error code | |||
designates that an error occurred while parsing a generic trigger | designates that an error occurred while parsing a generic trigger | |||
extension, or that the specific extension is not supported by the | extension, or that the specific extension is not supported by the | |||
CDN. A CDN that fails to parse or execute a generic extension object | CDN. A CDN that fails to execute a trigger due a generic extension | |||
MUST report it using the "errors.v2" array within the trigger status | object which is "mandatory-to-enforce" MUST report it using the | |||
resource, while setting the error code to "eextension" and providing | "errors.v2" array within the trigger status resource, while setting | |||
an appropriate description. The "eextension" error code is a | the error code to "eextension" and providing an appropriate | |||
registered type of "CDNI CI/T Trigger Error Codes" (see Section 6.2). | description. The "eextension" error code is a registered type of | |||
"CDNI CI/T Trigger Error Codes" (see Section 6.2). | ||||
3.4. Examples | 3.4. Examples | |||
The following subsections provides usage examples of the specified | The following subsections provides usage examples of the specified | |||
interface extensions being used by the trigger command and status | interface extensions being used by the trigger command and status | |||
resource. | resource. | |||
3.4.1. Invalidation with Regex | 3.4.1. Invalidation with Regex | |||
In the following example a CI/T "invalidate" command uses the Regex | In the following example a CI/T "invalidate" command uses the Regex | |||
skipping to change at page 23, line 17 ¶ | skipping to change at page 24, line 18 ¶ | |||
"trigger.v2": { <content of trigger object from the command> } | "trigger.v2": { <content of trigger object from the command> } | |||
} | } | |||
3.4.2. Preposition with Playlists | 3.4.2. Preposition with Playlists | |||
In the following example a CI/T "preposition" command uses the | In the following example a CI/T "preposition" command uses the | |||
Playlist property to specify the full media library of a specific | Playlist property to specify the full media library of a specific | |||
content. The command fails due to playlist parse error and an | content. The command fails due to playlist parse error and an | |||
appropriate error is reflected in the status response. | appropriate error is reflected in the status response. | |||
REQUEST: | REQUEST: | |||
POST /triggers HTTP/1.1 | POST /triggers HTTP/1.1 | |||
User-Agent: example-user-agent/0.1 | User-Agent: example-user-agent/0.1 | |||
Host: triggers.dcdn.example.com | Host: triggers.dcdn.example.com | |||
Accept: */* | Accept: */* | |||
Content-Type: application/cdni; ptype=ci-trigger-command.v2 | Content-Type: application/cdni; ptype=ci-trigger-command.v2 | |||
{ | { | |||
"trigger.v2": { | "trigger.v2": { | |||
"type": "preposition", | "type": "preposition", | |||
"content.playlists": [ | "content.playlists": [ | |||
{ | { | |||
"playlist": "https://www.example.com/hls/title/index.m3u8", | "playlist": "https://www.example.com/hls/title/index.m3u8", | |||
"media-protocol": "hls" | "media-protocol": "hls" | |||
}, | }, | |||
{ <Playlist #2> }, | { <Playlist #2> }, | |||
... | ... | |||
{ <Playlist #N> }, | { <Playlist #N> }, | |||
], | ], | |||
}, | }, | |||
"cdn-path": [ "AS64496:0" ] | "cdn-path": [ "AS64496:0" ] | |||
} | } | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 201 Created | HTTP/1.1 201 Created | |||
Date: Wed, 04 May 2016 08:48:10 GMT | Date: Wed, 04 May 2016 08:48:10 GMT | |||
Content-Length: 467 | Content-Length: 467 | |||
Content-Type: application/cdni; ptype=ci-trigger-status.v2 | Content-Type: application/cdni; ptype=ci-trigger-status.v2 | |||
Location: https://triggers.dcdn.example.com/triggers/0 | Location: https://triggers.dcdn.example.com/triggers/0 | |||
Server: example-server/0.1 | Server: example-server/0.1 | |||
{ | { | |||
"errors.v2": [ | "errors.v2": [ | |||
{ | { | |||
"content.playlists": [ | "content.playlists": [ | |||
{ | { | |||
"playlist": "https://www.example.com/hls/title/index.m3u8", | "playlist": "https://www.example.com/hls/title/index.m3u8", | |||
"media-protocol": "hls" | "media-protocol": "hls" | |||
}, | }, | |||
], | ], | |||
"description": "The dCDN was not able to parse the playlist", | "description": "The dCDN was not able to parse the playlist", | |||
"error": "econtent", | "error": "econtent", | |||
"cdn": "AS64500:0" | "cdn": "AS64500:0" | |||
}, | }, | |||
], | ], | |||
"ctime": 1462351690, | "ctime": 1462351690, | |||
"etime": 1462351698, | "etime": 1462351698, | |||
"mtime": 1462351690, | "mtime": 1462351690, | |||
"status": "failed", | "status": "failed", | |||
"trigger.v2": { <content of trigger object from the command> } | "trigger.v2": { <content of trigger object from the command> } | |||
} | } | |||
3.4.3. Extensions with Error Propagation | 3.4.3. Extensions with Error Propagation | |||
In the following example a CI/T "preposition" command is using two | In the following example a CI/T "preposition" command is using two | |||
extensions to control the way the trigger is executed. In this | extensions to control the way the trigger is executed. In this | |||
example the receiving dCDN identified as "AS64500:0" does not support | example the receiving dCDN identified as "AS64500:0" does not support | |||
the first extension in the extensions array. dCDN "AS64500:0" further | the first extension in the extensions array. dCDN "AS64500:0" further | |||
distributes this trigger to another downstream CDN that is identified | distributes this trigger to another downstream CDN that is identified | |||
as "AS64501:0", which does not support the second extension in the | as "AS64501:0", which does not support the second extension in the | |||
extensions array. The error is propagate from "AS64501:0" to | extensions array. The error is propagate from "AS64501:0" to | |||
skipping to change at page 25, line 4 ¶ | skipping to change at page 26, line 5 ¶ | |||
"type": "preposition", | "type": "preposition", | |||
"content.playlists": [ | "content.playlists": [ | |||
{ | { | |||
"playlist": "https://www.example.com/hls/title/index.m3u8", | "playlist": "https://www.example.com/hls/title/index.m3u8", | |||
"media-protocol": "hls" | "media-protocol": "hls" | |||
}, | }, | |||
], | ], | |||
"extensions": [ | "extensions": [ | |||
{ | { | |||
"generic-trigger-extension-type": | "generic-trigger-extension-type": | |||
<Type of trigger extension object #1>, | <Type of trigger extension object #1>, | |||
"generic-trigger-extension-value": | "generic-trigger-extension-value": | |||
{ | { | |||
<properties of trigger extension object #1> | <properties of trigger extension object #1> | |||
}, | }, | |||
"mandatory-to-enforce": false, | "mandatory-to-enforce": true, | |||
"safe-to-redistribute": true, | "safe-to-redistribute": true, | |||
}, | }, | |||
{ | { | |||
"generic-trigger-extension-type": | "generic-trigger-extension-type": | |||
<Type of trigger extension object #2>, | <Type of trigger extension object #2>, | |||
"generic-trigger-extension-value": | "generic-trigger-extension-value": | |||
{ | { | |||
<properties of trigger extension object #2> | <properties of trigger extension object #2> | |||
}, | }, | |||
"mandatory-to-enforce": false, | "mandatory-to-enforce": true, | |||
"safe-to-redistribute": true, | "safe-to-redistribute": true, | |||
}, | }, | |||
], | ], | |||
}, | }, | |||
"cdn-path": [ "AS64496:0" ] | "cdn-path": [ "AS64496:0" ] | |||
} | } | |||
RESPONSE: | RESPONSE: | |||
HTTP/1.1 201 Created | HTTP/1.1 201 Created | |||
skipping to change at page 25, line 48 ¶ | skipping to change at page 26, line 48 ¶ | |||
"errors.v2": [ | "errors.v2": [ | |||
{ | { | |||
"extensions": [ | "extensions": [ | |||
{ | { | |||
"generic-trigger-extension-type": | "generic-trigger-extension-type": | |||
<Type of trigger extension object #1>, | <Type of trigger extension object #1>, | |||
"generic-trigger-extension-value": | "generic-trigger-extension-value": | |||
{ | { | |||
<properties of trigger extension object #1> | <properties of trigger extension object #1> | |||
}, | }, | |||
"mandatory-to-enforce": false, | "mandatory-to-enforce": true, | |||
"safe-to-redistribute": true, | "safe-to-redistribute": true, | |||
}, | }, | |||
], | ], | |||
"description": "unrecognized extension <type>", | "description": "unrecognized extension <type>", | |||
"error": "eextension", | "error": "eextension", | |||
"cdn": "AS64500:0" | "cdn": "AS64500:0" | |||
}, | }, | |||
{ | { | |||
"extensions": [ | "extensions": [ | |||
{ | { | |||
"generic-trigger-extension-type": | "generic-trigger-extension-type": | |||
<Type of trigger extension object #2>, | <Type of trigger extension object #2>, | |||
"generic-trigger-extension-value": | "generic-trigger-extension-value": | |||
skipping to change at page 26, line 16 ¶ | skipping to change at page 27, line 18 ¶ | |||
}, | }, | |||
{ | { | |||
"extensions": [ | "extensions": [ | |||
{ | { | |||
"generic-trigger-extension-type": | "generic-trigger-extension-type": | |||
<Type of trigger extension object #2>, | <Type of trigger extension object #2>, | |||
"generic-trigger-extension-value": | "generic-trigger-extension-value": | |||
{ | { | |||
<properties of trigger extension object #2> | <properties of trigger extension object #2> | |||
}, | }, | |||
"mandatory-to-enforce": false, | "mandatory-to-enforce": true, | |||
"safe-to-redistribute": true, | "safe-to-redistribute": true, | |||
}, | }, | |||
], | ], | |||
"description": "unrecognized extension <type>", | "description": "unrecognized extension <type>", | |||
"error": "eextension", | "error": "eextension", | |||
"cdn": "AS64501:0" | "cdn": "AS64501:0" | |||
}, | }, | |||
], | ], | |||
"ctime": 1462351690, | "ctime": 1462351690, | |||
"etime": 1462351698, | "etime": 1462351698, | |||
skipping to change at page 27, line 29 ¶ | skipping to change at page 28, line 29 ¶ | |||
Object specification | Object specification | |||
Property: locations | Property: locations | |||
Description: An Access List that allows or denies (blocks) the | Description: An Access List that allows or denies (blocks) the | |||
trigger execution per cache location. | trigger execution per cache location. | |||
Type: Array of LocationRule objects (see Section 4.2.2.1 of | Type: Array of LocationRule objects (see Section 4.2.2.1 of | |||
[RFC8006]) | [RFC8006]) | |||
Mandatory-to-Specify: Yes. | Mandatory: Yes. | |||
If a location policy object is not listed within the trigger command, | If a location policy object is not listed within the trigger command, | |||
the default behavior is to execute the trigger in all available | the default behavior is to execute the trigger in all available | |||
caches and locations of the dCDN. | caches and locations of the dCDN. | |||
The trigger command is allowed, or denied, for a specific cache | The trigger command is allowed, or denied, for a specific cache | |||
location according to the action of the first location whose | location according to the action of the first location whose | |||
footprint matches against that cache's location. If two or more | footprint matches against that cache's location. If two or more | |||
footprints overlap, the first footprint that matches against the | footprints overlap, the first footprint that matches against the | |||
cache's location determines the action a CDN MUST take. If the | cache's location determines the action a CDN MUST take. If the | |||
skipping to change at page 29, line 29 ¶ | skipping to change at page 30, line 29 ¶ | |||
Object specification | Object specification | |||
Property: unix-time-window | Property: unix-time-window | |||
Description: A UNIX epoch time window in which the trigger | Description: A UNIX epoch time window in which the trigger | |||
SHOULD be executed. | SHOULD be executed. | |||
Type: TimeWindow object using UNIX epoch timestamps (see | Type: TimeWindow object using UNIX epoch timestamps (see | |||
Section 4.2.3.2 of [RFC8006]) | Section 4.2.3.2 of [RFC8006]) | |||
Mandatory-to-Specify: No, but exactly one of "unix-time- | Mandatory: No, but exactly one of "unixEpochWindow", | |||
window", "utc-window" or "local-time-window" MUST be present. | "utcWindow" or "localTimeWindow" MUST be present. | |||
Property: utc-window | Property: utc-window | |||
Description: A UTC time window in which the trigger SHOULD be | Description: A UTC time window in which the trigger SHOULD be | |||
executed. | executed. | |||
Type: UTCWindow object as defined in Section 4.2.1. | Type: UTCWindow object as defined in Section 4.2.1. | |||
Mandatory-to-Specify: No, but exactly one of "unix-time- | Mandatory: No, but exactly one of "unixEpochWindow", | |||
window", "utc-window" or "local-time-window" MUST be present. | "utcWindow" or "localTimeWindow" MUST be present. | |||
Property: local-time-window | Property: local-time-window | |||
Description: A local time window. The dCDN SHOULD execute the | Description: A local time window. The dCDN SHOULD execute the | |||
trigger at the defined time frame, interpreted as the the local | trigger at the defined time frame, interpreted as the the local | |||
time per location. | time per location. | |||
Type: LocalTimeWindow object as defined in Section 4.2.2. | Type: LocalTimeWindow object as defined in Section 4.2.2. | |||
Mandatory-to-Specify: No, but exactly one of "unix-time- | Mandatory: No, but exactly one of "unixEpochWindow", | |||
window", "utc-window" or "local-time-window" MUST be present. | "utcWindow" or "localTimeWindow" MUST be present. | |||
If a time policy object is not listed within the trigger command, the | If a time policy object is not listed within the trigger command, the | |||
default behavior is to execute the trigger in a time frame most | default behavior is to execute the trigger in a time frame most | |||
suitable to the dCDN taking under consideration other constrains and | suitable to the dCDN taking under consideration other constrains and | |||
/ or obligations. | / or obligations. | |||
Example of a generic trigger extension object containing a time | Example of a generic trigger extension object containing a time | |||
policy object that schedules the trigger execution to a window | policy object that schedules the trigger execution to a window | |||
between 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC, using the | between 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC, using the | |||
"unix-time-window" property: | "unix-time-window" property: | |||
skipping to change at page 30, line 40 ¶ | skipping to change at page 31, line 40 ¶ | |||
A UTCWindow object describes a time range in UTC or UTC and a zone | A UTCWindow object describes a time range in UTC or UTC and a zone | |||
offset that can be applied by a TimePolicy. | offset that can be applied by a TimePolicy. | |||
Property: start | Property: start | |||
Description: The start time of the window. | Description: The start time of the window. | |||
Type: Internet date and time as defined in [RFC3339]. | Type: Internet date and time as defined in [RFC3339]. | |||
Mandatory-to-Specify: Yes. | Mandatory: No, but at least one of "start" or "end" MUST be | |||
present and non-empty. | ||||
Property: end | Property: end | |||
Description: The end time of the window. | Description: The end time of the window. | |||
Type: Internet date and time as defined in [RFC3339]. | Type: Internet date and time as defined in [RFC3339]. | |||
Mandatory-to-Specify: Yes. | Mandatory: No, but at least one of "start" or "end" MUST be | |||
present and non-empty. | ||||
Example UTCWindow object that describes a time window from 02:30 | Example UTCWindow object that describes a time window from 02:30 | |||
01/01/2000 UTC to 04:30 01/01/2000 UTC: | 01/01/2000 UTC to 04:30 01/01/2000 UTC: | |||
{ | { | |||
"start": 2000-01-01T02:30:00.00Z, | "start": 2000-01-01T02:30:00.00Z, | |||
"end": 2000-01-01T04:30:00.00Z, | "end": 2000-01-01T04:30:00.00Z, | |||
} | } | |||
Example UTCWindow object that describes a time window in New York | Example UTCWindow object that describes a time window in New York | |||
skipping to change at page 31, line 34 ¶ | skipping to change at page 32, line 37 ¶ | |||
and New York (UTC-05:00) will execute the trigger at 2AM-4AM UTC in | and New York (UTC-05:00) will execute the trigger at 2AM-4AM UTC in | |||
London and at 2AM-4AM UTC-05:00 in New York. | London and at 2AM-4AM UTC-05:00 in New York. | |||
Property: start | Property: start | |||
Description: The start time of the window. | Description: The start time of the window. | |||
Type: JSON string formatted as DateLocalTime as defined in | Type: JSON string formatted as DateLocalTime as defined in | |||
Section 4.2.3. | Section 4.2.3. | |||
Mandatory-to-Specify: Yes. | Mandatory: No, but at least one of "start" or "end" MUST be | |||
present and non-empty. | ||||
Property: end | Property: end | |||
Description: The end time of the window. | Description: The end time of the window. | |||
Type: JSON string formatted as DateLocalTime as defined in | Type: JSON string formatted as DateLocalTime as defined in | |||
Section 4.2.3. | Section 4.2.3. | |||
Mandatory-to-Specify: Yes. | Mandatory: No, but at least one of "start" or "end" MUST be | |||
present and non-empty. | ||||
Example LocalTimeWindow object that describes a local time window | Example LocalTimeWindow object that describes a local time window | |||
from 02:30 01/01/2000 to 04:30 01/01/2000. | from 02:30 01/01/2000 to 04:30 01/01/2000. | |||
{ | { | |||
"start": 2000-01-01T02:30:00.00, | "start": 2000-01-01T02:30:00.00, | |||
"end": 2000-01-01T04:30:00.00, | "end": 2000-01-01T04:30:00.00, | |||
} | } | |||
4.2.3. DateLocalTime | 4.2.3. DateLocalTime | |||
skipping to change at page 33, line 50 ¶ | skipping to change at page 35, line 7 ¶ | |||
one or more CI/T objects versions. Note that the default version as | one or more CI/T objects versions. Note that the default version as | |||
originally defined in [RFC8007] MUST be implicitly supported | originally defined in [RFC8007] MUST be implicitly supported | |||
regardless of the versions listed in this capability object. | regardless of the versions listed in this capability object. | |||
Property: versions | Property: versions | |||
Description: A list of version numbers. | Description: A list of version numbers. | |||
Type: An array of JSON strings | Type: An array of JSON strings | |||
Mandatory-to-Specify: No. The default is version 1. A missing | Mandatory: No. The default is version 1. A missing or an | |||
or an empty versions list means that only version 1 of the | empty versions list means that only version 1 of the interface | |||
interface and objects is supported. | and objects is supported. | |||
5.1.1. CI/T Versions Capability Object Serialization | 5.1.1. CI/T Versions Capability Object Serialization | |||
The following shows an example of CI/T Versions Capability object | The following shows an example of CI/T Versions Capability object | |||
serialization for a dCDN that supports versions 2 and 2.1 of the CI/T | serialization for a dCDN that supports versions 2 and 2.1 of the CI/T | |||
interface. | interface. | |||
{ | { | |||
"capabilities": [ | "capabilities": [ | |||
{ | { | |||
skipping to change at page 34, line 38 ¶ | skipping to change at page 35, line 44 ¶ | |||
support for one or more MediaProtocol types listed in Section 6.3 by | support for one or more MediaProtocol types listed in Section 6.3 by | |||
the playlists property of the "trigger.v2" object. | the playlists property of the "trigger.v2" object. | |||
Property: media-protocols | Property: media-protocols | |||
Description: A list of media protocols. | Description: A list of media protocols. | |||
Type: A list of MediaProtocol (from the CDNI Triggers media | Type: A list of MediaProtocol (from the CDNI Triggers media | |||
protocol types Section 6.3) | protocol types Section 6.3) | |||
Mandatory-to-Specify: No. The default, in case of a missing or | Mandatory: No. The default, in case of a missing or an empty | |||
an empty list, is none supported. | list, is none supported. | |||
5.2.1. CI/T Playlist Protocol Capability Object Serialization | 5.2.1. CI/T Playlist Protocol Capability Object Serialization | |||
The following shows an example of CI/T Playlist Protocol Capability | The following shows an example of CI/T Playlist Protocol Capability | |||
object serialization for a dCDN that supports "hls" and "dash". | object serialization for a dCDN that supports "hls" and "dash". | |||
{ | { | |||
"capabilities": [ | "capabilities": [ | |||
{ | { | |||
"capability-type": "FCI.TriggerPlaylistProtocol", | "capability-type": "FCI.TriggerPlaylistProtocol", | |||
skipping to change at page 35, line 34 ¶ | skipping to change at page 36, line 34 ¶ | |||
Property: trigger-extension | Property: trigger-extension | |||
Description: A list of supported CDNI CI/T | Description: A list of supported CDNI CI/T | |||
GenericExtensionObject types. | GenericExtensionObject types. | |||
Type: List of strings corresponding to entries from the "CDNI | Type: List of strings corresponding to entries from the "CDNI | |||
Payload Types" registry [RFC7736] that are under the CIT | Payload Types" registry [RFC7736] that are under the CIT | |||
namespace, and that correspond to CDNI CI/T | namespace, and that correspond to CDNI CI/T | |||
GenericExtensionObject objects. | GenericExtensionObject objects. | |||
Mandatory-to-Specify: No. The default, in case of a missing or | Mandatory: No. The default, in case of a missing or an empty | |||
an empty list, MUST be interpreted as "no | list, MUST be interpreted as "no GenericExtensionObject types | |||
GenericExtensionObject types are supported". A non-empty list | are supported". A non-empty list MUST be interpreted as | |||
MUST be interpreted as containing "the only | containing "the only GenericExtensionObject types that are | |||
GenericExtensionObject types that are supported". | supported". | |||
5.3.1. CI/T Trigger Extension Capability Object Serialization | 5.3.1. CI/T Trigger Extension Capability Object Serialization | |||
The following shows an example of CI/T Trigger Extension Capability | The following shows an example of CI/T Trigger Extension Capability | |||
object serialization for a dCDN that supports the | object serialization for a dCDN that supports the | |||
"CIT.LocationPolicy" and the "CIT.TimePolicy" objects. | "CIT.LocationPolicy" and the "CIT.TimePolicy" objects. | |||
{ | { | |||
"capabilities": [ | "capabilities": [ | |||
{ | { | |||
skipping to change at page 38, line 21 ¶ | skipping to change at page 39, line 21 ¶ | |||
Encoding: see Section 5.3.1 | Encoding: see Section 5.3.1 | |||
6.2. CDNI CI/T Trigger Error Codes types | 6.2. CDNI CI/T Trigger Error Codes types | |||
The IANA is requested to update the "CDNI CI/T Error Codes" | The IANA is requested to update the "CDNI CI/T Error Codes" | |||
subregistry (defined in Section 7.3 of [RFC8007] and located at | subregistry (defined in Section 7.3 of [RFC8007] and located at | |||
<https://www.iana.org/assignments/cdni-parameters>) with the | <https://www.iana.org/assignments/cdni-parameters>) with the | |||
following registration: | following registration: | |||
+------------+-----------------------------------+------------------+ | +------------+--------------------------------------+---------------+ | |||
| Error Code | Description | Specification | | | Error Code | Description | Specification | | |||
+------------+-----------------------------------+------------------+ | +------------+--------------------------------------+---------------+ | |||
| eextension | The dCDN failed to parse a | Section | | | eextension | The dCDN failed to parse a generic | Section | | |||
| | generic extension object, or does | Section 3.3.7 of | | | | "mandatory-to-enforce" extension | Section 3.3.7 | | |||
| | not support this extension. | this document. | | | | object, or does not support this | of this | | |||
+------------+-----------------------------------+------------------+ | | | extension. | document. | | |||
+------------+--------------------------------------+---------------+ | ||||
6.3. CDNI Media protocol types | 6.3. CDNI Media protocol types | |||
The IANA is requested to create a new "CDNI MediaProtocol Types" | The IANA is requested to create a new "CDNI MediaProtocol Types" | |||
subregistry in the "Content Delivery Networks Interconnection (CDNI) | subregistry in the "Content Delivery Networks Interconnection (CDNI) | |||
Parameters" registry. The "CDNI MediaProtocol Types" namespace | Parameters" registry. The "CDNI MediaProtocol Types" namespace | |||
defines the valid MediaProtocol object values in | defines the valid MediaProtocol object values in | |||
Section Section 3.3.4, used by the Playlist object. Additions to the | Section Section 3.3.4, used by the Playlist object. Additions to the | |||
MediaProtocol namespace conform to the "Specification Required" | MediaProtocol namespace conform to the "Specification Required" | |||
policy as defined in Section 4.6 of [RFC8126], where the | policy as defined in Section 4.6 of [RFC8126], where the | |||
skipping to change at page 41, line 22 ¶ | skipping to change at page 42, line 22 ¶ | |||
[MPEG-DASH] | [MPEG-DASH] | |||
ISO, "Information technology -- Dynamic adaptive streaming | ISO, "Information technology -- Dynamic adaptive streaming | |||
over HTTP (DASH) -- Part 1: Media presentation description | over HTTP (DASH) -- Part 1: Media presentation description | |||
and segment format", ISO/IEC 23009-1:2014, Edition 2, 05 | and segment format", ISO/IEC 23009-1:2014, Edition 2, 05 | |||
2014, <https://www.iso.org/standard/65274.html>. | 2014, <https://www.iso.org/standard/65274.html>. | |||
[MSS] Microsoft, "[MS-SSTR]: Smooth Streaming Protocol", | [MSS] Microsoft, "[MS-SSTR]: Smooth Streaming Protocol", | |||
Protocol Revision 8.0, September 2017, | Protocol Revision 8.0, September 2017, | |||
<https://msdn.microsoft.com/en-us/library/ff469518.aspx>. | <https://msdn.microsoft.com/en-us/library/ff469518.aspx>. | |||
[OC-CM] Finkelman, O., Ed., Devabhaktuni, J., and M. Stock, "Open | ||||
Caching Content Management Operations Specification", | ||||
November 2017, | ||||
<https://www.streamingvideoalliance.org/document/open- | ||||
caching-content-management-operations-specification/>. | ||||
[OCWG] Streaming Video Alliance, "Open Caching", | ||||
<https://www.streamingvideoalliance.org/technical-groups/ | ||||
open-caching/>. | ||||
[PCRE841] Hazel, P., "Perl Compatible Regular Expressions", | [PCRE841] Hazel, P., "Perl Compatible Regular Expressions", | |||
Version 8.41, July 2017, <http://www.pcre.org/>. | Version 8.41, July 2017, <http://www.pcre.org/>. | |||
[RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content | [RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content | |||
Distribution Network Interconnection (CDNI) Problem | Distribution Network Interconnection (CDNI) Problem | |||
Statement", RFC 6707, DOI 10.17487/RFC6707, September | Statement", RFC 6707, DOI 10.17487/RFC6707, September | |||
2012, <https://www.rfc-editor.org/info/rfc6707>. | 2012, <https://www.rfc-editor.org/info/rfc6707>. | |||
[RFC7736] Ma, K., "Content Delivery Network Interconnection (CDNI) | [RFC7736] Ma, K., "Content Delivery Network Interconnection (CDNI) | |||
Media Type Registration", RFC 7736, DOI 10.17487/RFC7736, | Media Type Registration", RFC 7736, DOI 10.17487/RFC7736, | |||
December 2015, <https://www.rfc-editor.org/info/rfc7736>. | December 2015, <https://www.rfc-editor.org/info/rfc7736>. | |||
[RFC8216] Pantos, R., Ed. and W. May, "HTTP Live Streaming", | [RFC8216] Pantos, R., Ed. and W. May, "HTTP Live Streaming", | |||
RFC 8216, DOI 10.17487/RFC8216, August 2017, | RFC 8216, DOI 10.17487/RFC8216, August 2017, | |||
<https://www.rfc-editor.org/info/rfc8216>. | <https://www.rfc-editor.org/info/rfc8216>. | |||
[SVA] "Streaming Video Alliance", | ||||
<https://www.streamingvideoalliance.org>. | ||||
Authors' Addresses | Authors' Addresses | |||
Ori Finkelman | Ori Finkelman | |||
Qwilt | Qwilt | |||
6, Ha'harash | 6, Ha'harash | |||
Hod HaSharon 4524079 | Hod HaSharon 4524079 | |||
Israel | Israel | |||
Phone: +972-72-2221647 | ||||
Email: ori.finkelman.ietf@gmail.com | Email: ori.finkelman.ietf@gmail.com | |||
Sanjay Mishra | Sanjay Mishra | |||
Verizon | Verizon | |||
13100 Columbia Pike | 13100 Columbia Pike | |||
Silver Spring, MD 20904 | Silver Spring, MD 20904 | |||
USA | USA | |||
Email: sanjay.mishra@verizon.com | Email: sanjay.mishra@verizon.com | |||
Nir B. Sopher | ||||
Qwilt | ||||
6, Ha'harash | ||||
Hod HaSharon 4524079 | ||||
Israel | ||||
Email: nir@apache.org | ||||
End of changes. 52 change blocks. | ||||
165 lines changed or deleted | 206 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |