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