idnits 2.17.1 draft-ietf-cdni-triggers-extensions-02.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 : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (March 31, 2019) is 1850 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 963, but not defined Summary: 0 errors (**), 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: October 2, 2019 March 31, 2019 8 CDNI Control Triggers Interface Extensions 9 draft-ietf-cdni-triggers-extensions-02 11 Abstract 13 This document updates RFC 8007 to include generic extensions and more 14 granular content matching options, required by the Open Caching 15 architecture. The Open Caching working group of the Streaming Video 16 Alliance is focused on the delegation of video delivery request from 17 commercial CDNs to a caching layer at the ISP. In that aspect, Open 18 Caching is a specific use case of CDNI, where the commercial CDN is 19 the upstream CDN (uCDN) and the ISP caching layer is the downstream 20 CDN (dCDN). The extensions specified in this document to the CDNI 21 Control Interface / Triggers are derived from requirements of Open 22 Caching but are applicable to CDNI use cases in general. 24 Requirements Language 26 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 27 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 28 document are to be interpreted as described in RFC 2119 [RFC2119]. 30 Status of This Memo 32 This Internet-Draft is submitted in full conformance with the 33 provisions of BCP 78 and BCP 79. 35 Internet-Drafts are working documents of the Internet Engineering 36 Task Force (IETF). Note that other groups may also distribute 37 working documents as Internet-Drafts. The list of current Internet- 38 Drafts is at https://datatracker.ietf.org/drafts/current/. 40 Internet-Drafts are draft documents valid for a maximum of six months 41 and may be updated, replaced, or obsoleted by other documents at any 42 time. It is inappropriate to use Internet-Drafts as reference 43 material or to cite them other than as "work in progress." 45 This Internet-Draft will expire on October 2, 2019. 47 Copyright Notice 49 Copyright (c) 2019 IETF Trust and the persons identified as the 50 document authors. All rights reserved. 52 This document is subject to BCP 78 and the IETF Trust's Legal 53 Provisions Relating to IETF Documents 54 (https://trustee.ietf.org/license-info) in effect on the date of 55 publication of this document. Please review these documents 56 carefully, as they describe your rights and restrictions with respect 57 to this document. Code Components extracted from this document must 58 include Simplified BSD License text as described in Section 4.e of 59 the Trust Legal Provisions and are provided without warranty as 60 described in the Simplified BSD License. 62 Table of Contents 64 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 65 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 66 1.2. Structure of this document . . . . . . . . . . . . . . . 4 67 2. Interfaces Extensions Overview . . . . . . . . . . . . . . . 4 68 2.1. CDNI Control Interface / Triggers Extensions . . . . . . 5 69 2.1.1. CI/T Objects . . . . . . . . . . . . . . . . . . . . 5 70 2.1.2. Trigger Specification . . . . . . . . . . . . . . . . 5 71 2.1.3. Content Selection . . . . . . . . . . . . . . . . . . 5 72 2.1.4. Trigger Extensibility . . . . . . . . . . . . . . . . 5 73 2.1.5. Error Handling . . . . . . . . . . . . . . . . . . . 6 74 2.2. CDNI Footprint and Capabilities Interface Extensions . . 6 75 3. CI/T Version 2 . . . . . . . . . . . . . . . . . . . . . . . 7 76 3.1. CI/T Objects V2 . . . . . . . . . . . . . . . . . . . . . 7 77 3.2. Error Handling V2 . . . . . . . . . . . . . . . . . . . . 9 78 3.3. Properties of CI/T Version 2 objects . . . . . . . . . . 10 79 3.3.1. Trigger Specification Version 2 . . . . . . . . . . . 10 80 3.3.2. RegexMatch . . . . . . . . . . . . . . . . . . . . . 11 81 3.3.3. Playlist . . . . . . . . . . . . . . . . . . . . . . 13 82 3.3.4. MediaProtocol . . . . . . . . . . . . . . . . . . . . 13 83 3.3.5. CI/T Trigger Extensions . . . . . . . . . . . . . . . 14 84 3.3.5.1. Enforcement Options . . . . . . . . . . . . . . . 14 85 3.3.5.2. GenericExtensionObject . . . . . . . . . . . . . 17 86 3.3.6. Error Description Version 2 . . . . . . . . . . . . . 19 87 3.3.7. Error codes . . . . . . . . . . . . . . . . . . . . . 21 88 3.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 21 89 3.4.1. Invalidation with Regex . . . . . . . . . . . . . . . 21 90 3.4.2. Preposition with Playlists . . . . . . . . . . . . . 23 91 3.4.3. Extensions with Error Propagation . . . . . . . . . . 24 92 4. Trigger Extension Objects . . . . . . . . . . . . . . . . . . 26 93 4.1. LocationPolicy extension . . . . . . . . . . . . . . . . 26 94 4.2. TimePolicy Extension . . . . . . . . . . . . . . . . . . 28 95 4.2.1. UTCWindow . . . . . . . . . . . . . . . . . . . . . . 30 96 4.2.2. LocalTimeWindow . . . . . . . . . . . . . . . . . . . 31 97 4.2.3. DateLocalTime . . . . . . . . . . . . . . . . . . . . 32 98 4.2.3.1. Date and Local Time Format . . . . . . . . . . . 32 99 4.2.3.2. Restrictions . . . . . . . . . . . . . . . . . . 32 100 5. Footprint and Capabilities . . . . . . . . . . . . . . . . . 33 101 5.1. CI/T Versions Capability Object . . . . . . . . . . . . . 33 102 5.1.1. CI/T Versions Capability Object Serialization . . . . 34 103 5.2. CI/T Playlist Protocol Capability Object . . . . . . . . 34 104 5.2.1. CI/T Playlist Protocol Capability Object 105 Serialization . . . . . . . . . . . . . . . . . . . . 34 106 5.3. CI/T Trigger Extension Capability Object . . . . . . . . 35 107 5.3.1. CI/T Trigger Extension Capability Object 108 Serialization . . . . . . . . . . . . . . . . . . . . 35 109 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 110 6.1. CDNI Payload Types . . . . . . . . . . . . . . . . . . . 36 111 6.1.1. CDNI ci-trigger-command.v2 Payload Type . . . . . . . 36 112 6.1.2. CDNI ci-trigger-status.v2 Payload Type . . . . . . . 37 113 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type . . . 37 114 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type . . . . . 37 115 6.1.5. CDNI FCI CI/T Versions Payload Type . . . . . . . . . 37 116 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type . . . . 37 117 6.1.7. CDNI FCI CI/T Extension Objects Payload Type . . . . 38 118 6.2. CDNI CI/T Trigger Error Codes types . . . . . . . . . . . 38 119 6.3. CDNI Media protocol types . . . . . . . . . . . . . . . . 38 120 7. Security Considerations . . . . . . . . . . . . . . . . . . . 39 121 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 39 122 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 39 123 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 124 10.1. Normative References . . . . . . . . . . . . . . . . . . 40 125 10.2. Informative References . . . . . . . . . . . . . . . . . 41 126 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 128 1. Introduction 130 This document defines the objects and extensions required for 131 granular content management operations. For that purpose it extends 132 CDNI Control Interface / Triggers [RFC8007] by adding new content 133 selection options to the trigger specification and specifying a 134 generic extension mechanism that enables adding future functions for 135 controlling the trigger execution. This document also defines and 136 initial set of extension objects. This document gives examples for 137 the extensions specified herein, for complete examples of the trigger 138 interface usage see Section 6 of [RFC8007]. 140 The CDNI Metadata Interface is described in [RFC8006]. 142 The CDNI Footprint and Capability Interface is described in 143 [RFC8008]. 145 The CDNI Control Interface / Triggers is described in [RFC8007]. 147 1.1. Terminology 149 This document reuses the terminology defined in [RFC6707], [RFC8006], 150 [RFC8007], and [RFC8008]. 152 Additionally, the following terms are used throughout this document 153 and are defined as follows: 155 o HLS - HTTP Live Streaming 157 o DASH - Dynamic Adaptive Streaming Over HTTP 159 o MSS - Microsoft Smooth Streaming 161 1.2. Structure of this document 163 The remainder of this document is organized as follows: 165 o Section 2 gives an overview of the extensions specified in this 166 document. 168 o Section 3 specifies version 2 of the CDNI Control Interface / 169 Triggers. 171 o Section 4 specifies an initial set of trigger extension objects. 173 o Section 5 specifies Footprint and Capability objects for CI/T 174 version and extensions. 176 o Section 6 list the IANA considerations of this document. 178 o Section 7 describes the security considerations for the specified 179 properties and extensions. 181 2. Interfaces Extensions Overview 183 This document defines extensions for the CDNI Control Interface / 184 Triggers (CI/T) [RFC8007] and defines FCI objects as per the CDNI 185 Footprint and Capabilities Interface [RFC8008]. 187 2.1. CDNI Control Interface / Triggers Extensions 189 2.1.1. CI/T Objects 191 This document specifies version 2 of the CI/T commands and objects. 192 In this context the CI/T commands and objects as were specified in 193 [RFC8007] are considered to be version 1. 195 2.1.2. Trigger Specification 197 This document specifies version 2 of the Trigger Specification which 198 is an enhancement of the Trigger Specification that includes all 199 properties as defined in Section 5.2.1 of [RFC8007] as well as the 200 additional properties required by the use cases listed below in 201 Section 2.1.3 and Section 2.1.4. 203 2.1.3. Content Selection 205 The trigger specification as defined in Section 5.2.1 of [RFC8007] 206 provides means to select content objects by matching a full content 207 URL or patterns with wildcards. This document specifies two 208 additional selection options: 210 o Regular Expression - Using regex a uCDN can create more complex 211 rules to select the content objects for the cases of 212 "invalidation" and "purge". For example, purging specific content 213 within a specific directory path. 215 o Content Playlist - Using video playlist files, a uCDN can trigger 216 an operation that will be applied to a collection of distinct 217 media files in a format that is natural for a streaming video 218 content provider. A playlist may have several formats, 219 specifically HTTP Live Streaming (HLS) *.m3u8 manifest [RFC8216], 220 Microsoft Smooth Streaming (MSS) *.ismc client manifest [MSS], and 221 Dynamic Adaptive Streaming over HTTP (DASH) *.mpd file [ISO/IEC 222 23009-1:2014] [MPEG-DASH]. 224 2.1.4. Trigger Extensibility 226 The CDNI Control Interface / Triggers [RFC8007] defines a set of 227 properties and objects used by the trigger commands. In this 228 document we define an extension mechanism to the triggers interface 229 that enables the application to add various functions that allow 230 finer control over the trigger execution. This document specifies a 231 generic trigger extension object wrapper for managing individual CDNI 232 trigger extensions in an opaque manner. 234 This document also registers CDNI Payload Types [RFC7736] under the 235 namespace CIT for the initial set of trigger extension types: 237 o CIT.LocationPolicy (for controlling the locations in which the 238 trigger is executed) 240 o CIT.TimePolicy (for scheduling a trigger to run in a specific time 241 window) 243 Example use cases 245 o Pre-position with cache location policy 247 o Purge content with cache location policy 249 o Pre-position at a specific time 251 o Purge by content acquisition time (e.g. purge all content acquired 252 in the past X hours) 254 2.1.5. Error Handling 256 This document extends the CI/T Error Handling (see Section 4.7 of 257 [RFC8007]) to support the following: 259 o Playlists and Regexs - report errors that happened due to specific 260 playlists and/or regexs. 262 o Extension errors - report an error that happened due to an 263 extension object. 265 o Error propagation - enable the uCDN to traceback an error to the 266 dCDN in which it occurred. 268 2.2. CDNI Footprint and Capabilities Interface Extensions 270 Extending the trigger mechanism with optional properties requires the 271 ability for the dCDN to advertise which optional properties it 272 supports. 274 The CDNI Footprint and Capabilities Interface [RFC8008] enables the 275 dCDN to advertise the capabilities it supports across different 276 footprints. This document introduces FCI objects to support the 277 advertisement of these optional properties. 279 Example use cases 280 o Trigger types: Advertise which trigger types are supported by the 281 dCDN. CDNI defines three trigger types (purge, invalidate, pre- 282 position), but it does not necessarily mean that all dCDNs support 283 all of them. The uCDN may prefer to work only with dCDN that 284 support what the uCDN needs. 286 o Content selection rule types: Advertise which selection types are 287 supported. For example, if adding content regex as a means to 288 match on content URLs, not all dCDN would support it. For 289 playlist mapping, advertise which types and versions of protocols 290 are supported, e.g. HLS.vX/DASH.vY/MSS.vX, DASH templates. Note 291 that the version string or schema are protocol specific. 293 o Trigger extensions: Advertise which trigger extensions object 294 types are supported by the dCDN. 296 3. CI/T Version 2 298 [RFC8007] does not define a version number and versioning scheme. 299 We, therefore, designate the interface and objects as defined in 300 Section 5 of [RFC8007] as version 1. The following sections define 301 version 2 of the CI/T objects and their properties as extensions of 302 version 1. 304 3.1. CI/T Objects V2 306 Version 2 of the CI/T interface requires the support of the following 307 objects: 309 o CI/T Commands v2: A trigger command request using the payload type 310 ci-trigger-command.v2. Version 2 MUST only use "trigger.v2" 311 objects as defined in Section 3.3.1, instead of "trigger" objects. 312 All other properties of the trigger command v2 are as defined in 313 Section 5.1.1 of [RFC8007]. 315 o Trigger Status Resource v2: A trigger status resource response 316 using the payload type ci-trigger-status.v2. Version 2 MUST only 317 use "trigger.v2" objects as defined in Section 3.3.1, instead of a 318 "trigger" object, as well as "errors.v2" array as defined in 319 Section 3.3.6, instead of a "errors" array. All other properties 320 of the trigger status v2 are as defined in Section 5.1.2 of 321 [RFC8007]. The errors array "errors.v2" is a list of all errors 322 that occurred in any of the downstream CDNs along the execution 323 path. When a downstream CDN, dCDN-A, propagates a trigger to 324 another downstream CDN, dCDN-B, it MUST also propagated back all 325 errors reported by dCDN-B in the trigger status resource and add 326 them to its own trigger status resource. 328 o Trigger Collections: The payload type ci-trigger-collection is 329 used with no changes and as defined in 5.1.3 of [RFC8007]. 331 Usage example of version 2 of trigger command 333 REQUEST: 335 POST /triggers HTTP/1.1 336 User-Agent: example-user-agent/0.1 337 Host: triggers.dcdn.example.com 338 Accept: */* 339 Content-Type: application/cdni; ptype=ci-trigger-command.v2 340 { 341 "trigger.v2": { }, 342 "cdn-path": [ "AS64496:0" ] 343 } 345 RESPONSE: 347 HTTP/1.1 201 Created 348 Date: Wed, 04 May 2016 08:48:10 GMT 349 Content-Length: 467 350 Content-Type: application/cdni; ptype=ci-trigger-status.v2 351 Location: https://triggers.dcdn.example.com/triggers/0 352 Server: example-server/0.1 354 { 355 "errors.v2": [ { }, 356 ..., 357 { } 358 ], 359 "ctime": 1462351690, 360 "etime": 1462351698, 361 "mtime": 1462351690, 362 "status": "pending", 363 "trigger.v2": { } 364 } 366 Usage example of version 2 of trigger status for the trigger created 367 in the above trigger command example: 369 REQUEST: 371 GET /triggers/0 HTTP/1.1 372 User-Agent: example-user-agent/0.1 373 Host: triggers.dcdn.example.com 374 Accept: */* 376 RESPONSE: 378 HTTP/1.1 200 OK 379 Content-Length: 467 380 Expires: Wed, 04 May 2016 08:49:10 GMT 381 Server: example-server/0.1 382 ETag: "6990548174277557683" 383 Cache-Control: max-age=60 384 Date: Wed, 04 May 2016 08:48:10 GMT 385 Content-Type: application/cdni; ptype=ci-trigger-status.v2 387 { 388 "errors.v2": [ { }, 389 ..., 390 { } 391 ], 392 "ctime": 1462351690, 393 "etime": 1462351698, 394 "mtime": 1462351690, 395 "status": "pending", 396 "trigger.v2": { } 397 } 399 3.2. Error Handling V2 401 The CDNI CI/T interface defines a mechanism for error reporting (see 402 Section 4.7 of [RFC8007]) and an Error Description object for 403 reporting errors (see Section 5.2.6 of [RFC8007]). This document 404 specifies version 2 of CI/T error handling in order to support the 405 following: 407 o Extension errors - report an error that happened due to an 408 extension object. As extension objects are expected to be added 409 to the interface as new requirements comes along, it is expected 410 that in some cases a dCDN may receive a trigger that it cannot 411 process or does not understand. It is essential for the trigger 412 caller to be able to understand when such errors occur so they can 413 take actions to fix them. This document adds a mechanism to 414 report extension errors. 416 o Error propagation - enable the uCDN to traceback an error to the 417 dCDN in which it occurred. CDNI triggers may be propagated over a 418 chain of downstream CDNs. Let us take for example an upstream 419 (uCDN-A) CDN A that is delegating to a downstream CDN B (dCDN-B) 420 and dCDN-B is delegating to a downstream CDN C (dCDN-C). Triggers 421 sent from uCDN-A to dCDN-B may be redistributed from dCDN-B to 422 dCDN-C and errors can happen anywhere along the path. Therefore, 423 it is essential for uCDN-A that sets the trigger, to be able to 424 trace back an error to the downstream CDN where it occurred. This 425 document adds a mechanism to propagate the ID of the faulty dCDN 426 back to the uCDN by adding the CDN ID to the error description. 427 When a downstream dCDN-B propagates a trigger to another 428 downstream dCDN-C, it MUST also propagate back the errors received 429 in the trigger status resource from dCDN-C by adding them to the 430 errors array in its own status resource to be sent back to the 431 originating uCDN-A. This makes sure that the trigger originating 432 upstream CDN will receive an array of errors that occurred in all 433 the CDNs along the execution path, each error carrying its own CDN 434 identifier. 436 3.3. Properties of CI/T Version 2 objects 438 This section defines the values that can appear in the top-level 439 objects described in Section 3.1, and their encodings. 441 3.3.1. Trigger Specification Version 2 443 Version 2 of the Trigger Specification adds the following properties 444 on top of the existing properties of the trigger specification 445 defined in Section 5.2.1 of [RFC8007]. 447 Property: content.regexs 449 Description: Regexs of content URLs to which the CI/T trigger 450 command applies. 452 Type: A JSON array of RegexMatch objects (see Section 3.3.2). 454 Mandatory: No, but at least one of "metadata.*" or "content.*" 455 MUST be present and non-empty. 457 Property: content.playlists 459 Description: Playlists of content the CI/T trigger command 460 applies to. 462 Type: A JSON array of Playlist objects (see Section 3.3.3). 464 Mandatory: No, but at least one of "metadata.*" or "content.*" 465 MUST be present and non-empty. 467 Property: extensions 469 Description: Array of trigger extension data. 471 Type: Array of GenericTriggerExtension objects (see 472 Section 3.3.5.2). 474 Mandatory-to-Specify: No. The default is no extensions. 476 Example of an invalidation trigger.v2 with a list of regex objects, a 477 list of playlist objects, and extensions: 479 { 480 "trigger.v2": { 481 "type": "invalidate", 482 "content.regexs": [ ], 483 "content.playlists": [ ], 484 "extensions": [ , 797 "generic-trigger-extension-value": 798 { 799 800 }, 801 "mandatory-to-enforce": true, 802 "safe-to-redistribute": true, 803 "incomprehensible": false 804 } 806 3.3.6. Error Description Version 2 808 Version 2 of the Error Description adds the "content.playlists", 809 "content.regexs", "extensions" and "cdn" properties on top of the 810 existing properties of version 1 of the trigger Error Description as 811 defined in Section 5.2.6 of [RFC8007]. 813 Properties: content.regexs, content.playlists 815 Description: Content Regex and Playlist references copied from 816 the Trigger Specification. Only those regexs and playlists to 817 which the error applies are included in each property, but 818 those references MUST be exactly as they appear in the request; 819 the dCDN MUST NOT change or generalize the URLs or Regexs. 820 Note that these properties are added on top of the already 821 existing properties: "metadata.urls", "content.urls", 822 "metadata.patterns" and "content.patterns". 824 Type: A JSON array of JSON strings, where each string is copied 825 from a "content.regexs" or "content.playlists" value in the 826 corresponding Trigger Specification. 828 Mandatory: At least one of "content.regexs", 829 "content.playlists", "metadata.urls", "content.urls", 830 "metadata.patterns" or "content.patterns" is mandatory in each 831 Error Description object. 833 Property: extensions 835 Description: Array of trigger extension objects copied from the 836 corresponding "extensions" array from the Trigger 837 Specification. Only those extensions to which the error 838 applies are included, but those extensions MUST be exactly as 839 they appear in the request. where each object is copied from 840 data copied from the 841 Type: Array of GenericTriggerExtension objects, where each 842 extension object is copied from the "extensions" array values 843 in the Trigger Specification. 845 Mandatory: No. The "extensions" array SHOULD be used only if 846 there were errors related to extension objects. 848 Property: cdn 850 Description: The CDN PID of the CDN where the error occurred. 851 The "cdn" property is used by the originating uCDN or by 852 propagating dCDN in order to distinguish in which CDN the error 853 occured. 855 Type: A non-empty JSON string, where the string is a CDN PID as 856 defined in Section 4.6 of [RFC8007]. 858 Mandatory: Yes. 860 Example of an Error Description object reporting a malformed 861 Playlist: 863 { 864 "content.playlists": [ 865 { 866 "playlist": "https://www.example.com/hls/title/index.m3u8", 867 "media-protocol": "hls" 868 } 869 ], 870 "description": "Failed to parse HLS playlist", 871 "error": "econtent", 872 "cdn": "AS64500:0" 873 }, 875 Example of an Error Description object reporting an unsupported 876 extension object: 878 { 879 "errors.v2": [ 880 { 881 "extensions": [ 882 { 883 "generic-trigger-extension-type": 884 , 885 "generic-trigger-extension-value": 886 { 887 888 }, 889 } 890 ], 891 "description": "unrecognized extension ", 892 "error": "eextension", 893 "cdn": "AS64500:0" 894 }, 895 ] 896 } 898 3.3.7. Error codes 900 This document adds the error code "eextension" to the error codes 901 table defined in Section 5.2.6 of [RFC8007]. This error code 902 designates that an error occurred while parsing a generic trigger 903 extension, or that the specific extension is not supported by the 904 CDN. A CDN that fails to parse or execute a generic extension object 905 MUST report it using the "errors.v2" array within the trigger status 906 resource, while setting the error code to "eextension" and providing 907 an appropriate description. The "eextension" error code is a 908 registered type of "CDNI CI/T Trigger Error Codes" (see Section 6.2). 910 3.4. Examples 912 The following subsections provides usage examples of the specified 913 interface extensions being used by the trigger command and status 914 resource. 916 3.4.1. Invalidation with Regex 918 In the following example a CI/T "invalidate" command uses the Regex 919 property to specify the range of content objects for invalidation, 920 the command is rejected by the dCDN due to regex complexity, and an 921 appropriate error is reflected in the status response. 923 REQUEST: 925 POST /triggers HTTP/1.1 926 User-Agent: example-user-agent/0.1 927 Host: triggers.dcdn.example.com 928 Accept: */* 929 Content-Type: application/cdni; ptype=ci-trigger-command.v2 930 { 931 "trigger.v2": { 932 "type": "invalidate", 933 "content.regexs": [ 934 { 935 "regex": "^(https:\\/\\/video\\.example\\.com)\\/ 936 ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$", 937 "case-sensitive": true, 938 "match-query-string": false 939 }, 940 { }, 941 ... 942 { }, 943 ], 944 }, 945 "cdn-path": [ "AS64496:0" ] 946 } 948 RESPONSE: 950 HTTP/1.1 201 Created 951 Date: Wed, 04 May 2016 08:48:10 GMT 952 Content-Length: 467 953 Content-Type: application/cdni; ptype=ci-trigger-status.v2 954 Location: https://triggers.dcdn.example.com/triggers/0 955 Server: example-server/0.1 957 { 958 "errors.v2": [ 959 { 960 "content.regexs": [ 961 { 962 "regex": "^(https:\\/\\/video\\.example\\.com)\\/ 963 ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$", 964 "case-sensitive": true, 965 "match-query-string": false 966 }, 967 ], 968 "description": "The dCDN rejected a regex due to complexity", 969 "error": "ereject", 970 "cdn": "AS64500:0" 971 }, 972 ], 973 "ctime": 1462351690, 974 "etime": 1462351698, 975 "mtime": 1462351690, 976 "status": "failed", 977 "trigger.v2": { } 978 } 980 3.4.2. Preposition with Playlists 982 In the following example a CI/T "preposition" command uses the 983 Playlist property to specify the full media library of a specific 984 content. The command fails due to playlist parse error and an 985 appropriate error is reflected in the status response. 987 REQUEST: 989 POST /triggers HTTP/1.1 990 User-Agent: example-user-agent/0.1 991 Host: triggers.dcdn.example.com 992 Accept: */* 993 Content-Type: application/cdni; ptype=ci-trigger-command.v2 994 { 995 "trigger.v2": { 996 "type": "preposition", 997 "content.playlists": [ 998 { 999 "playlist": "https://www.example.com/hls/title/index.m3u8", 1000 "media-protocol": "hls" 1001 }, 1002 { }, 1003 ... 1004 { }, 1005 ], 1006 }, 1007 "cdn-path": [ "AS64496:0" ] 1008 } 1010 RESPONSE: 1012 HTTP/1.1 201 Created 1013 Date: Wed, 04 May 2016 08:48:10 GMT 1014 Content-Length: 467 1015 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1016 Location: https://triggers.dcdn.example.com/triggers/0 1017 Server: example-server/0.1 1019 { 1020 "errors.v2": [ 1021 { 1022 "content.playlists": [ 1023 { 1024 "playlist": "https://www.example.com/hls/title/index.m3u8", 1025 "media-protocol": "hls" 1026 }, 1027 ], 1028 "description": "The dCDN was not able to parse the playlist", 1029 "error": "econtent", 1030 "cdn": "AS64500:0" 1031 }, 1032 ], 1033 "ctime": 1462351690, 1034 "etime": 1462351698, 1035 "mtime": 1462351690, 1036 "status": "failed", 1037 "trigger.v2": { } 1038 } 1040 3.4.3. Extensions with Error Propagation 1042 In the following example a CI/T "preposition" command is using two 1043 extensions to control the way the trigger is executed. In this 1044 example the receiving dCDN identified as "AS64500:0" does not support 1045 the first extension in the extensions array. dCDN "AS64500:0" further 1046 distributes this trigger to another downstream CDN that is identified 1047 as "AS64501:0", which does not support the second extension in the 1048 extensions array. The error is propagate from "AS64501:0" to 1049 "AS64500:0" and the errors.v2 array reflects both errors. 1051 REQUEST: 1053 POST /triggers HTTP/1.1 1054 User-Agent: example-user-agent/0.1 1055 Host: triggers.dcdn.example.com 1056 Accept: */* 1057 Content-Type: application/cdni; ptype=ci-trigger-command.v2 1058 { 1059 "trigger.v2": { 1060 "type": "preposition", 1061 "content.playlists": [ 1062 { 1063 "playlist": "https://www.example.com/hls/title/index.m3u8", 1064 "media-protocol": "hls" 1065 }, 1066 ], 1067 "extensions": [ 1068 { 1069 "generic-trigger-extension-type": 1071 , 1072 "generic-trigger-extension-value": 1073 { 1074 1075 }, 1076 "mandatory-to-enforce": false, 1077 "safe-to-redistribute": true, 1078 }, 1079 { 1080 "generic-trigger-extension-type": 1081 , 1082 "generic-trigger-extension-value": 1083 { 1084 1085 }, 1086 "mandatory-to-enforce": false, 1087 "safe-to-redistribute": true, 1088 }, 1089 ], 1090 }, 1091 "cdn-path": [ "AS64496:0" ] 1092 } 1094 RESPONSE: 1096 HTTP/1.1 201 Created 1097 Date: Wed, 04 May 2016 08:48:10 GMT 1098 Content-Length: 467 1099 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1100 Location: https://triggers.dcdn.example.com/triggers/0 1101 Server: example-server/0.1 1103 { 1104 "errors.v2": [ 1105 { 1106 "extensions": [ 1107 { 1108 "generic-trigger-extension-type": 1109 , 1110 "generic-trigger-extension-value": 1111 { 1112 1113 }, 1114 "mandatory-to-enforce": false, 1115 "safe-to-redistribute": true, 1116 }, 1117 ], 1118 "description": "unrecognized extension ", 1119 "error": "eextension", 1120 "cdn": "AS64500:0" 1121 }, 1122 { 1123 "extensions": [ 1124 { 1125 "generic-trigger-extension-type": 1126 , 1127 "generic-trigger-extension-value": 1128 { 1129 1130 }, 1131 "mandatory-to-enforce": false, 1132 "safe-to-redistribute": true, 1133 }, 1134 ], 1135 "description": "unrecognized extension ", 1136 "error": "eextension", 1137 "cdn": "AS64501:0" 1138 }, 1139 ], 1140 "ctime": 1462351690, 1141 "etime": 1462351698, 1142 "mtime": 1462351690, 1143 "status": "failed", 1144 "trigger.v2": { } 1145 } 1147 4. Trigger Extension Objects 1149 The objects defined below are intended to be used in the 1150 GenericTriggerExtension object's generic-trigger-extension-value 1151 field as defined in Section Section 3.3.5.2, and their generic- 1152 trigger-extension-type property MUST be set to the appropriate CDNI 1153 Payload Type as defined in Section 6.1 . 1155 4.1. LocationPolicy extension 1157 A content operation may be relevant for a specific geographical 1158 region, or need to be excluded from a specific region. In this case, 1159 the trigger should be applied only to parts of the network that are 1160 either "included" or "not excluded" by the location policy. Note 1161 that the restrictions here are on the cache location rather than the 1162 client location. 1164 The LocationPolicy object defines which CDN or cache locations for 1165 which the trigger command is relevant. 1167 Example use cases: 1169 o Pre-position: Certain contracts allow for pre-positioning or 1170 availability of contract in all regions except for certain 1171 excluded regions in the world, including caches. For example, 1172 some content cannot ever knowingly touch servers in a specific 1173 country, including cached content. Therefore, these regions MUST 1174 be excluded from a pre-positioning operation. 1176 o Purge: In certain cases, content may have been located on servers 1177 in regions where the content must not reside. In such cases a 1178 purge operation to remove content specifically from that region, 1179 is required. 1181 Object specification 1183 Property: locations 1185 Description: An Access List that allows or denies (blocks) the 1186 trigger execution per cache location. 1188 Type: Array of LocationRule objects (see Section 4.2.2.1 of 1189 [RFC8006]) 1191 Mandatory-to-Specify: Yes. 1193 If a location policy object is not listed within the trigger command, 1194 the default behavior is to execute the trigger in all available 1195 caches and locations of the dCDN. 1197 The trigger command is allowed, or denied, for a specific cache 1198 location according to the action of the first location whose 1199 footprint matches against that cache's location. If two or more 1200 footprints overlap, the first footprint that matches against the 1201 cache's location determines the action a CDN MUST take. If the 1202 "locations" property is an empty list or if none of the listed 1203 footprints match the location of a specific cache location, then the 1204 result is equivalent to a "deny" action. 1206 The following is an example of generic trigger extension object 1207 containing a location policy object that allows the trigger execution 1208 in the US but blocks its execution in Canada: 1210 { 1211 "generic-trigger-extension-type": "CIT.LocationPolicy", 1212 "generic-trigger-extension-value": 1213 { 1214 "locations": [ 1215 { 1216 "action": "allow", 1217 "footprints": [ 1218 { 1219 "footprint-type": "countrycode", 1220 "footprint-value": ["us"] 1221 } 1222 ] 1223 }, 1224 { 1225 "action": "deny", 1226 "footprints": [ 1227 { 1228 "footprint-type": "countrycode", 1229 "footprint-value": ["ca"] 1230 } 1231 ] 1232 } 1233 ] 1234 }, 1235 "mandatory-to-enforce": true, 1236 "safe-to-redistribute": true, 1237 "incomprehensible": false 1238 } 1240 4.2. TimePolicy Extension 1242 A uCDN may wish to perform content management operations on the dCDN 1243 in a specific schedule. The TimePolicy extensions allows the uCDN to 1244 instruct the dCDN to execute the trigger command in a desired time 1245 window. For example, a content provider that wishes to pre-populate 1246 a new episode at off-peak time so that it would be ready on caches at 1247 prime time when the episode is released for viewing. A scheduled 1248 operation enables the uCDN to direct the dCDN in what time frame to 1249 execute the trigger. 1251 A uCDN may wish to to schedule a trigger such that the dCDN will 1252 execute it in local time, as it is measured in each region. For 1253 example, a uCDN may wish the dCDN to pull the content at off-peak 1254 hours, between 2AM-4AM, however, as a CDN is distributed across 1255 multiple time zones, the UTC definition of 2AM depends on the actual 1256 location. 1258 We define two alternatives for localized scheduling: 1260 o Regional schedule: When used in conjunction with the Location 1261 Policy defined in Section 4.1, the uCDN can trigger separate 1262 commands for different geographical regions, for each region using 1263 a different schedule. This allows the uCDN to control the 1264 execution time per region. 1266 o Local Time schedule: We introduce a "local time" version for 1267 Internet timestamps that follows the notation for local time as 1268 defined in Section 4.2.2 of [ISO8601]. When local time is used, 1269 that dCDN SHOULD execute the triggers at different absolute times, 1270 according the local time of each execution location. 1272 Object specification 1274 Property: unix-time-window 1276 Description: A UNIX epoch time window in which the trigger 1277 SHOULD be executed. 1279 Type: TimeWindow object using UNIX epoch timestamps (see 1280 Section 4.2.3.2 of [RFC8006]) 1282 Mandatory-to-Specify: No, but exactly one of "unix-time- 1283 window", "utc-window" or "local-time-window" MUST be present. 1285 Property: utc-window 1287 Description: A UTC time window in which the trigger SHOULD be 1288 executed. 1290 Type: UTCWindow object as defined in Section 4.2.1. 1292 Mandatory-to-Specify: No, but exactly one of "unix-time- 1293 window", "utc-window" or "local-time-window" MUST be present. 1295 Property: local-time-window 1297 Description: A local time window. The dCDN SHOULD execute the 1298 trigger at the defined time frame, interpreted as the the local 1299 time per location. 1301 Type: LocalTimeWindow object as defined in Section 4.2.2. 1303 Mandatory-to-Specify: No, but exactly one of "unix-time- 1304 window", "utc-window" or "local-time-window" MUST be present. 1306 If a time policy object is not listed within the trigger command, the 1307 default behavior is to execute the trigger in a time frame most 1308 suitable to the dCDN taking under consideration other constrains and 1309 / or obligations. 1311 Example of a generic trigger extension object containing a time 1312 policy object that schedules the trigger execution to a window 1313 between 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC, using the 1314 "unix-time-window" property: 1316 { 1317 "generic-trigger-extension-type": "CIT.TimePolicy", 1318 "generic-trigger-extension-value": 1319 { 1320 "unix-time-window": { 1321 "start": 946717200, 1322 "end": 946746000 1323 } 1324 } 1325 "mandatory-to-enforce": true, 1326 "safe-to-redistribute": true, 1327 "incomprehensible": false 1328 } 1330 4.2.1. UTCWindow 1332 A UTCWindow object describes a time range in UTC or UTC and a zone 1333 offset that can be applied by a TimePolicy. 1335 Property: start 1337 Description: The start time of the window. 1339 Type: Internet date and time as defined in [RFC3339]. 1341 Mandatory-to-Specify: Yes. 1343 Property: end 1345 Description: The end time of the window. 1347 Type: Internet date and time as defined in [RFC3339]. 1349 Mandatory-to-Specify: Yes. 1351 Example UTCWindow object that describes a time window from 02:30 1352 01/01/2000 UTC to 04:30 01/01/2000 UTC: 1354 { 1355 "start": 2000-01-01T02:30:00.00Z, 1356 "end": 2000-01-01T04:30:00.00Z, 1357 } 1359 Example UTCWindow object that describes a time window in New York 1360 time zone offset UTC-05:00 from 02:30 01/01/2000 to 04:30 01/01/2000: 1362 { 1363 "start": 2000-01-01T02:30:00.00-05:00, 1364 "end": 2000-01-01T04:30:00.00-05:00, 1365 } 1367 4.2.2. LocalTimeWindow 1369 A LocalTimeWindow object describes a time range in local time. The 1370 reader of this object MUST interpret it as "the local time at the 1371 location of execution". For example, if the time window states 2AM 1372 to 4AM local time then a dCDN that has presence in both London (UTC) 1373 and New York (UTC-05:00) will execute the trigger at 2AM-4AM UTC in 1374 London and at 2AM-4AM UTC-05:00 in New York. 1376 Property: start 1378 Description: The start time of the window. 1380 Type: JSON string formatted as DateLocalTime as defined in 1381 Section 4.2.3. 1383 Mandatory-to-Specify: Yes. 1385 Property: end 1387 Description: The end time of the window. 1389 Type: JSON string formatted as DateLocalTime as defined in 1390 Section 4.2.3. 1392 Mandatory-to-Specify: Yes. 1394 Example LocalTimeWindow object that describes a local time window 1395 from 02:30 01/01/2000 to 04:30 01/01/2000. 1397 { 1398 "start": 2000-01-01T02:30:00.00, 1399 "end": 2000-01-01T04:30:00.00, 1400 } 1402 4.2.3. DateLocalTime 1404 DateLocalTime is a timestamp that follows the date and local time 1405 notation in Section 4.3.2 of [ISO8601] as a complete date and time 1406 extended representation, where the time zone designator is omitted. 1407 In addition, for simplicity and as exact accuracy is not an objective 1408 in this case, this specification does not support the decimal 1409 fractions of seconds, and does not take leap second into 1410 consideration. 1412 Type: JSON string using the format "date-local-time" as defined in 1413 Section 4.2.3.1. 1415 4.2.3.1. Date and Local Time Format 1417 The Date and Local Time format is specified here using the syntax 1418 description notation defined in [ABNF]. 1420 date-fullyear = 4DIGIT 1421 date-month = 2DIGIT ; 01-12 1422 date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on 1423 ; month/year 1424 time-hour = 2DIGIT ; 00-23 1425 time-minute = 2DIGIT ; 00-59 1426 time-second = 2DIGIT ; 00-59 leap seconds are not supported 1428 local-time = time-hour ":" time-minute ":" time-second 1429 full-date = date-fullyear "-" date-month "-" date-mday 1430 date-local-time = full-date "T" local-time 1432 Example time representing 09:00AM on 01/01/2000 local time: 1434 2000-01-01T09:00:00.00 1436 NOTE: Per [ABNF] and [ISO8601], the "T" character in this syntax 1437 may alternatively be lower case "t". For simplicity, Applications 1438 that generate the "date-local-time" format defined here, SHOULD 1439 only use the upper case letter "T". 1441 4.2.3.2. Restrictions 1443 The grammar element date-mday represents the day number within the 1444 current month. The maximum value varies based on the month and year 1445 as follows: 1447 Month Number Month/Year Maximum value of date-mday 1448 ------------ ---------- -------------------------- 1449 01 January 31 1450 02 February, normal 28 1451 02 February, leap year 29 1452 03 March 31 1453 04 April 30 1454 05 May 31 1455 06 June 30 1456 07 July 31 1457 08 August 31 1458 09 September 30 1459 10 October 31 1460 11 November 30 1461 12 December 31 1463 See Appendix C of [RFC3339] for a sample C code that determines if a 1464 year is a leap year. 1466 The grammar element time-second may have the values 0-59. The value 1467 of 60 that is used in [ISO8601] to represent a leap second MUST NOT 1468 be used. 1470 Although [ISO8601] permits the hour to be "24", this profile of 1471 [ISO8601] only allows values between "00" and "23" for the hour in 1472 order to reduce confusion. 1474 5. Footprint and Capabilities 1476 This section covers the FCI objects required for advertisement of the 1477 extensions and properties introduced in this document. 1479 5.1. CI/T Versions Capability Object 1481 The CI/T versions capability object is used to indicate support for 1482 one or more CI/T objects versions. Note that the default version as 1483 originally defined in [RFC8007] MUST be implicitly supported 1484 regardless of the versions listed in this capability object. 1486 Property: versions 1488 Description: A list of version numbers. 1490 Type: An array of JSON strings 1492 Mandatory-to-Specify: No. The default is version 1. A missing 1493 or an empty versions list means that only version 1 of the 1494 interface and objects is supported. 1496 5.1.1. CI/T Versions Capability Object Serialization 1498 The following shows an example of CI/T Versions Capability object 1499 serialization for a dCDN that supports versions 2 and 2.1 of the CI/T 1500 interface. 1502 { 1503 "capabilities": [ 1504 { 1505 "capability-type": "FCI.TriggerVersion", 1506 "capability-value": { 1507 "versions": [ "1", "2", "2.1" ] 1508 }, 1509 "footprints": [ 1510 1511 ] 1512 } 1513 ] 1514 } 1516 5.2. CI/T Playlist Protocol Capability Object 1518 The CI/T Playlist Protocol capability object is used to indicate 1519 support for one or more MediaProtocol types listed in Section 6.3 by 1520 the playlists property of the "trigger.v2" object. 1522 Property: media-protocols 1524 Description: A list of media protocols. 1526 Type: A list of MediaProtocol (from the CDNI Triggers media 1527 protocol types Section 6.3) 1529 Mandatory-to-Specify: No. The default, in case of a missing or 1530 an empty list, is none supported. 1532 5.2.1. CI/T Playlist Protocol Capability Object Serialization 1534 The following shows an example of CI/T Playlist Protocol Capability 1535 object serialization for a dCDN that supports "hls" and "dash". 1537 { 1538 "capabilities": [ 1539 { 1540 "capability-type": "FCI.TriggerPlaylistProtocol", 1541 "capability-value": { 1542 "media-protocols": ["hls", "dash"] 1543 }, 1544 "footprints": [ 1545 1546 ] 1547 } 1548 ] 1549 } 1551 5.3. CI/T Trigger Extension Capability Object 1553 The CI/T Generic Extension capability object is used to indicate 1554 support for one or more GenericExtensionObject types. 1556 Property: trigger-extension 1558 Description: A list of supported CDNI CI/T 1559 GenericExtensionObject types. 1561 Type: List of strings corresponding to entries from the "CDNI 1562 Payload Types" registry [RFC7736] that are under the CIT 1563 namespace, and that correspond to CDNI CI/T 1564 GenericExtensionObject objects. 1566 Mandatory-to-Specify: No. The default, in case of a missing or 1567 an empty list, MUST be interpreted as "no 1568 GenericExtensionObject types are supported". A non-empty list 1569 MUST be interpreted as containing "the only 1570 GenericExtensionObject types that are supported". 1572 5.3.1. CI/T Trigger Extension Capability Object Serialization 1574 The following shows an example of CI/T Trigger Extension Capability 1575 object serialization for a dCDN that supports the 1576 "CIT.LocationPolicy" and the "CIT.TimePolicy" objects. 1578 { 1579 "capabilities": [ 1580 { 1581 "capability-type": "FCI.TriggerGenericExtension", 1582 "capability-value": { 1583 "trigger-extension": ["CIT.LocationPolicy", "CIT.TimePolicy"] 1584 }, 1585 "footprints": [ 1586 1587 ] 1588 } 1589 ] 1590 } 1592 6. IANA Considerations 1594 6.1. CDNI Payload Types 1596 This document requests the registration of the following CDNI Payload 1597 Types under the IANA CDNI Payload Type registry defined in [RFC7736]: 1599 +-----------------------------+---------------+ 1600 | Payload Type | Specification | 1601 +-----------------------------+---------------+ 1602 | ci-trigger-command.v2 | RFCthis | 1603 | ci-trigger-status.v2 | RFCthis | 1604 | CIT.LocationPolicy | RFCthis | 1605 | CIT.TimePolicy | RFCthis | 1606 | FCI.TriggerVersion | RFCthis | 1607 | FCI.TriggerPlaylistProtocol | RFCthis | 1608 | FCI.TriggerGenericExtension | RFCthis | 1609 +-----------------------------+---------------+ 1611 [RFC Editor: Please replace RFCthis with the published RFC number for 1612 this document.] 1614 6.1.1. CDNI ci-trigger-command.v2 Payload Type 1616 Purpose: The purpose of this payload type is to distinguish version 2 1617 of the CI/T command (and any associated capability advertisement) 1619 Interface: CI/T 1621 Encoding: see Section 3.1 1623 6.1.2. CDNI ci-trigger-status.v2 Payload Type 1625 Purpose: The purpose of this payload type is to distinguish version 2 1626 of the CI/T status resource response (and any associated capability 1627 advertisement) 1629 Interface: CI/T 1631 Encoding: see Section 3.1 1633 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type 1635 Purpose: The purpose of this Trigger Extension type is to distinguish 1636 LocationPolicy CIT Trigger Extension objects. 1638 Interface: CI/T 1640 Encoding: see Section 4.1 1642 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type 1644 Purpose: The purpose of this Trigger Extension type is to distinguish 1645 TimePolicy CI/T Trigger Extension objects. 1647 Interface: CI/T 1649 Encoding: see Section 4.2 1651 6.1.5. CDNI FCI CI/T Versions Payload Type 1653 Purpose: The purpose of this payload type is to distinguish FCI 1654 advertisement objects for CI/T Triggers Versions objects 1656 Interface: FCI 1658 Encoding: see Section 5.1.1 1660 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type 1662 Purpose: The purpose of this payload type is to distinguish FCI 1663 advertisement objects for CI/T Playlist Protocol objects 1665 Interface: FCI 1667 Encoding: see Section 5.2.1 1669 6.1.7. CDNI FCI CI/T Extension Objects Payload Type 1671 Purpose: The purpose of this payload type is to distinguish FCI 1672 advertisement objects for CI/T Extension objects 1674 Interface: FCI 1676 Encoding: see Section 5.3.1 1678 6.2. CDNI CI/T Trigger Error Codes types 1680 The IANA is requested to update the "CDNI CI/T Error Codes" 1681 subregistry (defined in Section 7.3 of [RFC8007] and located at 1682 ) with the 1683 following registration: 1685 +------------+-----------------------------------+------------------+ 1686 | Error Code | Description | Specification | 1687 +------------+-----------------------------------+------------------+ 1688 | eextension | The dCDN failed to parse a | Section Section | 1689 | | generic extension object, or does | 3.3.7 of this | 1690 | | not support this extension. | document. | 1691 +------------+-----------------------------------+------------------+ 1693 6.3. CDNI Media protocol types 1695 The IANA is requested to create a new "CDNI MediaProtocol Types" 1696 subregistry in the "Content Delivery Networks Interconnection (CDNI) 1697 Parameters" registry. The "CDNI Media Protocol Types" namespace 1698 defines the valid Media Protocol object values in 1699 Section Section 3.3.4, used by the Playlist object. Additions to the 1700 MediaProtocol namespace conform to the "Specification Required" 1701 policy as defined in Section 4.6 of [RFC8126], where the 1702 specification defines the MediaProtocol Type and the protocol to 1703 which it is associated. The designated expert will verify that new 1704 protocol definitions do not duplicate existing protocol definitions 1705 and prevent gratuitous additions to the namespace. 1707 The following table defines the initial MediaProtocol values 1708 corresponding to the HLS, MSS, and DASH protocols: 1710 +---------------+-------------------+---------------+---------------+ 1711 | MediaProtocol | Description | Specification | Protocol | 1712 | Type | | | Specification | 1713 +---------------+-------------------+---------------+---------------+ 1714 | hls | HTTP Live | RFCthis | RFC 8216 | 1715 | | Streaming | | [RFC8216] | 1716 | mss | Microsoft Smooth | RFCthis | MSS [MSS] | 1717 | | Streaming | | | 1718 | dash | Dynamic Adaptive | RFCthis | MPEG-DASH | 1719 | | Streaming over | | [MPEG-DASH] | 1720 | | HTTP (MPEG-DASH) | | | 1721 +---------------+-------------------+---------------+---------------+ 1723 [RFC Editor: Please replace RFCthis with the published RFC number for 1724 this document.] 1726 7. Security Considerations 1728 All security considerations listed in Section 8 of [RFC8007] and 1729 Section 7 of [RFC8008] apply to this document as well. 1731 This document defines the capability to use regular expression within 1732 the trigger spec for more granular content selection. The usage of 1733 regex introduced the risk of regex complexity attacks, a.k.a ReDos 1734 attacks. An attacker may be able to craft a regular expression that 1735 can exhaust server resources and may take exponential time in the 1736 worst case. An implementation MUST protect itself by at least accept 1737 triggers only from an authenticated party over a secured connection. 1738 An implementation SHOULD also protect itself by using secure 1739 programing techniques and decline trigger commands that use 1740 potentially risky regex, such techniques are readily available in 1741 secure programming literature and are beyond the scope of this 1742 document. 1744 8. Acknowledgments 1746 TBD 1748 9. Contributors 1750 The authors would like to thank all members of the "Streaming Video 1751 Alliance" (SVA) Open Caching Working Group for their contribution in 1752 support of this document. 1754 10. References 1756 10.1. Normative References 1758 [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax 1759 Specifications: ABNF", STD 68, RFC 5234, 1760 DOI 10.17487/RFC5234, January 2008, 1761 . 1763 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1764 Requirement Levels", BCP 14, RFC 2119, 1765 DOI 10.17487/RFC2119, March 1997, 1766 . 1768 [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: 1769 Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, 1770 . 1772 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 1773 Resource Identifier (URI): Generic Syntax", STD 66, 1774 RFC 3986, DOI 10.17487/RFC3986, January 2005, 1775 . 1777 [RFC8006] Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma, 1778 "Content Delivery Network Interconnection (CDNI) 1779 Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016, 1780 . 1782 [RFC8007] Murray, R. and B. Niven-Jenkins, "Content Delivery Network 1783 Interconnection (CDNI) Control Interface / Triggers", 1784 RFC 8007, DOI 10.17487/RFC8007, December 2016, 1785 . 1787 [RFC8008] Seedorf, J., Peterson, J., Previdi, S., van Brandenburg, 1788 R., and K. Ma, "Content Delivery Network Interconnection 1789 (CDNI) Request Routing: Footprint and Capabilities 1790 Semantics", RFC 8008, DOI 10.17487/RFC8008, December 2016, 1791 . 1793 [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for 1794 Writing an IANA Considerations Section in RFCs", BCP 26, 1795 RFC 8126, DOI 10.17487/RFC8126, June 2017, 1796 . 1798 [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data 1799 Interchange Format", STD 90, RFC 8259, 1800 DOI 10.17487/RFC8259, December 2017, 1801 . 1803 10.2. Informative References 1805 [ISO8601] ISO, "Data elements and interchange formats -- Information 1806 interchange -- Representation of dates and times", 1807 ISO 8601:2004, Edition 3, 12 2004, 1808 . 1810 [MPEG-DASH] 1811 ISO, "Information technology -- Dynamic adaptive streaming 1812 over HTTP (DASH) -- Part 1: Media presentation description 1813 and segment format", ISO/IEC 23009-1:2014, Edition 2, 05 1814 2014, . 1816 [MSS] Microsoft, "[MS-SSTR]: Smooth Streaming Protocol", 1817 Protocol Revision 8.0, September 2017, 1818 . 1820 [PCRE841] Hazel, P., "Perl Compatible Regular Expressions", 1821 Version 8.41, July 2017, . 1823 [RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content 1824 Distribution Network Interconnection (CDNI) Problem 1825 Statement", RFC 6707, DOI 10.17487/RFC6707, September 1826 2012, . 1828 [RFC7736] Ma, K., "Content Delivery Network Interconnection (CDNI) 1829 Media Type Registration", RFC 7736, DOI 10.17487/RFC7736, 1830 December 2015, . 1832 [RFC8216] Pantos, R., Ed. and W. May, "HTTP Live Streaming", 1833 RFC 8216, DOI 10.17487/RFC8216, August 2017, 1834 . 1836 Authors' Addresses 1838 Ori Finkelman 1839 Qwilt 1840 6, Ha'harash 1841 Hod HaSharon 4524079 1842 Israel 1844 Phone: +972-72-2221647 1845 Email: ori.finkelman.ietf@gmail.com 1846 Sanjay Mishra 1847 Verizon 1848 13100 Columbia Pike 1849 Silver Spring, MD 20904 1850 USA 1852 Email: sanjay.mishra@verizon.com