idnits 2.17.1 draft-ietf-cdni-triggers-extensions-06.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There is 1 instance of too long lines in the document, the longest one being 3 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (September 24, 2020) is 1309 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: '1-7' is mentioned on line 987, but not defined Summary: 1 error (**), 0 flaws (~~), 2 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group O. Finkelman 3 Internet-Draft Qwilt 4 Updates: 8007 (if approved) S. Mishra 5 Intended status: Standards Track Verizon 6 Expires: March 28, 2021 N. Sopher 7 Qwilt 8 September 24, 2020 10 CDNI Control Triggers Interface Extensions 11 draft-ietf-cdni-triggers-extensions-06 13 Abstract 15 This document updates RFC 8007 to include generic extensions and more 16 granular content matching options, required by the Open Caching 17 architecture. The Open Caching architeccture is a use case of 18 Content Delivery Network Interconnection (CDNI) in which the 19 commercial Content Delivery Network (CDN) is the upstream CDN (uCDN) 20 and the ISP caching layer serves as the downstream CDN (dCDN). This 21 document defines extensions to the Content Delivery Network 22 Interconnection (CDNI) Control Interface/Triggers. These extensions 23 are derived from requirements raised by Open Caching architecture but 24 are also applicable to CDNI use cases in general. 26 Requirements Language 28 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 29 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 30 document are to be interpreted as described in RFC 2119 [RFC2119]. 32 Status of This Memo 34 This Internet-Draft is submitted in full conformance with the 35 provisions of BCP 78 and BCP 79. 37 Internet-Drafts are working documents of the Internet Engineering 38 Task Force (IETF). Note that other groups may also distribute 39 working documents as Internet-Drafts. The list of current Internet- 40 Drafts is at https://datatracker.ietf.org/drafts/current/. 42 Internet-Drafts are draft documents valid for a maximum of six months 43 and may be updated, replaced, or obsoleted by other documents at any 44 time. It is inappropriate to use Internet-Drafts as reference 45 material or to cite them other than as "work in progress." 47 This Internet-Draft will expire on March 28, 2021. 49 Copyright Notice 51 Copyright (c) 2020 IETF Trust and the persons identified as the 52 document authors. All rights reserved. 54 This document is subject to BCP 78 and the IETF Trust's Legal 55 Provisions Relating to IETF Documents 56 (https://trustee.ietf.org/license-info) in effect on the date of 57 publication of this document. Please review these documents 58 carefully, as they describe your rights and restrictions with respect 59 to this document. Code Components extracted from this document must 60 include Simplified BSD License text as described in Section 4.e of 61 the Trust Legal Provisions and are provided without warranty as 62 described in the Simplified BSD License. 64 Table of Contents 66 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 67 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 68 1.2. Structure of this document . . . . . . . . . . . . . . . 4 69 2. Interfaces Extensions Overview . . . . . . . . . . . . . . . 5 70 2.1. CDNI Control Interface / Triggers Extensions . . . . . . 5 71 2.1.1. CI/T Objects . . . . . . . . . . . . . . . . . . . . 5 72 2.1.2. Trigger Specification . . . . . . . . . . . . . . . . 5 73 2.1.3. Content Selection . . . . . . . . . . . . . . . . . . 5 74 2.1.4. Trigger Extensibility . . . . . . . . . . . . . . . . 6 75 2.1.5. Error Handling . . . . . . . . . . . . . . . . . . . 6 76 2.2. CDNI Footprint and Capabilities Interface Extensions . . 7 77 3. CI/T Version 2 . . . . . . . . . . . . . . . . . . . . . . . 7 78 3.1. CI/T Objects V2 . . . . . . . . . . . . . . . . . . . . . 7 79 3.2. Error Handling V2 . . . . . . . . . . . . . . . . . . . . 10 80 3.3. Properties of CI/T Version 2 objects . . . . . . . . . . 11 81 3.3.1. Trigger Specification Version 2 . . . . . . . . . . . 11 82 3.3.2. RegexMatch . . . . . . . . . . . . . . . . . . . . . 12 83 3.3.3. Playlist . . . . . . . . . . . . . . . . . . . . . . 14 84 3.3.4. MediaProtocol . . . . . . . . . . . . . . . . . . . . 14 85 3.3.5. CI/T Trigger Extensions . . . . . . . . . . . . . . . 15 86 3.3.5.1. Enforcement Options . . . . . . . . . . . . . . . 15 87 3.3.5.2. GenericExtensionObject . . . . . . . . . . . . . 18 88 3.3.6. Error Description Version 2 . . . . . . . . . . . . . 20 89 3.3.7. Error codes . . . . . . . . . . . . . . . . . . . . . 22 90 3.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 22 91 3.4.1. Invalidation with Regex . . . . . . . . . . . . . . . 22 92 3.4.2. Preposition with Playlists . . . . . . . . . . . . . 24 93 3.4.3. Extensions with Error Propagation . . . . . . . . . . 25 94 4. Trigger Extension Objects . . . . . . . . . . . . . . . . . . 27 95 4.1. LocationPolicy extension . . . . . . . . . . . . . . . . 27 96 4.2. TimePolicy Extension . . . . . . . . . . . . . . . . . . 29 97 4.2.1. UTCWindow . . . . . . . . . . . . . . . . . . . . . . 31 98 4.2.2. LocalTimeWindow . . . . . . . . . . . . . . . . . . . 32 99 4.2.3. DateLocalTime . . . . . . . . . . . . . . . . . . . . 33 100 4.2.3.1. Date and Local Time Format . . . . . . . . . . . 33 101 4.2.3.2. Restrictions . . . . . . . . . . . . . . . . . . 34 102 5. Footprint and Capabilities . . . . . . . . . . . . . . . . . 34 103 5.1. CI/T Versions Capability Object . . . . . . . . . . . . . 34 104 5.1.1. CI/T Versions Capability Object Serialization . . . . 35 105 5.2. CI/T Playlist Protocol Capability Object . . . . . . . . 35 106 5.2.1. CI/T Playlist Protocol Capability Object 107 Serialization . . . . . . . . . . . . . . . . . . . . 35 108 5.3. CI/T Trigger Extension Capability Object . . . . . . . . 36 109 5.3.1. CI/T Trigger Extension Capability Object 110 Serialization . . . . . . . . . . . . . . . . . . . . 36 111 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 112 6.1. CDNI Payload Types . . . . . . . . . . . . . . . . . . . 37 113 6.1.1. CDNI ci-trigger-command.v2 Payload Type . . . . . . . 37 114 6.1.2. CDNI ci-trigger-status.v2 Payload Type . . . . . . . 38 115 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type . . . 38 116 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type . . . . . 38 117 6.1.5. CDNI FCI CI/T Versions Payload Type . . . . . . . . . 38 118 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type . . . . 38 119 6.1.7. CDNI FCI CI/T Extension Objects Payload Type . . . . 39 120 6.2. CDNI CI/T Trigger Error Codes types . . . . . . . . . . . 39 121 6.3. CDNI Media protocol types . . . . . . . . . . . . . . . . 39 122 7. Security Considerations . . . . . . . . . . . . . . . . . . . 40 123 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 40 124 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 40 125 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 41 126 10.1. Normative References . . . . . . . . . . . . . . . . . . 41 127 10.2. Informative References . . . . . . . . . . . . . . . . . 42 128 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 43 130 1. Introduction 132 The Streaming Video Alliance [SVA] is a global association that works 133 to solve streaming video challenges in an effort to improve end-user 134 experience and adoption. The Open Caching Working Group [OCWG] of 135 the Streaming Video Alliance [SVA] is focused on the delegation of 136 video delivery requests from commerical CDNs to a caching layer at 137 the ISP's network. Open Caching architecture is a specific use case 138 of CDNI where the commercial CDN is the upstream CDN (uCDN) and the 139 ISP caching layer is the downstream CDN (dCDN). The Open Caching 140 Content Management Operations Specification [OC-CM] defines objects 141 and extensions required by Open Caching architecture for granular 142 content management operations such as new content selection options. 143 This document defines the objects and extensions required for 144 granular content management operations. For that purpose it extends 145 CDNI Control Interface / Triggers [RFC8007] by adding new content 146 selection options to the trigger specification and specifying a 147 generic extension mechanism that enables adding future functions for 148 controlling the trigger execution. This document also defines and 149 initial set of extension objects. This document gives examples for 150 the extensions specified herein, for complete examples of the trigger 151 interface usage see Section 6 of [RFC8007]. 153 The CDNI Metadata Interface is described in [RFC8006]. 155 The CDNI Footprint and Capability Interface is described in 156 [RFC8008]. 158 The CDNI Control Interface / Triggers is described in [RFC8007]. 160 For consistency with other CDNI documents, this document follows the 161 CDNI convention of uCDN (upstream CDN) and dCDN downstream CDN) to 162 represent the commercial CDN and ISP caching layer, respectively. 164 1.1. Terminology 166 This document reuses the terminology defined in [RFC6707], [RFC8006], 167 [RFC8007], and [RFC8008]. 169 Additionally, the following terms are used throughout this document 170 and are defined as follows: 172 o HLS - HTTP Live Streaming 174 o DASH - Dynamic Adaptive Streaming Over HTTP 176 o MSS - Microsoft Smooth Streaming 178 1.2. Structure of this document 180 The remainder of this document is organized as follows: 182 o Section 2 gives an overview of the extensions specified in this 183 document. 185 o Section 3 specifies version 2 of the CDNI Control Interface / 186 Triggers. 188 o Section 4 specifies an initial set of trigger extension objects. 190 o Section 5 specifies Footprint and Capability objects for CI/T 191 version and extensions. 193 o Section 6 list the IANA considerations of this document. 195 o Section 7 describes the security considerations for the specified 196 properties and extensions. 198 2. Interfaces Extensions Overview 200 This document defines extensions for the CDNI Control Interface / 201 Triggers (CI/T) [RFC8007] and defines FCI objects as per the CDNI 202 Footprint and Capabilities Interface [RFC8008]. 204 2.1. CDNI Control Interface / Triggers Extensions 206 2.1.1. CI/T Objects 208 This document specifies version 2 of the CI/T commands and objects. 209 In this context the CI/T commands and objects as were specified in 210 [RFC8007] are considered to be version 1. 212 2.1.2. Trigger Specification 214 This document specifies version 2 of the Trigger Specification which 215 is an enhancement of the Trigger Specification that includes all 216 properties as defined in Section 5.2.1 of [RFC8007] as well as the 217 additional properties required by the use cases listed below in 218 Section 2.1.3 and Section 2.1.4. 220 2.1.3. Content Selection 222 The trigger specification as defined in Section 5.2.1 of [RFC8007] 223 provides means to select content objects by matching a full content 224 URL or patterns with wildcards. This document specifies two 225 additional selection options: 227 o Regular Expression - Using regex a uCDN can create more complex 228 rules to select the content objects for the cases of 229 "invalidation" and "purge". For example, purging specific content 230 within a specific directory path. 232 o Content Playlist - Using video playlist files, a uCDN can trigger 233 an operation that will be applied to a collection of distinct 234 media files in a format that is natural for a streaming video 235 content provider. A playlist may have several formats, 236 specifically HTTP Live Streaming (HLS) *.m3u8 manifest [RFC8216], 237 Microsoft Smooth Streaming (MSS) *.ismc client manifest [MSS], and 238 Dynamic Adaptive Streaming over HTTP (DASH) *.mpd file [ISO/IEC 239 23009-1:2014] [MPEG-DASH]. 241 2.1.4. Trigger Extensibility 243 The CDNI Control Interface / Triggers [RFC8007] defines a set of 244 properties and objects used by the trigger commands. In this 245 document we define an extension mechanism to the triggers interface 246 that enables the application to add various functions that allow 247 finer control over the trigger execution. This document specifies a 248 generic trigger extension object wrapper for managing individual CDNI 249 trigger extensions in an opaque manner. 251 This document also registers CDNI Payload Types [RFC7736] under the 252 namespace CIT for the initial set of trigger extension types: 254 o CIT.LocationPolicy (for controlling the locations in which the 255 trigger is executed) 257 o CIT.TimePolicy (for scheduling a trigger to run in a specific time 258 window) 260 Example use cases 262 o Pre-position with cache location policy 264 o Purge content with cache location policy 266 o Pre-position at a specific time 268 o Purge by content acquisition time (e.g. purge all content acquired 269 in the past X hours) 271 2.1.5. Error Handling 273 This document extends the CI/T Error Handling (see Section 4.7 of 274 [RFC8007]) to support the following: 276 o Playlists and Regexs - report errors that happened due to specific 277 playlists and/or regexs. 279 o Extension errors - report an error that happened due to an 280 extension object. 282 o Error propagation - enable the uCDN to traceback an error to the 283 dCDN in which it occurred. 285 2.2. CDNI Footprint and Capabilities Interface Extensions 287 Extending the trigger mechanism with optional properties requires the 288 ability for the dCDN to advertise which optional properties it 289 supports. 291 The CDNI Footprint and Capabilities Interface [RFC8008] enables the 292 dCDN to advertise the capabilities it supports across different 293 footprints. This document introduces FCI objects to support the 294 advertisement of these optional properties. 296 Example use cases 298 o Trigger types: Advertise which trigger types are supported by the 299 dCDN. CDNI defines three trigger types (purge, invalidate, pre- 300 position), but it does not necessarily mean that all dCDNs support 301 all of them. The uCDN may prefer to work only with dCDN that 302 support what the uCDN needs. 304 o Content selection rule types: Advertise which selection types are 305 supported. For example, if adding content regex as a means to 306 match on content URLs, not all dCDN would support it. For 307 playlist mapping, advertise which types and versions of protocols 308 are supported, e.g. HLS.vX/DASH.vY/MSS.vX, DASH templates. Note 309 that the version string or schema are protocol specific. 311 o Trigger extensions: Advertise which trigger extensions object 312 types are supported by the dCDN. 314 3. CI/T Version 2 316 [RFC8007] does not define a version number and versioning scheme. 317 We, therefore, designate the interface and objects as defined in 318 Section 5 of [RFC8007] as version 1. The following sections define 319 version 2 of the CI/T objects and their properties as extensions of 320 version 1. 322 3.1. CI/T Objects V2 324 Version 2 of the CI/T interface requires the support of the following 325 objects: 327 o CI/T Commands v2: A trigger command request using the payload type 328 ci-trigger-command.v2. Version 2 MUST only use "trigger.v2" 329 objects as defined in Section 3.3.1, instead of "trigger" objects. 330 All other properties of the trigger command v2 are as defined in 331 Section 5.1.1 of [RFC8007]. 333 o Trigger Status Resource v2: A trigger status resource response 334 using the payload type ci-trigger-status.v2. Version 2 MUST only 335 use "trigger.v2" objects as defined in Section 3.3.1, instead of a 336 "trigger" object, as well as "errors.v2" array as defined in 337 Section 3.3.6, instead of a "errors" array. All other properties 338 of the trigger status v2 are as defined in Section 5.1.2 of 339 [RFC8007]. The errors array "errors.v2" is a list of all errors 340 that occurred in any of the downstream CDNs along the execution 341 path. When a downstream CDN, dCDN-A, propagates a trigger to 342 another downstream CDN, dCDN-B, it MUST also propagated back all 343 errors reported by dCDN-B in the trigger status resource and add 344 them to its own trigger status resource. 346 o Trigger Collections: The payload type ci-trigger-collection is 347 used with no changes and as defined in 5.1.3 of [RFC8007]. 349 Usage example of version 2 of trigger command 350 REQUEST: 352 POST /triggers HTTP/1.1 353 User-Agent: example-user-agent/0.1 354 Host: triggers.dcdn.example.com 355 Accept: */* 356 Content-Type: application/cdni; ptype=ci-trigger-command.v2 357 { 358 "trigger.v2": { }, 359 "cdn-path": [ "AS64496:0" ] 360 } 362 RESPONSE: 364 HTTP/1.1 201 Created 365 Date: Wed, 04 May 2016 08:48:10 GMT 366 Content-Length: 467 367 Content-Type: application/cdni; ptype=ci-trigger-status.v2 368 Location: https://triggers.dcdn.example.com/triggers/0 369 Server: example-server/0.1 371 { 372 "errors.v2": [ { }, 373 ..., 374 { } 375 ], 376 "ctime": 1462351690, 377 "etime": 1462351698, 378 "mtime": 1462351690, 379 "status": "pending", 380 "trigger.v2": { } 381 } 383 Usage example of version 2 of trigger status for the trigger created 384 in the above trigger command example: 386 REQUEST: 388 GET /triggers/0 HTTP/1.1 389 User-Agent: example-user-agent/0.1 390 Host: triggers.dcdn.example.com 391 Accept: */* 393 RESPONSE: 395 HTTP/1.1 200 OK 396 Content-Length: 467 397 Expires: Wed, 04 May 2016 08:49:10 GMT 398 Server: example-server/0.1 399 ETag: "6990548174277557683" 400 Cache-Control: max-age=60 401 Date: Wed, 04 May 2016 08:48:10 GMT 402 Content-Type: application/cdni; ptype=ci-trigger-status.v2 404 { 405 "errors.v2": [ { }, 406 ..., 407 { } 408 ], 409 "ctime": 1462351690, 410 "etime": 1462351698, 411 "mtime": 1462351690, 412 "status": "pending", 413 "trigger.v2": { } 414 } 416 3.2. Error Handling V2 418 The CDNI CI/T interface defines a mechanism for error reporting (see 419 Section 4.7 of [RFC8007]) and an Error Description object for 420 reporting errors (see Section 5.2.6 of [RFC8007]). This document 421 specifies version 2 of CI/T error handling in order to support the 422 following: 424 o Extension errors - report an error that happened due to an 425 extension object. As extension objects are expected to be added 426 to the interface as new requirements comes along, it is expected 427 that in some cases a dCDN may receive a trigger that it cannot 428 process or does not understand. It is essential for the trigger 429 caller to be able to understand when such errors occur so they can 430 take actions to fix them. This document adds a mechanism to 431 report extension errors. 433 o Error propagation - enable the uCDN to traceback an error to the 434 dCDN in which it occurred. CDNI triggers may be propagated over a 435 chain of downstream CDNs. Let us take for example an upstream 436 (uCDN-A) CDN A that is delegating to a downstream CDN B (dCDN-B) 437 and dCDN-B is delegating to a downstream CDN C (dCDN-C). Triggers 438 sent from uCDN-A to dCDN-B may be redistributed from dCDN-B to 439 dCDN-C and errors can happen anywhere along the path. Therefore, 440 it might be essential for uCDN-A that sets the trigger, to be able 441 to trace back an error to the downstream CDN where it occurred. 442 This document adds a mechanism to propagate the ID of the faulty 443 dCDN back to the uCDN by adding the CDN ID to the error 444 description. When a downstream dCDN-B propagates a trigger to 445 another downstream dCDN-C, it MUST also propagate back the errors 446 received in the trigger status resource from dCDN-C by adding them 447 to the errors array in its own status resource to be sent back to 448 the originating uCDN-A. While propagating back the errors, and 449 depending on the implementation, downstream dCDN-B MAY also 450 specify the dCDN-C CDN identifier, indicating that the error 451 relates spefically to this CDN. The trigger originating upstream 452 CDN will receive an array of errors that occurred in all the CDNs 453 along the execution path, where each error MAY carrying its own 454 CDN identifier. 456 3.3. Properties of CI/T Version 2 objects 458 This section defines the values that can appear in the top-level 459 objects described in Section 3.1, and their encodings. 461 3.3.1. Trigger Specification Version 2 463 Version 2 of the Trigger Specification adds the following properties 464 on top of the existing properties of the trigger specification 465 defined in Section 5.2.1 of [RFC8007]. 467 Property: content.regexs 469 Description: Regexs of content URLs to which the CI/T trigger 470 command applies. 472 Type: A JSON array of RegexMatch objects (see Section 3.3.2). 474 Mandatory: No, but at least one of "metadata.*" or "content.*" 475 MUST be present and non-empty. 477 Property: content.playlists 479 Description: Playlists of content the CI/T trigger command 480 applies to. 482 Type: A JSON array of Playlist objects (see Section 3.3.3). 484 Mandatory: No, but at least one of "metadata.*" or "content.*" 485 MUST be present and non-empty. 487 Property: extensions 489 Description: Array of trigger extension data. 491 Type: Array of GenericTriggerExtension objects (see 492 Section 3.3.5.2). 494 Mandatory: No. The default is no extensions. 496 Example of an invalidation trigger.v2 with a list of regex objects, a 497 list of playlist objects, and extensions: 499 { 500 "trigger.v2": { 501 "type": "invalidate", 502 "content.regexs": [ ], 503 "content.playlists": [ ], 504 "extensions": [ , 819 "generic-trigger-extension-value": 820 { 821 822 }, 823 "mandatory-to-enforce": true, 824 "safe-to-redistribute": true, 825 "incomprehensible": false 826 } 828 3.3.6. Error Description Version 2 830 Version 2 of the Error Description adds the "content.playlists", 831 "content.regexs", "extensions" and "cdn" properties on top of the 832 existing properties of version 1 of the trigger Error Description as 833 defined in Section 5.2.6 of [RFC8007]. 835 Properties: content.regexs, content.playlists 837 Description: Content Regex and Playlist references copied from 838 the Trigger Specification. Only those regexs and playlists to 839 which the error applies are included in each property, but 840 those references MUST be exactly as they appear in the request; 841 the dCDN MUST NOT change or generalize the URLs or Regexs. 842 Note that these properties are added on top of the already 843 existing properties: "metadata.urls", "content.urls", 844 "metadata.patterns" and "content.patterns". 846 Type: A JSON array of JSON strings, where each string is copied 847 from a "content.regexs" or "content.playlists" value in the 848 corresponding Trigger Specification. 850 Mandatory: At least one of "content.regexs", 851 "content.playlists", "metadata.urls", "content.urls", 852 "metadata.patterns" or "content.patterns" is mandatory in each 853 Error Description object. 855 Property: extensions 857 Description: Array of trigger extension objects copied from the 858 corresponding "extensions" array from the Trigger 859 Specification. Only those extensions to which the error 860 applies are included, but those extensions MUST be exactly as 861 they appear in the request. 863 Type: Array of GenericTriggerExtension objects, where each 864 extension object is copied from the "extensions" array values 865 in the Trigger Specification. 867 Mandatory: No. The "extensions" array SHOULD be used only if 868 the error relates to extension objects. 870 Property: cdn 872 Description: The CDN PID of the CDN where the error occurred. 873 The "cdn" property is used by the originating uCDN or by 874 propagating dCDN in order to distinguish in which CDN the error 875 occured. 877 Type: A non-empty JSON string, where the string is a CDN PID as 878 defined in Section 4.6 of [RFC8007]. 880 Mandatory: Yes. In the case the dCDN does not like to expose 881 this information, it should provide its own CDN PID. 883 Example of an Error Description object reporting a malformed 884 Playlist: 886 { 887 "content.playlists": [ 888 { 889 "playlist": "https://www.example.com/hls/title/index.m3u8", 890 "media-protocol": "hls" 891 } 892 ], 893 "description": "Failed to parse HLS playlist", 894 "error": "econtent", 895 "cdn": "AS64500:0" 896 }, 898 Example of an Error Description object reporting an unsupported 899 extension object: 901 { 902 "errors.v2": [ 903 { 904 "extensions": [ 905 { 906 "generic-trigger-extension-type": 907 , 908 "generic-trigger-extension-value": 909 { 910 911 }, 912 } 913 ], 914 "description": "unrecognized extension ", 915 "error": "eextension", 916 "cdn": "AS64500:0" 917 }, 918 ] 919 } 921 3.3.7. Error codes 923 This document adds the error code "eextension" to the error codes 924 table defined in Section 5.2.6 of [RFC8007]. This error code 925 designates that an error occurred while parsing a generic trigger 926 extension, or that the specific extension is not supported by the 927 CDN. A CDN that fails to execute a trigger due a generic extension 928 object which is "mandatory-to-enforce" MUST report it using the 929 "errors.v2" array within the trigger status resource, while setting 930 the error code to "eextension" and providing an appropriate 931 description. The "eextension" error code is a registered type of 932 "CDNI CI/T Trigger Error Codes" (see Section 6.2). 934 3.4. Examples 936 The following subsections provides usage examples of the specified 937 interface extensions being used by the trigger command and status 938 resource. 940 3.4.1. Invalidation with Regex 942 In the following example a CI/T "invalidate" command uses the Regex 943 property to specify the range of content objects for invalidation, 944 the command is rejected by the dCDN due to regex complexity, and an 945 appropriate error is reflected in the status response. 947 REQUEST: 949 POST /triggers HTTP/1.1 950 User-Agent: example-user-agent/0.1 951 Host: triggers.dcdn.example.com 952 Accept: */* 953 Content-Type: application/cdni; ptype=ci-trigger-command.v2 954 { 955 "trigger.v2": { 956 "type": "invalidate", 957 "content.regexs": [ 958 { 959 "regex": "^(https:\\/\\/video\\.example\\.com)\\/ 960 ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$", 961 "case-sensitive": true, 962 "match-query-string": false 963 }, 964 { }, 965 ... 966 { }, 967 ], 968 }, 969 "cdn-path": [ "AS64496:0" ] 970 } 972 RESPONSE: 974 HTTP/1.1 201 Created 975 Date: Wed, 04 May 2016 08:48:10 GMT 976 Content-Length: 467 977 Content-Type: application/cdni; ptype=ci-trigger-status.v2 978 Location: https://triggers.dcdn.example.com/triggers/0 979 Server: example-server/0.1 981 { 982 "errors.v2": [ 983 { 984 "content.regexs": [ 985 { 986 "regex": "^(https:\\/\\/video\\.example\\.com)\\/ 987 ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$", 988 "case-sensitive": true, 989 "match-query-string": false 990 }, 991 ], 992 "description": "The dCDN rejected a regex due to complexity", 993 "error": "ereject", 994 "cdn": "AS64500:0" 995 }, 996 ], 997 "ctime": 1462351690, 998 "etime": 1462351698, 999 "mtime": 1462351690, 1000 "status": "failed", 1001 "trigger.v2": { } 1002 } 1004 3.4.2. Preposition with Playlists 1006 In the following example a CI/T "preposition" command uses the 1007 Playlist property to specify the full media library of a specific 1008 content. The command fails due to playlist parse error and an 1009 appropriate error is reflected in the status response. 1011 REQUEST: 1013 POST /triggers HTTP/1.1 1014 User-Agent: example-user-agent/0.1 1015 Host: triggers.dcdn.example.com 1016 Accept: */* 1017 Content-Type: application/cdni; ptype=ci-trigger-command.v2 1018 { 1019 "trigger.v2": { 1020 "type": "preposition", 1021 "content.playlists": [ 1022 { 1023 "playlist": "https://www.example.com/hls/title/index.m3u8", 1024 "media-protocol": "hls" 1025 }, 1026 { }, 1027 ... 1028 { }, 1029 ], 1030 }, 1031 "cdn-path": [ "AS64496:0" ] 1032 } 1034 RESPONSE: 1036 HTTP/1.1 201 Created 1037 Date: Wed, 04 May 2016 08:48:10 GMT 1038 Content-Length: 467 1039 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1040 Location: https://triggers.dcdn.example.com/triggers/0 1041 Server: example-server/0.1 1043 { 1044 "errors.v2": [ 1045 { 1046 "content.playlists": [ 1047 { 1048 "playlist": "https://www.example.com/hls/title/index.m3u8", 1049 "media-protocol": "hls" 1050 }, 1051 ], 1052 "description": "The dCDN was not able to parse the playlist", 1053 "error": "econtent", 1054 "cdn": "AS64500:0" 1055 }, 1056 ], 1057 "ctime": 1462351690, 1058 "etime": 1462351698, 1059 "mtime": 1462351690, 1060 "status": "failed", 1061 "trigger.v2": { } 1062 } 1064 3.4.3. Extensions with Error Propagation 1066 In the following example a CI/T "preposition" command is using two 1067 extensions to control the way the trigger is executed. In this 1068 example the receiving dCDN identified as "AS64500:0" does not support 1069 the first extension in the extensions array. dCDN "AS64500:0" further 1070 distributes this trigger to another downstream CDN that is identified 1071 as "AS64501:0", which does not support the second extension in the 1072 extensions array. The error is propagate from "AS64501:0" to 1073 "AS64500:0" and the errors.v2 array reflects both errors. 1075 REQUEST: 1077 POST /triggers HTTP/1.1 1078 User-Agent: example-user-agent/0.1 1079 Host: triggers.dcdn.example.com 1080 Accept: */* 1081 Content-Type: application/cdni; ptype=ci-trigger-command.v2 1082 { 1083 "trigger.v2": { 1084 "type": "preposition", 1085 "content.playlists": [ 1086 { 1087 "playlist": "https://www.example.com/hls/title/index.m3u8", 1088 "media-protocol": "hls" 1089 }, 1090 ], 1091 "extensions": [ 1092 { 1093 "generic-trigger-extension-type": 1094 , 1095 "generic-trigger-extension-value": 1096 { 1097 1098 }, 1099 "mandatory-to-enforce": true, 1100 "safe-to-redistribute": true, 1101 }, 1102 { 1103 "generic-trigger-extension-type": 1104 , 1105 "generic-trigger-extension-value": 1106 { 1107 1108 }, 1109 "mandatory-to-enforce": true, 1110 "safe-to-redistribute": true, 1111 }, 1112 ], 1113 }, 1114 "cdn-path": [ "AS64496:0" ] 1115 } 1117 RESPONSE: 1119 HTTP/1.1 201 Created 1120 Date: Wed, 04 May 2016 08:48:10 GMT 1121 Content-Length: 467 1122 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1123 Location: https://triggers.dcdn.example.com/triggers/0 1124 Server: example-server/0.1 1126 { 1127 "errors.v2": [ 1128 { 1129 "extensions": [ 1130 { 1131 "generic-trigger-extension-type": 1132 , 1133 "generic-trigger-extension-value": 1134 { 1135 1136 }, 1137 "mandatory-to-enforce": true, 1138 "safe-to-redistribute": true, 1139 }, 1140 ], 1142 "description": "unrecognized extension ", 1143 "error": "eextension", 1144 "cdn": "AS64500:0" 1145 }, 1146 { 1147 "extensions": [ 1148 { 1149 "generic-trigger-extension-type": 1150 , 1151 "generic-trigger-extension-value": 1152 { 1153 1154 }, 1155 "mandatory-to-enforce": true, 1156 "safe-to-redistribute": true, 1157 }, 1158 ], 1159 "description": "unrecognized extension ", 1160 "error": "eextension", 1161 "cdn": "AS64501:0" 1162 }, 1163 ], 1164 "ctime": 1462351690, 1165 "etime": 1462351698, 1166 "mtime": 1462351690, 1167 "status": "failed", 1168 "trigger.v2": { } 1169 } 1171 4. Trigger Extension Objects 1173 The objects defined below are intended to be used in the 1174 GenericTriggerExtension object's generic-trigger-extension-value 1175 field as defined in Section Section 3.3.5.2, and their generic- 1176 trigger-extension-type property MUST be set to the appropriate CDNI 1177 Payload Type as defined in Section 6.1 . 1179 4.1. LocationPolicy extension 1181 A content operation may be relevant for a specific geographical 1182 region, or need to be excluded from a specific region. In this case, 1183 the trigger should be applied only to parts of the network that are 1184 either "included" or "not excluded" by the location policy. Note 1185 that the restrictions here are on the cache location rather than the 1186 client location. 1188 The LocationPolicy object defines which CDN or cache locations for 1189 which the trigger command is relevant. 1191 Example use cases: 1193 o Pre-position: Certain contracts allow for pre-positioning or 1194 availability of contract in all regions except for certain 1195 excluded regions in the world, including caches. For example, 1196 some content cannot ever knowingly touch servers in a specific 1197 country, including cached content. Therefore, these regions MUST 1198 be excluded from a pre-positioning operation. 1200 o Purge: In certain cases, content may have been located on servers 1201 in regions where the content must not reside. In such cases a 1202 purge operation to remove content specifically from that region, 1203 is required. 1205 Object specification 1207 Property: locations 1209 Description: An Access List that allows or denies (blocks) the 1210 trigger execution per cache location. 1212 Type: Array of LocationRule objects (see Section 4.2.2.1 of 1213 [RFC8006]) 1215 Mandatory: Yes. 1217 If a location policy object is not listed within the trigger command, 1218 the default behavior is to execute the trigger in all available 1219 caches and locations of the dCDN. 1221 The trigger command is allowed, or denied, for a specific cache 1222 location according to the action of the first location whose 1223 footprint matches against that cache's location. If two or more 1224 footprints overlap, the first footprint that matches against the 1225 cache's location determines the action a CDN MUST take. If the 1226 "locations" property is an empty list or if none of the listed 1227 footprints match the location of a specific cache location, then the 1228 result is equivalent to a "deny" action. 1230 The following is an example of generic trigger extension object 1231 containing a location policy object that allows the trigger execution 1232 in the US but blocks its execution in Canada: 1234 { 1235 "generic-trigger-extension-type": "CIT.LocationPolicy", 1236 "generic-trigger-extension-value": 1237 { 1238 "locations": [ 1239 { 1240 "action": "allow", 1241 "footprints": [ 1242 { 1243 "footprint-type": "countrycode", 1244 "footprint-value": ["us"] 1245 } 1246 ] 1247 }, 1248 { 1249 "action": "deny", 1250 "footprints": [ 1251 { 1252 "footprint-type": "countrycode", 1253 "footprint-value": ["ca"] 1254 } 1255 ] 1256 } 1257 ] 1258 }, 1259 "mandatory-to-enforce": true, 1260 "safe-to-redistribute": true, 1261 "incomprehensible": false 1262 } 1264 4.2. TimePolicy Extension 1266 A uCDN may wish to perform content management operations on the dCDN 1267 in a specific schedule. The TimePolicy extensions allows the uCDN to 1268 instruct the dCDN to execute the trigger command in a desired time 1269 window. For example, a content provider that wishes to pre-populate 1270 a new episode at off-peak time so that it would be ready on caches at 1271 prime time when the episode is released for viewing. A scheduled 1272 operation enables the uCDN to direct the dCDN in what time frame to 1273 execute the trigger. 1275 A uCDN may wish to to schedule a trigger such that the dCDN will 1276 execute it in local time, as it is measured in each region. For 1277 example, a uCDN may wish the dCDN to pull the content at off-peak 1278 hours, between 2AM-4AM, however, as a CDN is distributed across 1279 multiple time zones, the UTC definition of 2AM depends on the actual 1280 location. 1282 We define two alternatives for localized scheduling: 1284 o Regional schedule: When used in conjunction with the Location 1285 Policy defined in Section 4.1, the uCDN can trigger separate 1286 commands for different geographical regions, for each region using 1287 a different schedule. This allows the uCDN to control the 1288 execution time per region. 1290 o Local Time schedule: We introduce a "local time" version for 1291 Internet timestamps that follows the notation for local time as 1292 defined in Section 4.2.2 of [ISO8601]. When local time is used, 1293 that dCDN SHOULD execute the triggers at different absolute times, 1294 according the local time of each execution location. 1296 Object specification 1298 Property: unix-time-window 1300 Description: A UNIX epoch time window in which the trigger 1301 SHOULD be executed. 1303 Type: TimeWindow object using UNIX epoch timestamps (see 1304 Section 4.2.3.2 of [RFC8006]) 1306 Mandatory: No, but exactly one of "unixEpochWindow", 1307 "utcWindow" or "localTimeWindow" MUST be present. 1309 Property: utc-window 1311 Description: A UTC time window in which the trigger SHOULD be 1312 executed. 1314 Type: UTCWindow object as defined in Section 4.2.1. 1316 Mandatory: No, but exactly one of "unixEpochWindow", 1317 "utcWindow" or "localTimeWindow" MUST be present. 1319 Property: local-time-window 1321 Description: A local time window. The dCDN SHOULD execute the 1322 trigger at the defined time frame, interpreted as the the local 1323 time per location. 1325 Type: LocalTimeWindow object as defined in Section 4.2.2. 1327 Mandatory: No, but exactly one of "unixEpochWindow", 1328 "utcWindow" or "localTimeWindow" MUST be present. 1330 If a time policy object is not listed within the trigger command, the 1331 default behavior is to execute the trigger in a time frame most 1332 suitable to the dCDN taking under consideration other constrains and 1333 / or obligations. 1335 Example of a generic trigger extension object containing a time 1336 policy object that schedules the trigger execution to a window 1337 between 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC, using the 1338 "unix-time-window" property: 1340 { 1341 "generic-trigger-extension-type": "CIT.TimePolicy", 1342 "generic-trigger-extension-value": 1343 { 1344 "unix-time-window": { 1345 "start": 946717200, 1346 "end": 946746000 1347 } 1348 } 1349 "mandatory-to-enforce": true, 1350 "safe-to-redistribute": true, 1351 "incomprehensible": false 1352 } 1354 4.2.1. UTCWindow 1356 A UTCWindow object describes a time range in UTC or UTC and a zone 1357 offset that can be applied by a TimePolicy. 1359 Property: start 1361 Description: The start time of the window. 1363 Type: Internet date and time as defined in [RFC3339]. 1365 Mandatory: No, but at least one of "start" or "end" MUST be 1366 present and non-empty. 1368 Property: end 1370 Description: The end time of the window. 1372 Type: Internet date and time as defined in [RFC3339]. 1374 Mandatory: No, but at least one of "start" or "end" MUST be 1375 present and non-empty. 1377 Example UTCWindow object that describes a time window from 02:30 1378 01/01/2000 UTC to 04:30 01/01/2000 UTC: 1380 { 1381 "start": 2000-01-01T02:30:00.00Z, 1382 "end": 2000-01-01T04:30:00.00Z, 1383 } 1385 Example UTCWindow object that describes a time window in New York 1386 time zone offset UTC-05:00 from 02:30 01/01/2000 to 04:30 01/01/2000: 1388 { 1389 "start": 2000-01-01T02:30:00.00-05:00, 1390 "end": 2000-01-01T04:30:00.00-05:00, 1391 } 1393 4.2.2. LocalTimeWindow 1395 A LocalTimeWindow object describes a time range in local time. The 1396 reader of this object MUST interpret it as "the local time at the 1397 location of execution". For example, if the time window states 2AM 1398 to 4AM local time then a dCDN that has presence in both London (UTC) 1399 and New York (UTC-05:00) will execute the trigger at 2AM-4AM UTC in 1400 London and at 2AM-4AM UTC-05:00 in New York. 1402 Property: start 1404 Description: The start time of the window. 1406 Type: JSON string formatted as DateLocalTime as defined in 1407 Section 4.2.3. 1409 Mandatory: No, but at least one of "start" or "end" MUST be 1410 present and non-empty. 1412 Property: end 1414 Description: The end time of the window. 1416 Type: JSON string formatted as DateLocalTime as defined in 1417 Section 4.2.3. 1419 Mandatory: No, but at least one of "start" or "end" MUST be 1420 present and non-empty. 1422 Example LocalTimeWindow object that describes a local time window 1423 from 02:30 01/01/2000 to 04:30 01/01/2000. 1425 { 1426 "start": 2000-01-01T02:30:00.00, 1427 "end": 2000-01-01T04:30:00.00, 1428 } 1430 4.2.3. DateLocalTime 1432 DateLocalTime is a timestamp that follows the date and local time 1433 notation in Section 4.3.2 of [ISO8601] as a complete date and time 1434 extended representation, where the time zone designator is omitted. 1435 In addition, for simplicity and as exact accuracy is not an objective 1436 in this case, this specification does not support the decimal 1437 fractions of seconds, and does not take leap second into 1438 consideration. 1440 Type: JSON string using the format "date-local-time" as defined in 1441 Section 4.2.3.1. 1443 4.2.3.1. Date and Local Time Format 1445 The Date and Local Time format is specified here using the syntax 1446 description notation defined in [ABNF]. 1448 date-fullyear = 4DIGIT 1449 date-month = 2DIGIT ; 01-12 1450 date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on 1451 ; month/year 1452 time-hour = 2DIGIT ; 00-23 1453 time-minute = 2DIGIT ; 00-59 1454 time-second = 2DIGIT ; 00-59 leap seconds are not supported 1456 local-time = time-hour ":" time-minute ":" time-second 1457 full-date = date-fullyear "-" date-month "-" date-mday 1458 date-local-time = full-date "T" local-time 1460 Example time representing 09:00AM on 01/01/2000 local time: 1462 2000-01-01T09:00:00.00 1464 NOTE: Per [ABNF] and [ISO8601], the "T" character in this syntax 1465 may alternatively be lower case "t". For simplicity, Applications 1466 that generate the "date-local-time" format defined here, SHOULD 1467 only use the upper case letter "T". 1469 4.2.3.2. Restrictions 1471 The grammar element date-mday represents the day number within the 1472 current month. The maximum value varies based on the month and year 1473 as follows: 1475 Month Number Month/Year Maximum value of date-mday 1476 ------------ ---------- -------------------------- 1477 01 January 31 1478 02 February, normal 28 1479 02 February, leap year 29 1480 03 March 31 1481 04 April 30 1482 05 May 31 1483 06 June 30 1484 07 July 31 1485 08 August 31 1486 09 September 30 1487 10 October 31 1488 11 November 30 1489 12 December 31 1491 See Appendix C of [RFC3339] for a sample C code that determines if a 1492 year is a leap year. 1494 The grammar element time-second may have the values 0-59. The value 1495 of 60 that is used in [ISO8601] to represent a leap second MUST NOT 1496 be used. 1498 Although [ISO8601] permits the hour to be "24", this profile of 1499 [ISO8601] only allows values between "00" and "23" for the hour in 1500 order to reduce confusion. 1502 5. Footprint and Capabilities 1504 This section covers the FCI objects required for advertisement of the 1505 extensions and properties introduced in this document. 1507 5.1. CI/T Versions Capability Object 1509 The CI/T versions capability object is used to indicate support for 1510 one or more CI/T objects versions. Note that the default version as 1511 originally defined in [RFC8007] MUST be implicitly supported 1512 regardless of the versions listed in this capability object. 1514 Property: versions 1516 Description: A list of version numbers. 1518 Type: An array of JSON strings 1520 Mandatory: No. The default is version 1. A missing or an 1521 empty versions list means that only version 1 of the interface 1522 and objects is supported. 1524 5.1.1. CI/T Versions Capability Object Serialization 1526 The following shows an example of CI/T Versions Capability object 1527 serialization for a dCDN that supports versions 2 and 2.1 of the CI/T 1528 interface. 1530 { 1531 "capabilities": [ 1532 { 1533 "capability-type": "FCI.TriggerVersion", 1534 "capability-value": { 1535 "versions": [ "1", "2", "2.1" ] 1536 }, 1537 "footprints": [ 1538 1539 ] 1540 } 1541 ] 1542 } 1544 5.2. CI/T Playlist Protocol Capability Object 1546 The CI/T Playlist Protocol capability object is used to indicate 1547 support for one or more MediaProtocol types listed in Section 6.3 by 1548 the playlists property of the "trigger.v2" object. 1550 Property: media-protocols 1552 Description: A list of media protocols. 1554 Type: A list of MediaProtocol (from the CDNI Triggers media 1555 protocol types Section 6.3) 1557 Mandatory: No. The default, in case of a missing or an empty 1558 list, is none supported. 1560 5.2.1. CI/T Playlist Protocol Capability Object Serialization 1562 The following shows an example of CI/T Playlist Protocol Capability 1563 object serialization for a dCDN that supports "hls" and "dash". 1565 { 1566 "capabilities": [ 1567 { 1568 "capability-type": "FCI.TriggerPlaylistProtocol", 1569 "capability-value": { 1570 "media-protocols": ["hls", "dash"] 1571 }, 1572 "footprints": [ 1573 1574 ] 1575 } 1576 ] 1577 } 1579 5.3. CI/T Trigger Extension Capability Object 1581 The CI/T Generic Extension capability object is used to indicate 1582 support for one or more GenericExtensionObject types. 1584 Property: trigger-extension 1586 Description: A list of supported CDNI CI/T 1587 GenericExtensionObject types. 1589 Type: List of strings corresponding to entries from the "CDNI 1590 Payload Types" registry [RFC7736] that are under the CIT 1591 namespace, and that correspond to CDNI CI/T 1592 GenericExtensionObject objects. 1594 Mandatory: No. The default, in case of a missing or an empty 1595 list, MUST be interpreted as "no GenericExtensionObject types 1596 are supported". A non-empty list MUST be interpreted as 1597 containing "the only GenericExtensionObject types that are 1598 supported". 1600 5.3.1. CI/T Trigger Extension Capability Object Serialization 1602 The following shows an example of CI/T Trigger Extension Capability 1603 object serialization for a dCDN that supports the 1604 "CIT.LocationPolicy" and the "CIT.TimePolicy" objects. 1606 { 1607 "capabilities": [ 1608 { 1609 "capability-type": "FCI.TriggerGenericExtension", 1610 "capability-value": { 1611 "trigger-extension": ["CIT.LocationPolicy", "CIT.TimePolicy"] 1612 }, 1613 "footprints": [ 1614 1615 ] 1616 } 1617 ] 1618 } 1620 6. IANA Considerations 1622 6.1. CDNI Payload Types 1624 This document requests the registration of the following CDNI Payload 1625 Types under the IANA "CDNI Payload Types" registry defined in 1626 [RFC7736]: 1628 +-----------------------------+---------------+ 1629 | Payload Type | Specification | 1630 +-----------------------------+---------------+ 1631 | ci-trigger-command.v2 | RFCthis | 1632 | ci-trigger-status.v2 | RFCthis | 1633 | CIT.LocationPolicy | RFCthis | 1634 | CIT.TimePolicy | RFCthis | 1635 | FCI.TriggerVersion | RFCthis | 1636 | FCI.TriggerPlaylistProtocol | RFCthis | 1637 | FCI.TriggerGenericExtension | RFCthis | 1638 +-----------------------------+---------------+ 1640 [RFC Editor: Please replace RFCthis with the published RFC number for 1641 this document.] 1643 6.1.1. CDNI ci-trigger-command.v2 Payload Type 1645 Purpose: The purpose of this payload type is to distinguish version 2 1646 of the CI/T command (and any associated capability advertisement) 1648 Interface: CI/T 1650 Encoding: see Section 3.1 1652 6.1.2. CDNI ci-trigger-status.v2 Payload Type 1654 Purpose: The purpose of this payload type is to distinguish version 2 1655 of the CI/T status resource response (and any associated capability 1656 advertisement) 1658 Interface: CI/T 1660 Encoding: see Section 3.1 1662 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type 1664 Purpose: The purpose of this Trigger Extension type is to distinguish 1665 LocationPolicy CIT Trigger Extension objects. 1667 Interface: CI/T 1669 Encoding: see Section 4.1 1671 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type 1673 Purpose: The purpose of this Trigger Extension type is to distinguish 1674 TimePolicy CI/T Trigger Extension objects. 1676 Interface: CI/T 1678 Encoding: see Section 4.2 1680 6.1.5. CDNI FCI CI/T Versions Payload Type 1682 Purpose: The purpose of this payload type is to distinguish FCI 1683 advertisement objects for CI/T Triggers Versions objects 1685 Interface: FCI 1687 Encoding: see Section 5.1.1 1689 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type 1691 Purpose: The purpose of this payload type is to distinguish FCI 1692 advertisement objects for CI/T Playlist Protocol objects 1694 Interface: FCI 1696 Encoding: see Section 5.2.1 1698 6.1.7. CDNI FCI CI/T Extension Objects Payload Type 1700 Purpose: The purpose of this payload type is to distinguish FCI 1701 advertisement objects for CI/T Extension objects 1703 Interface: FCI 1705 Encoding: see Section 5.3.1 1707 6.2. CDNI CI/T Trigger Error Codes types 1709 The IANA is requested to update the "CDNI CI/T Error Codes" 1710 subregistry (defined in Section 7.3 of [RFC8007] and located at 1711 ) with the 1712 following registration: 1714 +------------+--------------------------------------+---------------+ 1715 | Error Code | Description | Specification | 1716 +------------+--------------------------------------+---------------+ 1717 | eextension | The dCDN failed to parse a generic | Section | 1718 | | "mandatory-to-enforce" extension | Section 3.3.7 | 1719 | | object, or does not support this | of this | 1720 | | extension. | document. | 1721 +------------+--------------------------------------+---------------+ 1723 6.3. CDNI Media protocol types 1725 The IANA is requested to create a new "CDNI MediaProtocol Types" 1726 subregistry in the "Content Delivery Networks Interconnection (CDNI) 1727 Parameters" registry. The "CDNI MediaProtocol Types" namespace 1728 defines the valid MediaProtocol object values in 1729 Section Section 3.3.4, used by the Playlist object. Additions to the 1730 MediaProtocol namespace conform to the "Specification Required" 1731 policy as defined in Section 4.6 of [RFC8126], where the 1732 specification defines the MediaProtocol Type and the protocol to 1733 which it is associated. The designated expert will verify that new 1734 protocol definitions do not duplicate existing protocol definitions 1735 and prevent gratuitous additions to the namespace. 1737 The following table defines the initial MediaProtocol values 1738 corresponding to the HLS, MSS, and DASH protocols: 1740 +---------------+-------------------+---------------+---------------+ 1741 | MediaProtocol | Description | Specification | Protocol | 1742 | Type | | | Specification | 1743 +---------------+-------------------+---------------+---------------+ 1744 | hls | HTTP Live | RFCthis | RFC 8216 | 1745 | | Streaming | | [RFC8216] | 1746 | mss | Microsoft Smooth | RFCthis | MSS [MSS] | 1747 | | Streaming | | | 1748 | dash | Dynamic Adaptive | RFCthis | MPEG-DASH | 1749 | | Streaming over | | [MPEG-DASH] | 1750 | | HTTP (MPEG-DASH) | | | 1751 +---------------+-------------------+---------------+---------------+ 1753 [RFC Editor: Please replace RFCthis with the published RFC number for 1754 this document.] 1756 7. Security Considerations 1758 All security considerations listed in Section 8 of [RFC8007] and 1759 Section 7 of [RFC8008] apply to this document as well. 1761 This document defines the capability to use regular expression within 1762 the trigger spec for more granular content selection. The usage of 1763 regex introduced the risk of regex complexity attacks, a.k.a ReDos 1764 attacks. An attacker may be able to craft a regular expression that 1765 can exhaust server resources and may take exponential time in the 1766 worst case. An implementation MUST protect itself by at least accept 1767 triggers only from an authenticated party over a secured connection. 1768 An implementation SHOULD also protect itself by using secure 1769 programing techniques and decline trigger commands that use 1770 potentially risky regex, such techniques are readily available in 1771 secure programming literature and are beyond the scope of this 1772 document. 1774 8. Acknowledgments 1776 TBD 1778 9. Contributors 1780 The authors would like to thank all members of the "Streaming Video 1781 Alliance" (SVA) Open Caching Working Group for their contribution in 1782 support of this document. 1784 10. References 1786 10.1. Normative References 1788 [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax 1789 Specifications: ABNF", STD 68, RFC 5234, 1790 DOI 10.17487/RFC5234, January 2008, 1791 . 1793 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1794 Requirement Levels", BCP 14, RFC 2119, 1795 DOI 10.17487/RFC2119, March 1997, 1796 . 1798 [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: 1799 Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, 1800 . 1802 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 1803 Resource Identifier (URI): Generic Syntax", STD 66, 1804 RFC 3986, DOI 10.17487/RFC3986, January 2005, 1805 . 1807 [RFC8006] Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma, 1808 "Content Delivery Network Interconnection (CDNI) 1809 Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016, 1810 . 1812 [RFC8007] Murray, R. and B. Niven-Jenkins, "Content Delivery Network 1813 Interconnection (CDNI) Control Interface / Triggers", 1814 RFC 8007, DOI 10.17487/RFC8007, December 2016, 1815 . 1817 [RFC8008] Seedorf, J., Peterson, J., Previdi, S., van Brandenburg, 1818 R., and K. Ma, "Content Delivery Network Interconnection 1819 (CDNI) Request Routing: Footprint and Capabilities 1820 Semantics", RFC 8008, DOI 10.17487/RFC8008, December 2016, 1821 . 1823 [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for 1824 Writing an IANA Considerations Section in RFCs", BCP 26, 1825 RFC 8126, DOI 10.17487/RFC8126, June 2017, 1826 . 1828 [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data 1829 Interchange Format", STD 90, RFC 8259, 1830 DOI 10.17487/RFC8259, December 2017, 1831 . 1833 10.2. Informative References 1835 [ISO8601] ISO, "Data elements and interchange formats -- Information 1836 interchange -- Representation of dates and times", 1837 ISO 8601:2004, Edition 3, 12 2004, 1838 . 1840 [MPEG-DASH] 1841 ISO, "Information technology -- Dynamic adaptive streaming 1842 over HTTP (DASH) -- Part 1: Media presentation description 1843 and segment format", ISO/IEC 23009-1:2014, Edition 2, 05 1844 2014, . 1846 [MSS] Microsoft, "[MS-SSTR]: Smooth Streaming Protocol", 1847 Protocol Revision 8.0, September 2017, 1848 . 1850 [OC-CM] Finkelman, O., Ed., Devabhaktuni, J., and M. Stock, "Open 1851 Caching Content Management Operations Specification", 1852 November 2017, 1853 . 1856 [OCWG] Streaming Video Alliance, "Open Caching", 1857 . 1860 [PCRE841] Hazel, P., "Perl Compatible Regular Expressions", 1861 Version 8.41, July 2017, . 1863 [RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content 1864 Distribution Network Interconnection (CDNI) Problem 1865 Statement", RFC 6707, DOI 10.17487/RFC6707, September 1866 2012, . 1868 [RFC7736] Ma, K., "Content Delivery Network Interconnection (CDNI) 1869 Media Type Registration", RFC 7736, DOI 10.17487/RFC7736, 1870 December 2015, . 1872 [RFC8216] Pantos, R., Ed. and W. May, "HTTP Live Streaming", 1873 RFC 8216, DOI 10.17487/RFC8216, August 2017, 1874 . 1876 [SVA] "Streaming Video Alliance", 1877 . 1879 Authors' Addresses 1881 Ori Finkelman 1882 Qwilt 1883 6, Ha'harash 1884 Hod HaSharon 4524079 1885 Israel 1887 Email: ori.finkelman.ietf@gmail.com 1889 Sanjay Mishra 1890 Verizon 1891 13100 Columbia Pike 1892 Silver Spring, MD 20904 1893 USA 1895 Email: sanjay.mishra@verizon.com 1897 Nir B. Sopher 1898 Qwilt 1899 6, Ha'harash 1900 Hod HaSharon 4524079 1901 Israel 1903 Email: nir@apache.org