idnits 2.17.1 draft-ietf-cdni-triggers-extensions-07.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 : ---------------------------------------------------------------------------- -- The draft header indicates that this document updates RFC8007, but the abstract doesn't seem to directly say this. It does mention RFC8007 though, so this could be OK. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (December 23, 2020) is 1219 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 1095, but not defined ** Downref: Normative reference to an Informational RFC: RFC 6707 ** Downref: Normative reference to an Informational RFC: RFC 7736 Summary: 2 errors (**), 0 flaws (~~), 2 warnings (==), 3 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: June 26, 2021 N. Sopher 7 Qwilt 8 December 23, 2020 10 CDNI Control Triggers Interface Extensions 11 draft-ietf-cdni-triggers-extensions-07 13 Abstract 15 Open Caching architecture is a use case of Content Delivery Network 16 Interconnection (CDNI) in which the commercial Content Delivery 17 Network (CDN) is the upstream CDN (uCDN) and the ISP caching layer 18 serves as the downstream CDN (dCDN). This document defines 19 extensions to the Content Delivery Network Interconnection (CDNI) 20 Control Interface/Triggers defined in RFC 8007. These extensions are 21 derived from requirements raised by Open Caching architecture but are 22 also applicable to CDNI use cases in general. 24 Requirements Language 26 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 27 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 28 document are to be interpreted as described in RFC 2119 [RFC2119]. 30 Status of This Memo 32 This Internet-Draft is submitted in full conformance with the 33 provisions of BCP 78 and BCP 79. 35 Internet-Drafts are working documents of the Internet Engineering 36 Task Force (IETF). Note that other groups may also distribute 37 working documents as Internet-Drafts. The list of current Internet- 38 Drafts is at https://datatracker.ietf.org/drafts/current/. 40 Internet-Drafts are draft documents valid for a maximum of six months 41 and may be updated, replaced, or obsoleted by other documents at any 42 time. It is inappropriate to use Internet-Drafts as reference 43 material or to cite them other than as "work in progress." 45 This Internet-Draft will expire on June 26, 2021. 47 Copyright Notice 49 Copyright (c) 2020 IETF Trust and the persons identified as the 50 document authors. All rights reserved. 52 This document is subject to BCP 78 and the IETF Trust's Legal 53 Provisions Relating to IETF Documents 54 (https://trustee.ietf.org/license-info) in effect on the date of 55 publication of this document. Please review these documents 56 carefully, as they describe your rights and restrictions with respect 57 to this document. Code Components extracted from this document must 58 include Simplified BSD License text as described in Section 4.e of 59 the Trust Legal Provisions and are provided without warranty as 60 described in the Simplified BSD License. 62 Table of Contents 64 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 65 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 66 1.2. Structure of this document . . . . . . . . . . . . . . . 4 67 2. Interfaces Extensions Overview . . . . . . . . . . . . . . . 5 68 2.1. CDNI Control Interface / Triggers Extensions . . . . . . 5 69 2.1.1. CI/T Objects . . . . . . . . . . . . . . . . . . . . 5 70 2.1.2. Trigger Specification . . . . . . . . . . . . . . . . 5 71 2.1.3. Content Selection . . . . . . . . . . . . . . . . . . 5 72 2.1.4. Trigger Extensibility . . . . . . . . . . . . . . . . 6 73 2.1.5. Error Handling . . . . . . . . . . . . . . . . . . . 6 74 2.2. CDNI Footprint and Capabilities Interface Extensions . . 7 75 3. CI/T Version 2 . . . . . . . . . . . . . . . . . . . . . . . 7 76 3.1. CI/T Objects V2 . . . . . . . . . . . . . . . . . . . . . 7 77 3.2. Error Handling V2 . . . . . . . . . . . . . . . . . . . . 10 78 3.2.1. Extension Errors . . . . . . . . . . . . . . . . . . 10 79 3.2.2. Error propagation . . . . . . . . . . . . . . . . . . 11 80 3.3. Properties of CI/T Version 2 objects . . . . . . . . . . 13 81 3.3.1. Trigger Specification Version 2 . . . . . . . . . . . 14 82 3.3.2. RegexMatch . . . . . . . . . . . . . . . . . . . . . 15 83 3.3.3. Playlist . . . . . . . . . . . . . . . . . . . . . . 16 84 3.3.4. MediaProtocol . . . . . . . . . . . . . . . . . . . . 17 85 3.3.5. CI/T Trigger Extensions . . . . . . . . . . . . . . . 17 86 3.3.5.1. Enforcement Options . . . . . . . . . . . . . . . 17 87 3.3.5.2. GenericExtensionObject . . . . . . . . . . . . . 20 88 3.3.6. Error Description Version 2 . . . . . . . . . . . . . 22 89 3.3.7. Error codes . . . . . . . . . . . . . . . . . . . . . 24 90 3.4. Examples . . . . . . . . . . . . . . . . . . . . . . . . 24 91 3.4.1. Invalidation with Regex . . . . . . . . . . . . . . . 24 92 3.4.2. Preposition with Playlists . . . . . . . . . . . . . 26 93 3.4.3. Extensions with Error Propagation . . . . . . . . . . 27 94 4. Trigger Extension Objects . . . . . . . . . . . . . . . . . . 29 95 4.1. LocationPolicy extension . . . . . . . . . . . . . . . . 29 96 4.2. TimePolicy Extension . . . . . . . . . . . . . . . . . . 31 97 4.2.1. UTCWindow . . . . . . . . . . . . . . . . . . . . . . 33 98 4.2.2. LocalTimeWindow . . . . . . . . . . . . . . . . . . . 34 99 4.2.3. DateLocalTime . . . . . . . . . . . . . . . . . . . . 35 100 4.2.3.1. Date and Local Time Format . . . . . . . . . . . 35 101 4.2.3.2. Restrictions . . . . . . . . . . . . . . . . . . 36 102 5. Footprint and Capabilities . . . . . . . . . . . . . . . . . 36 103 5.1. CI/T Versions Capability Object . . . . . . . . . . . . . 36 104 5.1.1. CI/T Versions Capability Object Serialization . . . . 37 105 5.2. CI/T Playlist Protocol Capability Object . . . . . . . . 37 106 5.2.1. CI/T Playlist Protocol Capability Object 107 Serialization . . . . . . . . . . . . . . . . . . . . 37 108 5.3. CI/T Trigger Extension Capability Object . . . . . . . . 38 109 5.3.1. CI/T Trigger Extension Capability Object 110 Serialization . . . . . . . . . . . . . . . . . . . . 38 111 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39 112 6.1. CDNI Payload Types . . . . . . . . . . . . . . . . . . . 39 113 6.1.1. CDNI ci-trigger-command.v2 Payload Type . . . . . . . 39 114 6.1.2. CDNI ci-trigger-status.v2 Payload Type . . . . . . . 40 115 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type . . . 40 116 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type . . . . . 40 117 6.1.5. CDNI FCI CI/T Versions Payload Type . . . . . . . . . 40 118 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type . . . . 40 119 6.1.7. CDNI FCI CI/T Extension Objects Payload Type . . . . 41 120 6.2. CDNI CI/T Trigger Error Codes types . . . . . . . . . . . 41 121 6.3. CDNI Media protocol types . . . . . . . . . . . . . . . . 41 122 7. Security Considerations . . . . . . . . . . . . . . . . . . . 42 123 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 42 124 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 42 125 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 43 126 10.1. Normative References . . . . . . . . . . . . . . . . . . 43 127 10.2. Informative References . . . . . . . . . . . . . . . . . 44 128 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 45 130 1. Introduction 132 The Streaming Video Alliance [SVA] is a global association that works 133 to solve streaming video challenges in an effort to improve end-user 134 experience and adoption. The Open Caching Working Group [OCWG] of 135 the Streaming Video Alliance [SVA] is focused on the delegation of 136 video delivery requests from commerical CDNs to a caching layer at 137 the ISP's network. Open Caching architecture is a specific use case 138 of CDNI where the commercial CDN is the upstream CDN (uCDN) and the 139 ISP caching layer is the downstream CDN (dCDN). The Open Caching 140 Content Management Operations Specification [OC-CM] defines objects 141 and extensions required by Open Caching architecture for granular 142 content management operations. This document adds those extensions 143 to the CDNI Control Interface / Triggers [RFC8007] as required for 144 Open Caching content management options. This document also 145 specifies a generic extension mechanism to enable adding future 146 functions for controlling the trigger execution>. 148 The CDNI Metadata Interface is described in [RFC8006]. 150 The CDNI Footprint and Capability Interface is described in 151 [RFC8008]. 153 The CDNI Control Interface / Triggers is described in [RFC8007]. 155 For consistency with other CDNI documents, this document follows the 156 CDNI convention of uCDN (upstream CDN) and dCDN (downstream CDN) as 157 described in [RFC6707] to represent the commercial CDN and ISP 158 caching layer, respectively. 160 1.1. Terminology 162 This document reuses the terminology defined in [RFC6707], [RFC7736] 163 [RFC8006], [RFC8007], and [RFC8008]. 165 Additionally, the following terms are used throughout this document 166 and are defined as follows: 168 o HLS - HTTP Live Streaming 170 o DASH - Dynamic Adaptive Streaming Over HTTP 172 o MSS - Microsoft Smooth Streaming 174 1.2. Structure of this document 176 The remainder of this document is organized as follows: 178 o Section 2 gives an overview of the extensions specified in this 179 document. 181 o Section 3 specifies version 2 of the CDNI Control Interface / 182 Triggers. 184 o Section 4 specifies an initial set of trigger extension objects. 186 o Section 5 specifies Footprint and Capability objects for CI/T 187 version and extensions. 189 o Section 6 list the IANA considerations of this document. 191 o Section 7 describes the security considerations for the specified 192 properties and extensions. 194 2. Interfaces Extensions Overview 196 This document defines extensions for the CDNI Control Interface / 197 Triggers (CI/T) [RFC8007] and defines FCI objects as per the CDNI 198 Footprint and Capabilities Interface [RFC8008]. 200 2.1. CDNI Control Interface / Triggers Extensions 202 2.1.1. CI/T Objects 204 This document specifies version 2 of the CI/T commands and objects. 205 In this context the CI/T commands and objects as were specified in 206 [RFC8007] are considered to be version 1. 208 2.1.2. Trigger Specification 210 This document specifies version 2 of the Trigger Specification which 211 is an enhancement of the Trigger Specification that includes all 212 properties as defined in Section 5.2.1 of [RFC8007] as well as the 213 additional properties required by the use cases listed below in 214 Section 2.1.3 and Section 2.1.4. 216 2.1.3. Content Selection 218 The trigger specification as defined in Section 5.2.1 of [RFC8007] 219 provides means to select content objects by matching a full content 220 URL or patterns with wildcards. This document specifies two 221 additional selection options: 223 o Regular Expression - Using regex, a uCDN can create more complex 224 rules to select the content objects for the cases of 225 "invalidation" and "purge". For example, purging specific content 226 within a specific directory path. 228 o Content Playlist - Using video playlist files, a uCDN can trigger 229 an operation that will be applied to a collection of distinct 230 media files in a format that is natural for a streaming video 231 content provider. A playlist may have several formats, 232 specifically HTTP Live Streaming (HLS) *.m3u8 manifest [RFC8216], 233 Microsoft Smooth Streaming (MSS) *.ismc client manifest [MSS], and 234 Dynamic Adaptive Streaming over HTTP (DASH) *.mpd file [ISO/IEC 235 23009-1:2014] [MPEG-DASH]. 237 2.1.4. Trigger Extensibility 239 The CDNI Control Interface / Triggers [RFC8007] defines a set of 240 properties and objects used by the trigger commands. In this 241 document we define an extension mechanism to the triggers interface 242 that enables the application to add various functions that allow 243 finer control over the trigger execution. This document specifies a 244 generic trigger extension object wrapper for managing individual CDNI 245 trigger extensions in an opaque manner. 247 This document also registers CDNI Payload Types [RFC7736] under the 248 namespace CIT for the initial set of trigger extension types: 250 o CIT.LocationPolicy (for controlling the locations in which the 251 trigger is executed) 253 o CIT.TimePolicy (for scheduling a trigger to run in a specific time 254 window) 256 Example use cases 258 o Pre-position with cache location policy 260 o Purge content with cache location policy 262 o Pre-position at a specific time 264 o Purge by content acquisition time (e.g. purge all content acquired 265 in the past X hours) 267 2.1.5. Error Handling 269 This document extends the CI/T Error Handling (see Section 4.7 of 270 [RFC8007]) to support the following: 272 o Playlists and Regexs - report errors that happened due to specific 273 playlists and/or regexs. 275 o Extension errors - report an error that happened due to an 276 extension object. 278 o Error propagation - enable the uCDN to traceback an error to the 279 dCDN in which it occurred. 281 2.2. CDNI Footprint and Capabilities Interface Extensions 283 Extending the trigger mechanism with optional properties requires the 284 ability for the dCDN to advertise which optional properties it 285 supports. 287 The CDNI Footprint and Capabilities Interface [RFC8008] enables the 288 dCDN to advertise the capabilities it supports across different 289 footprints. This document introduces FCI objects to support the 290 advertisement of these optional properties. 292 Example use cases 294 o Trigger types: Advertise which trigger types are supported by the 295 dCDN. CDNI defines three trigger types (purge, invalidate, pre- 296 position), but it does not necessarily mean that all dCDNs support 297 all of them. The uCDN may prefer to work only with dCDN that 298 support what the uCDN needs. 300 o Content selection rule types: Advertise which selection types are 301 supported. For example, if adding content regex as a means to 302 match on content URLs, not all dCDN would support it. For 303 playlist mapping, advertise which types and versions of protocols 304 are supported, e.g. HLS.vX/DASH.vY/MSS.vX, DASH templates. Note 305 that the version string or schema are protocol specific. 307 o Trigger extensions: Advertise which trigger extensions object 308 types are supported by the dCDN. 310 3. CI/T Version 2 312 [RFC8007] does not define a version number and versioning scheme. 313 We, therefore, designate the interface and objects as defined in 314 Section 5 of [RFC8007] as version 1. The following sections define 315 version 2 of the CI/T objects and their properties as extensions of 316 version 1. 318 3.1. CI/T Objects V2 320 Version 2 of the CI/T interface requires the support of the following 321 objects: 323 o CI/T Commands v2: A trigger command request using the payload type 324 ci-trigger-command.v2. Version 2 MUST only use "trigger.v2" 325 objects as defined in Section 3.3.1, instead of "trigger" objects. 326 All other properties of the trigger command v2 are as defined in 327 Section 5.1.1 of [RFC8007]. 329 o Trigger Status Resource v2: A trigger status resource response 330 using the payload type ci-trigger-status.v2. Version 2 MUST only 331 use "trigger.v2" objects as defined in Section 3.3.1, instead of a 332 "trigger" object, as well as "errors.v2" array as defined in 333 Section 3.3.6, instead of a "errors" array. All other properties 334 of the trigger status v2 are as defined in Section 5.1.2 of 335 [RFC8007]. The errors array "errors.v2" is a list of all errors 336 that occurred in any of the downstream CDNs along the execution 337 path. When a downstream CDN, dCDN-A, propagates a trigger to 338 another downstream CDN, dCDN-B, it MUST also propagate back all 339 errors reported by dCDN-B in the trigger status resource and add 340 them to its own trigger status resource. 342 o Trigger Collections: The payload type ci-trigger-collection is 343 used with no changes and as defined in 5.1.3 of [RFC8007]. 345 Usage example of version 2 of trigger command 346 REQUEST: 348 POST /triggers HTTP/1.1 349 User-Agent: example-user-agent/0.1 350 Host: triggers.dcdn.example.com 351 Accept: */* 352 Content-Type: application/cdni; ptype=ci-trigger-command.v2 353 { 354 "trigger.v2": { }, 355 "cdn-path": [ "AS64496:0" ] 356 } 358 RESPONSE: 360 HTTP/1.1 201 Created 361 Date: Wed, 04 May 2016 08:48:10 GMT 362 Content-Length: 467 363 Content-Type: application/cdni; ptype=ci-trigger-status.v2 364 Location: https://triggers.dcdn.example.com/triggers/0 365 Server: example-server/0.1 367 { 368 "errors.v2": [ { }, 369 ..., 370 { } 371 ], 372 "ctime": 1462351690, 373 "etime": 1462351698, 374 "mtime": 1462351690, 375 "status": "pending", 376 "trigger.v2": { } 377 } 379 Usage example of version 2 of trigger status for the trigger created 380 in the above trigger command example: 382 REQUEST: 384 GET /triggers/0 HTTP/1.1 385 User-Agent: example-user-agent/0.1 386 Host: triggers.dcdn.example.com 387 Accept: */* 389 RESPONSE: 391 HTTP/1.1 200 OK 392 Content-Length: 467 393 Expires: Wed, 04 May 2016 08:49:10 GMT 394 Server: example-server/0.1 395 ETag: "6990548174277557683" 396 Cache-Control: max-age=60 397 Date: Wed, 04 May 2016 08:48:10 GMT 398 Content-Type: application/cdni; ptype=ci-trigger-status.v2 400 { 401 "errors.v2": [ { }, 402 ..., 403 { } 404 ], 405 "ctime": 1462351690, 406 "etime": 1462351698, 407 "mtime": 1462351690, 408 "status": "pending", 409 "trigger.v2": { } 410 } 412 3.2. Error Handling V2 414 The CDNI CI/T interface defines a mechanism for error reporting (see 415 Section 4.7 of [RFC8007]) and an Error Description object for 416 reporting errors (see Section 5.2.6 of [RFC8007]). This document 417 specifies version 2 of CI/T error handling in order to support the 418 following: 420 3.2.1. Extension Errors 422 Report an error that occures due to an extension object. As 423 extension objects are expected to be added to the interface whenever 424 new requirement comes along, it is expected that in some cases a dCDN 425 may receive a trigger that it cannot process or it does not 426 understand. It is therefore essential for the trigger caller to be 427 able to know when such errors occur so they can take actions to fix 428 them. This document adds a mechanism to report extension errors. 430 3.2.2. Error propagation 432 This subsection explains the mechanism for enabling the uCDN to 433 traceback an error to the dCDN in which it occurred. CDNI triggers 434 may be propagated over a chain of downstream CDNs. For example, an 435 upstream CDN A (uCDN-A) that is delegating to a downstream CDN B 436 (dCDN-B) and dCDN-B is delegating to a downstream CDN C (dCDN-C). 437 Triggers sent from uCDN-A to dCDN-B may be redistributed from dCDN-B 438 to dCDN-C and errors can occur anywhere along the path. Therefore, 439 it might be essential for uCDN-A that sets the trigger, to be able to 440 trace back an error to the downstream CDN where it occurred. This 441 document adds a mechanism to propagate the CDN Provider ID (PID) of 442 the dCDN where the fault occured, back to the uCDN by adding the PID 443 to the error description. When dCDN-B propagates a trigger to the 444 further downstream dCDN-C, it MUST also propagate back the errors 445 received in the trigger status resource from dCDN-C by adding them to 446 the errors array in its own status resource to be sent back to the 447 originating uCDN-A. While propagating back the errors, and depending 448 on the implementation, dCDN-B MAY also specify the dCDN-C PID, 449 indicating to which CDN the error relates spefically. The trigger 450 originating upstream CDN will receive an array of errors that 451 occurred in all the CDNs along the execution path, where each error 452 MAY be carrying its own CDN identifier. 454 Figure 1 below is an example showing the message flow used by uCDN-A 455 to trigger activity in the dCDN-B, followed by dCDN-C, as well as the 456 discovery of the status of that activity, including the Error 457 Propagation. 459 uCDN-A dCDN-B dCDN-C 460 | | | 461 | (1) POST | | 462 | https://dcdn-b.example.com | | 463 | /triggers/uCDN-A | | 464 [ ]--------------------------->[ ]--+ | 465 | [ ] | (2) | 466 | [ ]<-+ | 467 | (3) HTTP 201 Response. [ ] | 468 |<----------------------------[ ] | 469 | Loc: [ ] | 470 | https://dcdn-b.example.com [ ] (4) POST | 471 | /triggers/uCDN-A/123 [ ] https://dcdn-c.example.com | 472 | [ ] /triggers/uCDN-A | (5) 473 | [ ]--------------------------->[ ]--+ 474 | | [ ] | 475 | | [ ]<-+ 476 | | (6) HTTP 201 Response. [ ] 477 | [ ]<---------------------------[ ] 478 | | Loc: | 479 | | https://dcdn-c.example.com | 480 | | /triggers/dCDN-B/456 | 481 | | | 482 | [ ]--+ | 483 | [ ] | (7.1) | 484 | [ ]<-+ [ ]--+ 485 | | (7.2) [ ] | 486 | | [ ]<-+ 487 | | | 488 . . . 489 . . . 490 . . . 491 | | (8) GET | 492 | | https://dcdn-c.example.com | 493 | | /triggers/dCDN-B/456 | 494 | [ ]--------------------------->[ ] 495 | | [ ] 496 | | (9) HTTP 200 [ ] 497 | | Trigger Status Resource [ ] 498 | [ ]<---------------------------[ ] 499 | | | 500 . . . 501 . . . 502 . . . 503 | (10) GET | | 504 | https://dcdn-b.example.com | | 505 | /triggers/uCDN-A/123 | | 506 [ ]--------------------------->[ ] | 507 | [ ] | 508 | (11) HTTP 200 [ ] | 509 | Trigger Status Resource [ ] | 510 [ ]<---------------------------[ ] | 512 Figure 1: CDNI Message Flow for Triggers, Including Error Propagation 514 The steps in Figure 1 are as follows: 516 1. The uCDN-A triggers action in the dCDN-B by POSTing a CI/T 517 Command to a collection of Trigger Status Resources 518 "https://dcdn-b.example.com/triggers/uCDN-A". This URL was 519 given to the uCDN-A when the CI/T interface was established. 521 2. The dCDN-B authenticates the request, validates the CI/T 522 Command, and, if it accepts the request, creates a new Trigger 523 Status Resource. 525 3. The dCDN-B responds to the uCDN-A with an HTTP 201 response 526 status and the location of the Trigger Status Resource. 528 4. The dCDN-B triggers the action in the dCDN-C by POSTing a CI/T 529 Command to a collection of Trigger Status Resources 530 "https://dcdn-c.example.com/triggers/dCDN-B". This URL was 531 given to the uCDN-A when the CI/T interface was established. 533 5. The dCDN-C authenticates the request, validates the CI/T 534 Command, and, if it accepts the request, creates a new Trigger 535 Status Resource. 537 6. The dCDN-C responds to the dCDN-B with an HTTP 201 response 538 status and the location of the Trigger Status Resource. 540 7. The dCDN-C acts upon the CI/T Command. However, the command 541 fails at dCDN-C as, for example, the Tigger Specification 542 contains a "type" that is not supported by dCDN-C. 544 8. The dCDN-B can poll, possibly repeatedly, the Trigger Status 545 Resource in dCDN-C. 547 9. The dCDN-C responds with the Trigger Status Resource, describing 548 the progress or results of the CI/T Trigger Command. In the 549 described flow, the returned Status is "failed", with an Error 550 Description Object holding an "eunsupported" Error Code 551 reflecting the status response. 553 10. The uCDN-A can poll, possibly repeatedly, the Trigger Status 554 Resource in dCDN-B. 556 11. The dCDN-B responds with the Trigger Status Resource, describing 557 the progress or results of the CI/T Trigger Command. In the 558 flow described above, the returned Status is "failed", and the 559 "eunsupported" error received in the trigger status resource 560 from dCDN-C is propagated along with dCDN-C PID by adding it to 561 the errors array in dCDN-B's own status resource to be sent back 562 to the originating uCDN-A. 564 3.3. Properties of CI/T Version 2 objects 566 This section defines the values that can appear in the top-level 567 objects described in Section 3.1, and their encodings. 569 3.3.1. Trigger Specification Version 2 571 Version 2 of the Trigger Specification adds the following properties 572 on top of the existing properties of the trigger specification 573 defined in Section 5.2.1 of [RFC8007]. 575 Property: content.regexs 577 Description: Regexs of content URLs to which the CI/T trigger 578 command applies. 580 Type: A JSON array of RegexMatch objects (see Section 3.3.2). 582 Mandatory: No, but at least one of "metadata.*" or "content.*" 583 MUST be present and non-empty. 585 Property: content.playlists 587 Description: Playlists of content the CI/T trigger command 588 applies to. 590 Type: A JSON array of Playlist objects (see Section 3.3.3). 592 Mandatory: No, but at least one of "metadata.*" or "content.*" 593 MUST be present and non-empty. 595 Property: extensions 597 Description: Array of trigger extension data. 599 Type: Array of GenericTriggerExtension objects (see 600 Section 3.3.5.2). 602 Mandatory: No. The default is no extensions. 604 Example of a JSON serialized invalidation trigger.v2 object with a 605 list of regex objects, a list of playlist objects, and extensions: 607 { 608 "trigger.v2": { 609 "type": "invalidate", 610 "content.regexs": [ ], 611 "content.playlists": [ ], 612 "extensions": [ , 927 "generic-trigger-extension-value": 928 { 929 930 }, 931 "mandatory-to-enforce": true, 932 "safe-to-redistribute": true, 933 "incomprehensible": false 934 } 936 3.3.6. Error Description Version 2 938 Version 2 of the Error Description adds the "content.playlists", 939 "content.regexs", "extensions" and "cdn" properties on top of the 940 existing properties of version 1 of the trigger Error Description as 941 defined in Section 5.2.6 of [RFC8007]. 943 Properties: content.regexs, content.playlists 945 Description: Content Regex and Playlist references copied from 946 the Trigger Specification. Only those regexs and playlists to 947 which the error applies are included in each property, but 948 those references MUST be exactly as they appear in the request; 949 the dCDN MUST NOT change or generalize the URLs or Regexs. 950 Note that these properties are added on top of the already 951 existing properties: "metadata.urls", "content.urls", 952 "metadata.patterns" and "content.patterns". 954 Type: A JSON array of JSON strings, where each string is copied 955 from a "content.regexs" or "content.playlists" value in the 956 corresponding Trigger Specification. 958 Mandatory: At least one of "content.regexs", 959 "content.playlists", "metadata.urls", "content.urls", 960 "metadata.patterns" or "content.patterns" is mandatory in each 961 Error Description object. 963 Property: extensions 965 Description: Array of trigger extension objects copied from the 966 corresponding "extensions" array from the Trigger 967 Specification. Only those extensions to which the error 968 applies are included, but those extensions MUST be exactly as 969 they appear in the request. 971 Type: Array of GenericTriggerExtension objects, where each 972 extension object is copied from the "extensions" array values 973 in the Trigger Specification. 975 Mandatory: No. The "extensions" array SHOULD be used only if 976 the error relates to extension objects. 978 Property: cdn 980 Description: The CDN PID of the CDN where the error occurred. 981 The "cdn" property is used by the originating uCDN or by 982 propagating dCDN in order to distinguish in which CDN the error 983 occured. 985 Type: A non-empty JSON string, where the string is a CDN PID as 986 defined in Section 4.6 of [RFC8007]. 988 Mandatory: Yes. In the case the dCDN does not like to expose 989 this information, it should provide its own CDN PID. 991 Example of a JSON serialized Error Description object reporting a 992 malformed Playlist: 994 { 995 "content.playlists": [ 996 { 997 "playlist": "https://www.example.com/hls/title/index.m3u8", 998 "media-protocol": "hls" 999 } 1000 ], 1001 "description": "Failed to parse HLS playlist", 1002 "error": "econtent", 1003 "cdn": "AS64500:0" 1004 }, 1006 Example of a JSON serialized Error Description object reporting an 1007 unsupported extension object: 1009 { 1010 "errors.v2": [ 1011 { 1012 "extensions": [ 1013 { 1014 "generic-trigger-extension-type": 1015 , 1016 "generic-trigger-extension-value": 1017 { 1018 1019 }, 1020 } 1021 ], 1022 "description": "unrecognized extension ", 1023 "error": "eextension", 1024 "cdn": "AS64500:0" 1025 }, 1026 ] 1027 } 1029 3.3.7. Error codes 1031 This document adds the error code "eextension" to the error codes 1032 table defined in Section 5.2.6 of [RFC8007]. This error code 1033 designates that an error occurred while parsing a generic trigger 1034 extension, or that the specific extension is not supported by the 1035 CDN. A CDN that fails to execute a trigger due a generic extension 1036 object which is "mandatory-to-enforce" MUST report it using the 1037 "errors.v2" array within the trigger status resource, while setting 1038 the error code to "eextension" and providing an appropriate 1039 description. The "eextension" error code is a registered type of 1040 "CDNI CI/T Trigger Error Codes" (see Section 6.2). 1042 3.4. Examples 1044 The following subsections provides usage examples of the specified 1045 interface extensions being used by the trigger command and status 1046 resource. 1048 3.4.1. Invalidation with Regex 1050 In the following example a CI/T "invalidate" command uses the Regex 1051 property to specify the range of content objects for invalidation, 1052 the command is rejected by the dCDN due to regex complexity, and an 1053 appropriate error is reflected in the status response. 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": "invalidate", 1065 "content.regexs": [ 1066 { 1067 "regex": "^(https:\\/\\/video\\.example\\.com)\\/ 1068 ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$", 1069 "case-sensitive": true, 1070 "match-query-string": false 1071 }, 1072 { }, 1073 ... 1074 { }, 1075 ], 1076 }, 1077 "cdn-path": [ "AS64496:0" ] 1078 } 1080 RESPONSE: 1082 HTTP/1.1 201 Created 1083 Date: Wed, 04 May 2016 08:48:10 GMT 1084 Content-Length: 467 1085 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1086 Location: https://triggers.dcdn.example.com/triggers/0 1087 Server: example-server/0.1 1089 { 1090 "errors.v2": [ 1091 { 1092 "content.regexs": [ 1093 { 1094 "regex": "^(https:\\/\\/video\\.example\\.com)\\/ 1095 ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$", 1096 "case-sensitive": true, 1097 "match-query-string": false 1098 }, 1099 ], 1100 "description": "The dCDN rejected a regex due to complexity", 1101 "error": "ereject", 1102 "cdn": "AS64500:0" 1103 }, 1104 ], 1105 "ctime": 1462351690, 1106 "etime": 1462351698, 1107 "mtime": 1462351690, 1108 "status": "failed", 1109 "trigger.v2": { } 1110 } 1112 3.4.2. Preposition with Playlists 1114 In the following example a CI/T "preposition" command uses the 1115 Playlist property to specify the full media library of a specific 1116 content. The command fails due to playlist parse error and an 1117 appropriate error is reflected in the status response. 1119 REQUEST: 1121 POST /triggers HTTP/1.1 1122 User-Agent: example-user-agent/0.1 1123 Host: triggers.dcdn.example.com 1124 Accept: */* 1125 Content-Type: application/cdni; ptype=ci-trigger-command.v2 1126 { 1127 "trigger.v2": { 1128 "type": "preposition", 1129 "content.playlists": [ 1130 { 1131 "playlist": "https://www.example.com/hls/title/index.m3u8", 1132 "media-protocol": "hls" 1133 }, 1134 { }, 1135 ... 1136 { }, 1137 ], 1138 }, 1139 "cdn-path": [ "AS64496:0" ] 1140 } 1142 RESPONSE: 1144 HTTP/1.1 201 Created 1145 Date: Wed, 04 May 2016 08:48:10 GMT 1146 Content-Length: 467 1147 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1148 Location: https://triggers.dcdn.example.com/triggers/0 1149 Server: example-server/0.1 1151 { 1152 "errors.v2": [ 1153 { 1154 "content.playlists": [ 1155 { 1156 "playlist": "https://www.example.com/hls/title/index.m3u8", 1157 "media-protocol": "hls" 1158 }, 1159 ], 1160 "description": "The dCDN was not able to parse the playlist", 1161 "error": "econtent", 1162 "cdn": "AS64500:0" 1163 }, 1164 ], 1165 "ctime": 1462351690, 1166 "etime": 1462351698, 1167 "mtime": 1462351690, 1168 "status": "failed", 1169 "trigger.v2": { } 1170 } 1172 3.4.3. Extensions with Error Propagation 1174 In the following example a CI/T "preposition" command is using two 1175 extensions to control the way the trigger is executed. In this 1176 example the receiving dCDN identified as "AS64500:0" does not support 1177 the first extension in the extensions array. dCDN "AS64500:0" further 1178 distributes this trigger to another downstream CDN that is identified 1179 as "AS64501:0", which does not support the second extension in the 1180 extensions array. The error is propagated from "AS64501:0" to 1181 "AS64500:0" and the errors.v2 array reflects both errors. 1183 REQUEST: 1185 POST /triggers HTTP/1.1 1186 User-Agent: example-user-agent/0.1 1187 Host: triggers.dcdn.example.com 1188 Accept: */* 1189 Content-Type: application/cdni; ptype=ci-trigger-command.v2 1190 { 1191 "trigger.v2": { 1192 "type": "preposition", 1193 "content.playlists": [ 1194 { 1195 "playlist": "https://www.example.com/hls/title/index.m3u8", 1196 "media-protocol": "hls" 1197 }, 1198 ], 1199 "extensions": [ 1200 { 1201 "generic-trigger-extension-type": 1202 , 1203 "generic-trigger-extension-value": 1204 { 1205 1206 }, 1207 "mandatory-to-enforce": true, 1208 "safe-to-redistribute": true, 1209 }, 1210 { 1211 "generic-trigger-extension-type": 1212 , 1213 "generic-trigger-extension-value": 1214 { 1215 1216 }, 1217 "mandatory-to-enforce": true, 1218 "safe-to-redistribute": true, 1219 }, 1220 ], 1221 }, 1222 "cdn-path": [ "AS64496:0" ] 1223 } 1225 RESPONSE: 1227 HTTP/1.1 201 Created 1228 Date: Wed, 04 May 2016 08:48:10 GMT 1229 Content-Length: 467 1230 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1231 Location: https://triggers.dcdn.example.com/triggers/0 1232 Server: example-server/0.1 1234 { 1235 "errors.v2": [ 1236 { 1237 "extensions": [ 1238 { 1239 "generic-trigger-extension-type": 1240 , 1241 "generic-trigger-extension-value": 1242 { 1243 1244 }, 1245 "mandatory-to-enforce": true, 1246 "safe-to-redistribute": true, 1247 }, 1248 ], 1250 "description": "unrecognized extension ", 1251 "error": "eextension", 1252 "cdn": "AS64500:0" 1253 }, 1254 { 1255 "extensions": [ 1256 { 1257 "generic-trigger-extension-type": 1258 , 1259 "generic-trigger-extension-value": 1260 { 1261 1262 }, 1263 "mandatory-to-enforce": true, 1264 "safe-to-redistribute": true, 1265 }, 1266 ], 1267 "description": "unrecognized extension ", 1268 "error": "eextension", 1269 "cdn": "AS64501:0" 1270 }, 1271 ], 1272 "ctime": 1462351690, 1273 "etime": 1462351698, 1274 "mtime": 1462351690, 1275 "status": "failed", 1276 "trigger.v2": { } 1277 } 1279 4. Trigger Extension Objects 1281 The objects defined below are intended to be used in the 1282 GenericTriggerExtension object's generic-trigger-extension-value 1283 field as defined in Section Section 3.3.5.2, and their generic- 1284 trigger-extension-type property MUST be set to the appropriate CDNI 1285 Payload Type as defined in Section 6.1 . 1287 4.1. LocationPolicy extension 1289 A content operation may be relevant for a specific geographical 1290 region, or need to be excluded from a specific region. In this case, 1291 the trigger should be applied only to parts of the network that are 1292 either "included" or "not excluded" by the location policy. Note 1293 that the restrictions here are on the cache location rather than the 1294 client location. 1296 The LocationPolicy object defines which CDN or cache locations for 1297 which the trigger command is relevant. 1299 Example use cases: 1301 o Pre-position: Certain contracts allow for pre-positioning or 1302 availability of contract in all regions except for certain 1303 excluded regions in the world, including caches. For example, 1304 some content cannot ever knowingly touch servers in a specific 1305 country, including cached content. Therefore, these regions MUST 1306 be excluded from a pre-positioning operation. 1308 o Purge: In certain cases, content may have been located on servers 1309 in regions where the content must not reside. In such cases, a 1310 purge operation to remove content specifically from that region, 1311 is required. 1313 Object specification 1315 Property: locations 1317 Description: An Access List that allows or denies (blocks) the 1318 trigger execution per cache location. 1320 Type: Array of LocationRule objects (see Section 4.2.2.1 of 1321 [RFC8006]) 1323 Mandatory: Yes. 1325 If a location policy object is not listed within the trigger command, 1326 the default behavior is to execute the trigger in all available 1327 caches and locations of the dCDN. 1329 The trigger command is allowed, or denied, for a specific cache 1330 location according to the action of the first location whose 1331 footprint matches against that cache's location. If two or more 1332 footprints overlap, the first footprint that matches against the 1333 cache's location determines the action a CDN MUST take. If the 1334 "locations" property is an empty list or if none of the listed 1335 footprints match the location of a specific cache location, then the 1336 result is equivalent to a "deny" action. 1338 The following is an example of a JSON serialized generic trigger 1339 extension object containing a location policy object that allows the 1340 trigger execution in the US but blocks its execution in Canada: 1342 { 1343 "generic-trigger-extension-type": "CIT.LocationPolicy", 1344 "generic-trigger-extension-value": 1345 { 1346 "locations": [ 1347 { 1348 "action": "allow", 1349 "footprints": [ 1350 { 1351 "footprint-type": "countrycode", 1352 "footprint-value": ["us"] 1353 } 1354 ] 1355 }, 1356 { 1357 "action": "deny", 1358 "footprints": [ 1359 { 1360 "footprint-type": "countrycode", 1361 "footprint-value": ["ca"] 1362 } 1363 ] 1364 } 1365 ] 1366 }, 1367 "mandatory-to-enforce": true, 1368 "safe-to-redistribute": true, 1369 "incomprehensible": false 1370 } 1372 4.2. TimePolicy Extension 1374 A uCDN may wish to perform content management operations on the dCDN 1375 in a specific schedule. The TimePolicy extensions allows the uCDN to 1376 instruct the dCDN to execute the trigger command in a desired time 1377 window. For example, a content provider that wishes to pre-populate 1378 a new episode at off-peak time so that it would be ready on caches at 1379 prime time when the episode is released for viewing. A scheduled 1380 operation enables the uCDN to direct the dCDN in what time frame to 1381 execute the trigger. 1383 A uCDN may wish to to schedule a trigger such that the dCDN will 1384 execute it in local time, as it is measured in each region. For 1385 example, a uCDN may wish the dCDN to pull the content at off-peak 1386 hours, between 2AM-4AM, however, as a CDN is distributed across 1387 multiple time zones, the UTC definition of 2AM depends on the actual 1388 location. 1390 We define two alternatives for localized scheduling: 1392 o Regional schedule: When used in conjunction with the Location 1393 Policy defined in Section 4.1, the uCDN can trigger separate 1394 commands for different geographical regions, for each region using 1395 a different schedule. This allows the uCDN to control the 1396 execution time per region. 1398 o Local Time schedule: We introduce a "local time" version for 1399 Internet timestamps that follows the notation for local time as 1400 defined in Section 4.2.2 of [ISO8601]. When local time is used, 1401 that dCDN SHOULD execute the triggers at different absolute times, 1402 according the local time of each execution location. 1404 Object specification 1406 Property: unix-time-window 1408 Description: A UNIX epoch time window in which the trigger 1409 SHOULD be executed. 1411 Type: TimeWindow object using UNIX epoch timestamps (see 1412 Section 4.2.3.2 of [RFC8006]) 1414 Mandatory: No, but exactly one of "unixEpochWindow", 1415 "utcWindow" or "localTimeWindow" MUST be present. 1417 Property: utc-window 1419 Description: A UTC time window in which the trigger SHOULD be 1420 executed. 1422 Type: UTCWindow object as defined in Section 4.2.1. 1424 Mandatory: No, but exactly one of "unixEpochWindow", 1425 "utcWindow" or "localTimeWindow" MUST be present. 1427 Property: local-time-window 1429 Description: A local time window. The dCDN SHOULD execute the 1430 trigger at the defined time frame, interpreted as the the local 1431 time per location. 1433 Type: LocalTimeWindow object as defined in Section 4.2.2. 1435 Mandatory: No, but exactly one of "unixEpochWindow", 1436 "utcWindow" or "localTimeWindow" MUST be present. 1438 If a time policy object is not listed within the trigger command, the 1439 default behavior is to execute the trigger in a time frame most 1440 suitable to the dCDN taking under consideration other constrains and 1441 / or obligations. 1443 Example of a JSON serialized generic trigger extension object 1444 containing a time policy object that schedules the trigger execution 1445 to a window between 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC, 1446 using the "unix-time-window" property: 1448 { 1449 "generic-trigger-extension-type": "CIT.TimePolicy", 1450 "generic-trigger-extension-value": 1451 { 1452 "unix-time-window": { 1453 "start": 946717200, 1454 "end": 946746000 1455 } 1456 } 1457 "mandatory-to-enforce": true, 1458 "safe-to-redistribute": true, 1459 "incomprehensible": false 1460 } 1462 4.2.1. UTCWindow 1464 A UTCWindow object describes a time range in UTC or UTC and a zone 1465 offset that can be applied by a TimePolicy. 1467 Property: start 1469 Description: The start time of the window. 1471 Type: Internet date and time as defined in [RFC3339]. 1473 Mandatory: No, but at least one of "start" or "end" MUST be 1474 present and non-empty. 1476 Property: end 1478 Description: The end time of the window. 1480 Type: Internet date and time as defined in [RFC3339]. 1482 Mandatory: No, but at least one of "start" or "end" MUST be 1483 present and non-empty. 1485 Example JSON serialized UTCWindow object that describes a time window 1486 from 02:30 01/01/2000 UTC to 04:30 01/01/2000 UTC: 1488 { 1489 "start": 2000-01-01T02:30:00.00Z, 1490 "end": 2000-01-01T04:30:00.00Z, 1491 } 1493 Example JSON serialized UTCWindow object that describes a time window 1494 in New York time zone offset UTC-05:00 from 02:30 01/01/2000 to 04:30 1495 01/01/2000: 1497 { 1498 "start": 2000-01-01T02:30:00.00-05:00, 1499 "end": 2000-01-01T04:30:00.00-05:00, 1500 } 1502 4.2.2. LocalTimeWindow 1504 A LocalTimeWindow object describes a time range in local time. The 1505 reader of this object MUST interpret it as "the local time at the 1506 location of execution". For example, if the time window states 2AM 1507 to 4AM local time then a dCDN that has presence in both London (UTC) 1508 and New York (UTC-05:00) will execute the trigger at 2AM-4AM UTC in 1509 London and at 2AM-4AM UTC-05:00 in New York. 1511 Property: start 1513 Description: The start time of the window. 1515 Type: JSON string formatted as DateLocalTime as defined in 1516 Section 4.2.3. 1518 Mandatory: No, but at least one of "start" or "end" MUST be 1519 present and non-empty. 1521 Property: end 1523 Description: The end time of the window. 1525 Type: JSON string formatted as DateLocalTime as defined in 1526 Section 4.2.3. 1528 Mandatory: No, but at least one of "start" or "end" MUST be 1529 present and non-empty. 1531 Example JSON serialized LocalTimeWindow object that describes a local 1532 time window from 02:30 01/01/2000 to 04:30 01/01/2000. 1534 { 1535 "start": 2000-01-01T02:30:00.00, 1536 "end": 2000-01-01T04:30:00.00, 1537 } 1539 4.2.3. DateLocalTime 1541 DateLocalTime is a timestamp that follows the date and local time 1542 notation in Section 4.3.2 of [ISO8601] as a complete date and time 1543 extended representation, where the time zone designator is omitted. 1544 In addition, for simplicity and as exact accuracy is not an objective 1545 in this case, this specification does not support the decimal 1546 fractions of seconds, and does not take leap second into 1547 consideration. 1549 Type: JSON string using the format "date-local-time" as defined in 1550 Section 4.2.3.1. 1552 4.2.3.1. Date and Local Time Format 1554 The Date and Local Time format is specified here using the syntax 1555 description notation defined in [ABNF]. 1557 date-fullyear = 4DIGIT 1558 date-month = 2DIGIT ; 01-12 1559 date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on 1560 ; month/year 1561 time-hour = 2DIGIT ; 00-23 1562 time-minute = 2DIGIT ; 00-59 1563 time-second = 2DIGIT ; 00-59 leap seconds are not supported 1565 local-time = time-hour ":" time-minute ":" time-second 1566 full-date = date-fullyear "-" date-month "-" date-mday 1567 date-local-time = full-date "T" local-time 1569 Example time representing 09:00AM on 01/01/2000 local time: 1571 2000-01-01T09:00:00.00 1573 NOTE: Per [ABNF] and [ISO8601], the "T" character in this syntax 1574 may alternatively be lower case "t". For simplicity, Applications 1575 that generate the "date-local-time" format defined here, SHOULD 1576 only use the upper case letter "T". 1578 4.2.3.2. Restrictions 1580 The grammar element date-mday represents the day number within the 1581 current month. The maximum value varies based on the month and year 1582 as follows: 1584 Month Number Month/Year Maximum value of date-mday 1585 ------------ ---------- -------------------------- 1586 01 January 31 1587 02 February, normal 28 1588 02 February, leap year 29 1589 03 March 31 1590 04 April 30 1591 05 May 31 1592 06 June 30 1593 07 July 31 1594 08 August 31 1595 09 September 30 1596 10 October 31 1597 11 November 30 1598 12 December 31 1600 See Appendix C of [RFC3339] for a sample C code that determines if a 1601 year is a leap year. 1603 The grammar element time-second may have the values 0-59. The value 1604 of 60 that is used in [ISO8601] to represent a leap second MUST NOT 1605 be used. 1607 Although [ISO8601] permits the hour to be "24", this profile of 1608 [ISO8601] only allows values between "00" and "23" for the hour in 1609 order to reduce confusion. 1611 5. Footprint and Capabilities 1613 This section covers the FCI objects required for advertisement of the 1614 extensions and properties introduced in this document. 1616 5.1. CI/T Versions Capability Object 1618 The CI/T versions capability object is used to indicate support for 1619 one or more CI/T objects versions. Note that the default version as 1620 originally defined in [RFC8007] MUST be implicitly supported 1621 regardless of the versions listed in this capability object. 1623 Property: versions 1625 Description: A list of version numbers. 1627 Type: An array of JSON strings 1629 Mandatory: No. The default is version 1. A missing or an 1630 empty versions list means that only version 1 of the interface 1631 and objects is supported. 1633 5.1.1. CI/T Versions Capability Object Serialization 1635 The following shows an example of a JSON serialized CI/T Versions 1636 Capability object serialization for a dCDN that supports versions 2 1637 and 2.1 of the CI/T interface. 1639 { 1640 "capabilities": [ 1641 { 1642 "capability-type": "FCI.TriggerVersion", 1643 "capability-value": { 1644 "versions": [ "1", "2", "2.1" ] 1645 }, 1646 "footprints": [ 1647 1648 ] 1649 } 1650 ] 1651 } 1653 5.2. CI/T Playlist Protocol Capability Object 1655 The CI/T Playlist Protocol capability object is used to indicate 1656 support for one or more MediaProtocol types listed in Section 6.3 by 1657 the playlists property of the "trigger.v2" object. 1659 Property: media-protocols 1661 Description: A list of media protocols. 1663 Type: A list of MediaProtocol (from the CDNI Triggers media 1664 protocol types Section 6.3) 1666 Mandatory: No. The default, in case of a missing or an empty 1667 list, is none supported. 1669 5.2.1. CI/T Playlist Protocol Capability Object Serialization 1671 The following shows an example of a JSON serialized CI/T Playlist 1672 Protocol Capability object serialization for a dCDN that supports 1673 "hls" and "dash". 1675 { 1676 "capabilities": [ 1677 { 1678 "capability-type": "FCI.TriggerPlaylistProtocol", 1679 "capability-value": { 1680 "media-protocols": ["hls", "dash"] 1681 }, 1682 "footprints": [ 1683 1684 ] 1685 } 1686 ] 1687 } 1689 5.3. CI/T Trigger Extension Capability Object 1691 The CI/T Generic Extension capability object is used to indicate 1692 support for one or more GenericExtensionObject types. 1694 Property: trigger-extension 1696 Description: A list of supported CDNI CI/T 1697 GenericExtensionObject types. 1699 Type: List of strings corresponding to entries from the "CDNI 1700 Payload Types" registry [RFC7736] that are under the CIT 1701 namespace, and that correspond to CDNI CI/T 1702 GenericExtensionObject objects. 1704 Mandatory: No. The default, in case of a missing or an empty 1705 list, MUST be interpreted as "no GenericExtensionObject types 1706 are supported". A non-empty list MUST be interpreted as 1707 containing "the only GenericExtensionObject types that are 1708 supported". 1710 5.3.1. CI/T Trigger Extension Capability Object Serialization 1712 The following shows an example of a JSON serialized CI/T Trigger 1713 Extension Capability object serialization for a dCDN that supports 1714 the "CIT.LocationPolicy" and the "CIT.TimePolicy" objects. 1716 { 1717 "capabilities": [ 1718 { 1719 "capability-type": "FCI.TriggerGenericExtension", 1720 "capability-value": { 1721 "trigger-extension": ["CIT.LocationPolicy", "CIT.TimePolicy"] 1722 }, 1723 "footprints": [ 1724 1725 ] 1726 } 1727 ] 1728 } 1730 6. IANA Considerations 1732 6.1. CDNI Payload Types 1734 This document requests the registration of the following CDNI Payload 1735 Types under the IANA "CDNI Payload Types" registry defined in 1736 [RFC7736]: 1738 +-----------------------------+---------------+ 1739 | Payload Type | Specification | 1740 +-----------------------------+---------------+ 1741 | ci-trigger-command.v2 | RFCthis | 1742 | ci-trigger-status.v2 | RFCthis | 1743 | CIT.LocationPolicy | RFCthis | 1744 | CIT.TimePolicy | RFCthis | 1745 | FCI.TriggerVersion | RFCthis | 1746 | FCI.TriggerPlaylistProtocol | RFCthis | 1747 | FCI.TriggerGenericExtension | RFCthis | 1748 +-----------------------------+---------------+ 1750 [RFC Editor: Please replace RFCthis with the published RFC number for 1751 this document.] 1753 6.1.1. CDNI ci-trigger-command.v2 Payload Type 1755 Purpose: The purpose of this payload type is to distinguish version 2 1756 of the CI/T command (and any associated capability advertisement) 1758 Interface: CI/T 1760 Encoding: see Section 3.1 1762 6.1.2. CDNI ci-trigger-status.v2 Payload Type 1764 Purpose: The purpose of this payload type is to distinguish version 2 1765 of the CI/T status resource response (and any associated capability 1766 advertisement) 1768 Interface: CI/T 1770 Encoding: see Section 3.1 1772 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type 1774 Purpose: The purpose of this Trigger Extension type is to distinguish 1775 LocationPolicy CIT Trigger Extension objects. 1777 Interface: CI/T 1779 Encoding: see Section 4.1 1781 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type 1783 Purpose: The purpose of this Trigger Extension type is to distinguish 1784 TimePolicy CI/T Trigger Extension objects. 1786 Interface: CI/T 1788 Encoding: see Section 4.2 1790 6.1.5. CDNI FCI CI/T Versions Payload Type 1792 Purpose: The purpose of this payload type is to distinguish FCI 1793 advertisement objects for CI/T Triggers Versions objects 1795 Interface: FCI 1797 Encoding: see Section 5.1.1 1799 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type 1801 Purpose: The purpose of this payload type is to distinguish FCI 1802 advertisement objects for CI/T Playlist Protocol objects 1804 Interface: FCI 1806 Encoding: see Section 5.2.1 1808 6.1.7. CDNI FCI CI/T Extension Objects Payload Type 1810 Purpose: The purpose of this payload type is to distinguish FCI 1811 advertisement objects for CI/T Extension objects 1813 Interface: FCI 1815 Encoding: see Section 5.3.1 1817 6.2. CDNI CI/T Trigger Error Codes types 1819 The IANA is requested to update the "CDNI CI/T Error Codes" 1820 subregistry (defined in Section 7.3 of [RFC8007] and located at 1821 ) with the 1822 following registration: 1824 +------------+--------------------------------------+---------------+ 1825 | Error Code | Description | Specification | 1826 +------------+--------------------------------------+---------------+ 1827 | eextension | The dCDN failed to parse a generic | Section | 1828 | | "mandatory-to-enforce" extension | Section 3.3.7 | 1829 | | object, or does not support this | of this | 1830 | | extension. | document. | 1831 +------------+--------------------------------------+---------------+ 1833 6.3. CDNI Media protocol types 1835 The IANA is requested to create a new "CDNI MediaProtocol Types" 1836 subregistry in the "Content Delivery Networks Interconnection (CDNI) 1837 Parameters" registry. The "CDNI MediaProtocol Types" namespace 1838 defines the valid MediaProtocol object values in 1839 Section Section 3.3.4, used by the Playlist object. Additions to the 1840 MediaProtocol namespace conform to the "Specification Required" 1841 policy as defined in Section 4.6 of [RFC8126], where the 1842 specification defines the MediaProtocol Type and the protocol to 1843 which it is associated. The designated expert will verify that new 1844 protocol definitions do not duplicate existing protocol definitions 1845 and prevent gratuitous additions to the namespace. 1847 The following table defines the initial MediaProtocol values 1848 corresponding to the HLS, MSS, and DASH protocols: 1850 +---------------+-------------------+---------------+---------------+ 1851 | MediaProtocol | Description | Specification | Protocol | 1852 | Type | | | Specification | 1853 +---------------+-------------------+---------------+---------------+ 1854 | hls | HTTP Live | RFCthis | RFC 8216 | 1855 | | Streaming | | [RFC8216] | 1856 | mss | Microsoft Smooth | RFCthis | MSS [MSS] | 1857 | | Streaming | | | 1858 | dash | Dynamic Adaptive | RFCthis | MPEG-DASH | 1859 | | Streaming over | | [MPEG-DASH] | 1860 | | HTTP (MPEG-DASH) | | | 1861 +---------------+-------------------+---------------+---------------+ 1863 [RFC Editor: Please replace RFCthis with the published RFC number for 1864 this document.] 1866 7. Security Considerations 1868 All security considerations listed in Section 8 of [RFC8007] and 1869 Section 7 of [RFC8008] apply to this document as well. 1871 This document defines the capability to use regular expression within 1872 the trigger specification for more granular content selection. The 1873 usage of regex introduced the risk of regex complexity attacks, a.k.a 1874 ReDos attacks. An attacker may be able to craft a regular expression 1875 that can exhaust server resources and may take exponential time in 1876 the worst case. An implementation MUST protect itself at a minimum 1877 by accepting triggers only from an authenticated party over a secured 1878 connection. An implementation SHOULD also protect itself by using 1879 secure programing techniques and decline trigger commands that use 1880 potentially risky regex, such techniques are readily available in 1881 secure programming literature and are beyond the scope of this 1882 document. 1884 8. Acknowledgments 1886 TBD 1888 9. Contributors 1890 The authors thank all members of the "Streaming Video Alliance" (SVA) 1891 and specifically contributions by members of Open Caching Working 1892 Group in support of this document. The authors also thank Kevin Ma 1893 for his guidance and careful and methodical reviews. 1895 10. References 1897 10.1. Normative References 1899 [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax 1900 Specifications: ABNF", STD 68, RFC 5234, 1901 DOI 10.17487/RFC5234, January 2008, 1902 . 1904 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1905 Requirement Levels", BCP 14, RFC 2119, 1906 DOI 10.17487/RFC2119, March 1997, 1907 . 1909 [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: 1910 Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, 1911 . 1913 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 1914 Resource Identifier (URI): Generic Syntax", STD 66, 1915 RFC 3986, DOI 10.17487/RFC3986, January 2005, 1916 . 1918 [RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content 1919 Distribution Network Interconnection (CDNI) Problem 1920 Statement", RFC 6707, DOI 10.17487/RFC6707, September 1921 2012, . 1923 [RFC7736] Ma, K., "Content Delivery Network Interconnection (CDNI) 1924 Media Type Registration", RFC 7736, DOI 10.17487/RFC7736, 1925 December 2015, . 1927 [RFC8006] Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma, 1928 "Content Delivery Network Interconnection (CDNI) 1929 Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016, 1930 . 1932 [RFC8007] Murray, R. and B. Niven-Jenkins, "Content Delivery Network 1933 Interconnection (CDNI) Control Interface / Triggers", 1934 RFC 8007, DOI 10.17487/RFC8007, December 2016, 1935 . 1937 [RFC8008] Seedorf, J., Peterson, J., Previdi, S., van Brandenburg, 1938 R., and K. Ma, "Content Delivery Network Interconnection 1939 (CDNI) Request Routing: Footprint and Capabilities 1940 Semantics", RFC 8008, DOI 10.17487/RFC8008, December 2016, 1941 . 1943 [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for 1944 Writing an IANA Considerations Section in RFCs", BCP 26, 1945 RFC 8126, DOI 10.17487/RFC8126, June 2017, 1946 . 1948 [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data 1949 Interchange Format", STD 90, RFC 8259, 1950 DOI 10.17487/RFC8259, December 2017, 1951 . 1953 10.2. Informative References 1955 [ISO8601] ISO, "Data elements and interchange formats -- Information 1956 interchange -- Representation of dates and times", 1957 ISO 8601:2004, Edition 3, 12 2004, 1958 . 1960 [MPEG-DASH] 1961 ISO, "Information technology -- Dynamic adaptive streaming 1962 over HTTP (DASH) -- Part 1: Media presentation description 1963 and segment format", ISO/IEC 23009-1:2014, Edition 2, 05 1964 2014, . 1966 [MSS] Microsoft, "[MS-SSTR]: Smooth Streaming Protocol", 1967 Protocol Revision 8.0, September 2017, 1968 . 1970 [OC-CM] Finkelman, O., Ed., Devabhaktuni, J., and M. Stock, "Open 1971 Caching Content Management Operations Specification", 1972 November 2017, 1973 . 1976 [OCWG] Streaming Video Alliance, "Open Caching", 1977 . 1980 [PCRE841] Hazel, P., "Perl Compatible Regular Expressions", 1981 Version 8.41, July 2017, . 1983 [RFC8216] Pantos, R., Ed. and W. May, "HTTP Live Streaming", 1984 RFC 8216, DOI 10.17487/RFC8216, August 2017, 1985 . 1987 [SVA] "Streaming Video Alliance", 1988 . 1990 Authors' Addresses 1992 Ori Finkelman 1993 Qwilt 1994 6, Ha'harash 1995 Hod HaSharon 4524079 1996 Israel 1998 Email: ori.finkelman.ietf@gmail.com 2000 Sanjay Mishra 2001 Verizon 2002 13100 Columbia Pike 2003 Silver Spring, MD 20904 2004 USA 2006 Email: sanjay.mishra@verizon.com 2008 Nir B. Sopher 2009 Qwilt 2010 6, Ha'harash 2011 Hod HaSharon 4524079 2012 Israel 2014 Email: nir@apache.org