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