idnits 2.17.1 draft-ietf-cdni-triggers-extensions-09.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 (June 20, 2021) is 1040 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 1094, 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: December 22, 2021 N. Sopher 7 Qwilt 8 June 20, 2021 10 CDNI Control Triggers Interface Extensions 11 draft-ietf-cdni-triggers-extensions-09 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 December 22, 2021. 47 Copyright Notice 49 Copyright (c) 2021 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. References . . . . . . . . . . . . . . . . . . . . . . . . . 42 125 9.1. Normative References . . . . . . . . . . . . . . . . . . 42 126 9.2. Informative References . . . . . . . . . . . . . . . . . 44 127 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 44 129 1. Introduction 131 The Streaming Video Alliance [SVA] is a global association that works 132 to solve streaming video challenges in an effort to improve end-user 133 experience and adoption. The Open Caching Working Group [OCWG] of 134 the Streaming Video Alliance [SVA] is focused on the delegation of 135 video delivery requests from commerical CDNs to a caching layer at 136 the ISP's network. Open Caching architecture is a specific use case 137 of CDNI where the commercial CDN is the upstream CDN (uCDN) and the 138 ISP caching layer is the downstream CDN (dCDN). The Open Caching 139 Content Management Operations Specification [OC-CM] defines objects 140 and extensions required by Open Caching architecture for granular 141 content management operations. This document adds those extensions 142 to the CDNI Control Interface / Triggers [RFC8007] as required for 143 Open Caching content management options. This document also 144 specifies a generic extension mechanism to enable adding future 145 functions for controlling the trigger execution>. 147 The CDNI Metadata Interface is described in [RFC8006]. 149 The CDNI Footprint and Capability Interface is described in 150 [RFC8008]. 152 The CDNI Control Interface / Triggers is described in [RFC8007]. 154 For consistency with other CDNI documents, this document follows the 155 CDNI convention of uCDN (upstream CDN) and dCDN (downstream CDN) as 156 described in [RFC6707] to represent the commercial CDN and ISP 157 caching layer, respectively. 159 1.1. Terminology 161 This document reuses the terminology defined in [RFC6707], [RFC7736] 162 [RFC8006], [RFC8007], and [RFC8008]. 164 Additionally, the following terms are used throughout this document 165 and are defined as follows: 167 o HLS - HTTP Live Streaming 169 o DASH - Dynamic Adaptive Streaming Over HTTP 171 o MSS - Microsoft Smooth Streaming 173 1.2. Structure of this document 175 The remainder of this document is organized as follows: 177 o Section 2 gives an overview of the extensions specified in this 178 document. 180 o Section 3 specifies version 2 of the CDNI Control Interface / 181 Triggers. 183 o Section 4 specifies an initial set of trigger extension objects. 185 o Section 5 specifies Footprint and Capability objects for CI/T 186 version and extensions. 188 o Section 6 list the IANA considerations of this document. 190 o Section 7 describes the security considerations for the specified 191 properties and extensions. 193 2. Interfaces Extensions Overview 195 This document defines extensions for the CDNI Control Interface / 196 Triggers (CI/T) [RFC8007] and defines FCI objects as per the CDNI 197 Footprint and Capabilities Interface [RFC8008]. 199 2.1. CDNI Control Interface / Triggers Extensions 201 2.1.1. CI/T Objects 203 This document specifies version 2 of the CI/T commands and objects. 204 In this context the CI/T commands and objects as were specified in 205 [RFC8007] are considered to be version 1. 207 2.1.2. Trigger Specification 209 This document specifies version 2 of the Trigger Specification which 210 is an enhancement of the Trigger Specification that includes all 211 properties as defined in Section 5.2.1 of [RFC8007] as well as the 212 additional properties required by the use cases listed below in 213 Section 2.1.3 and Section 2.1.4. 215 2.1.3. Content Selection 217 The trigger specification as defined in Section 5.2.1 of [RFC8007] 218 provides means to select content objects by matching a full content 219 URL or patterns with wildcards. This document specifies two 220 additional selection options: 222 o Regular Expression - Using regex, a uCDN can create more complex 223 rules to select the content objects for the cases of 224 "invalidation" and "purge". For example, purging specific content 225 within a specific directory path. 227 o Content Playlist - Using video playlist files, a uCDN can trigger 228 an operation that will be applied to a collection of distinct 229 media files in a format that is natural for a streaming video 230 content provider. A playlist may have several formats, 231 specifically HTTP Live Streaming (HLS) *.m3u8 manifest [RFC8216], 232 Microsoft Smooth Streaming (MSS) *.ismc client manifest [MSS], and 233 Dynamic Adaptive Streaming over HTTP (DASH) *.mpd file [ISO/IEC 234 23009-1:2014] [MPEG-DASH]. 236 2.1.4. Trigger Extensibility 238 The CDNI Control Interface / Triggers [RFC8007] defines a set of 239 properties and objects used by the trigger commands. In this 240 document we define an extension mechanism to the triggers interface 241 that enables the application to add various functions that allow 242 finer control over the trigger execution. This document specifies a 243 generic trigger extension object wrapper for managing individual CDNI 244 trigger extensions in an opaque manner. 246 This document also registers CDNI Payload Types [RFC7736] under the 247 namespace CIT for the initial set of trigger extension types: 249 o CIT.LocationPolicy (for controlling the locations in which the 250 trigger is executed) 252 o CIT.TimePolicy (for scheduling a trigger to run in a specific time 253 window) 255 Example use cases 257 o Pre-position with cache location policy 259 o Purge content with cache location policy 261 o Pre-position at a specific time 263 o Purge by content acquisition time (e.g. purge all content acquired 264 in the past X hours) 266 2.1.5. Error Handling 268 This document extends the CI/T Error Handling (see Section 4.7 of 269 [RFC8007]) to support the following: 271 o Playlists and Regexs - report errors that happened due to specific 272 playlists and/or regexs. 274 o Extension errors - report an error that happened due to an 275 extension object. 277 o Error propagation - enable the uCDN to traceback an error to the 278 dCDN in which it occurred. 280 2.2. CDNI Footprint and Capabilities Interface Extensions 282 Extending the trigger mechanism with optional properties requires the 283 ability for the dCDN to advertise which optional properties it 284 supports. 286 The CDNI Footprint and Capabilities Interface [RFC8008] enables the 287 dCDN to advertise the capabilities it supports across different 288 footprints. This document introduces FCI objects to support the 289 advertisement of these optional properties. 291 Example use cases 293 o Trigger types: Advertise which trigger types are supported by the 294 dCDN. CDNI defines three trigger types (purge, invalidate, pre- 295 position), but it does not necessarily mean that all dCDNs support 296 all of them. The uCDN may prefer to work only with dCDN that 297 support what the uCDN needs. 299 o Content selection rule types: Advertise which selection types are 300 supported. For example, if adding content regex as a means to 301 match on content URLs, not all dCDN would support it. For 302 playlist mapping, advertise which types and versions of protocols 303 are supported, e.g. HLS.vX/DASH.vY/MSS.vX, DASH templates. Note 304 that the version string or schema are protocol specific. 306 o Trigger extensions: Advertise which trigger extensions object 307 types are supported by the dCDN. 309 3. CI/T Version 2 311 [RFC8007] does not define a version number and versioning scheme. 312 We, therefore, designate the interface and objects as defined in 313 Section 5 of [RFC8007] as version 1. The following sections define 314 version 2 of the CI/T objects and their properties as extensions of 315 version 1. 317 3.1. CI/T Objects V2 319 Version 2 of the CI/T interface requires the support of the following 320 objects: 322 o CI/T Commands v2: A trigger command request using the payload type 323 ci-trigger-command.v2. Version 2 MUST only use "trigger.v2" 324 objects as defined in Section 3.3.1, instead of "trigger" objects. 325 All other properties of the trigger command v2 are as defined in 326 Section 5.1.1 of [RFC8007]. 328 o Trigger Status Resource v2: A trigger status resource response 329 using the payload type ci-trigger-status.v2. Version 2 MUST only 330 use "trigger.v2" objects as defined in Section 3.3.1, instead of a 331 "trigger" object, as well as "errors.v2" array as defined in 332 Section 3.3.6, instead of a "errors" array. All other properties 333 of the trigger status v2 are as defined in Section 5.1.2 of 334 [RFC8007]. The errors array "errors.v2" is a list of all errors 335 that occurred in any of the downstream CDNs along the execution 336 path. When a downstream CDN, dCDN-A, propagates a trigger to 337 another downstream CDN, dCDN-B, it MUST also propagate back all 338 errors reported by dCDN-B in the trigger status resource and add 339 them to its own trigger status resource. 341 o Trigger Collections: The payload type ci-trigger-collection is 342 used with no changes and as defined in 5.1.3 of [RFC8007]. 344 Usage example of version 2 of trigger command 345 REQUEST: 347 POST /triggers HTTP/1.1 348 User-Agent: example-user-agent/0.1 349 Host: triggers.dcdn.example.com 350 Accept: */* 351 Content-Type: application/cdni; ptype=ci-trigger-command.v2 352 { 353 "trigger.v2": { }, 354 "cdn-path": [ "AS64496:0" ] 355 } 357 RESPONSE: 359 HTTP/1.1 201 Created 360 Date: Wed, 04 May 2016 08:48:10 GMT 361 Content-Length: 467 362 Content-Type: application/cdni; ptype=ci-trigger-status.v2 363 Location: https://triggers.dcdn.example.com/triggers/0 364 Server: example-server/0.1 366 { 367 "errors.v2": [ { }, 368 ..., 369 { } 370 ], 371 "ctime": 1462351690, 372 "etime": 1462351698, 373 "mtime": 1462351690, 374 "status": "pending", 375 "trigger.v2": { } 376 } 378 Usage example of version 2 of trigger status for the trigger created 379 in the above trigger command example: 381 REQUEST: 383 GET /triggers/0 HTTP/1.1 384 User-Agent: example-user-agent/0.1 385 Host: triggers.dcdn.example.com 386 Accept: */* 388 RESPONSE: 390 HTTP/1.1 200 OK 391 Content-Length: 467 392 Expires: Wed, 04 May 2016 08:49:10 GMT 393 Server: example-server/0.1 394 ETag: "6990548174277557683" 395 Cache-Control: max-age=60 396 Date: Wed, 04 May 2016 08:48:10 GMT 397 Content-Type: application/cdni; ptype=ci-trigger-status.v2 399 { 400 "errors.v2": [ { }, 401 ..., 402 { } 403 ], 404 "ctime": 1462351690, 405 "etime": 1462351698, 406 "mtime": 1462351690, 407 "status": "pending", 408 "trigger.v2": { } 409 } 411 3.2. Error Handling V2 413 The CDNI CI/T interface defines a mechanism for error reporting (see 414 Section 4.7 of [RFC8007]) and an Error Description object for 415 reporting errors (see Section 5.2.6 of [RFC8007]). This document 416 specifies version 2 of CI/T error handling in order to support the 417 following: 419 3.2.1. Extension Errors 421 Report an error that occures due to an extension object. As 422 extension objects are expected to be added to the interface whenever 423 new requirement comes along, it is expected that in some cases a dCDN 424 may receive a trigger that it cannot process or it does not 425 understand. It is therefore essential for the trigger caller to be 426 able to know when such errors occur so they can take actions to fix 427 them. This document adds a mechanism to report extension errors. 429 3.2.2. Error propagation 431 This subsection explains the mechanism for enabling the uCDN to 432 traceback an error to the dCDN in which it occurred. CDNI triggers 433 may be propagated over a chain of downstream CDNs. For example, an 434 upstream CDN A (uCDN-A) that is delegating to a downstream CDN B 435 (dCDN-B) and dCDN-B is delegating to a downstream CDN C (dCDN-C). 436 Triggers sent from uCDN-A to dCDN-B may be redistributed from dCDN-B 437 to dCDN-C and errors can occur anywhere along the path. Therefore, 438 it might be essential for uCDN-A that sets the trigger, to be able to 439 trace back an error to the downstream CDN where it occurred. This 440 document adds a mechanism to propagate the CDN Provider ID (PID) of 441 the dCDN where the fault occured, back to the uCDN by adding the PID 442 to the error description. When dCDN-B propagates a trigger to the 443 further downstream dCDN-C, it MUST also propagate back the errors 444 received in the trigger status resource from dCDN-C by adding them to 445 the errors array in its own status resource to be sent back to the 446 originating uCDN-A. While propagating back the errors, and depending 447 on the implementation, dCDN-B MAY also specify the dCDN-C PID, 448 indicating to which CDN the error relates spefically. The trigger 449 originating upstream CDN will receive an array of errors that 450 occurred in all the CDNs along the execution path, where each error 451 MAY be carrying its own CDN identifier. 453 Figure 1 below is an example showing the message flow used by uCDN-A 454 to trigger activity in the dCDN-B, followed by dCDN-C, as well as the 455 discovery of the status of that activity, including the Error 456 Propagation. 458 uCDN-A dCDN-B dCDN-C 459 | | | 460 | (1) POST | | 461 | https://dcdn-b.example.com | | 462 | /triggers/uCDN-A | | 463 [ ]--------------------------->[ ]--+ | 464 | [ ] | (2) | 465 | [ ]<-+ | 466 | (3) HTTP 201 Response. [ ] | 467 |<----------------------------[ ] | 468 | Loc: [ ] | 469 | https://dcdn-b.example.com [ ] (4) POST | 470 | /triggers/uCDN-A/123 [ ] https://dcdn-c.example.com | 471 | [ ] /triggers/uCDN-A | (5) 472 | [ ]--------------------------->[ ]--+ 473 | | [ ] | 474 | | [ ]<-+ 475 | | (6) HTTP 201 Response. [ ] 476 | [ ]<---------------------------[ ] 477 | | Loc: | 478 | | https://dcdn-c.example.com | 479 | | /triggers/dCDN-B/456 | 480 | | | 481 | [ ]--+ | 482 | [ ] | (7.1) | 483 | [ ]<-+ [ ]--+ 484 | | (7.2) [ ] | 485 | | [ ]<-+ 486 | | | 487 . . . 488 . . . 489 . . . 490 | | (8) GET | 491 | | https://dcdn-c.example.com | 492 | | /triggers/dCDN-B/456 | 493 | [ ]--------------------------->[ ] 494 | | [ ] 495 | | (9) HTTP 200 [ ] 496 | | Trigger Status Resource [ ] 497 | [ ]<---------------------------[ ] 498 | | | 499 . . . 500 . . . 501 . . . 502 | (10) GET | | 503 | https://dcdn-b.example.com | | 504 | /triggers/uCDN-A/123 | | 505 [ ]--------------------------->[ ] | 506 | [ ] | 507 | (11) HTTP 200 [ ] | 508 | Trigger Status Resource [ ] | 509 [ ]<---------------------------[ ] | 511 Figure 1: CDNI Message Flow for Triggers, Including Error Propagation 513 The steps in Figure 1 are as follows: 515 1. The uCDN-A triggers action in the dCDN-B by POSTing a CI/T 516 Command to a collection of Trigger Status Resources 517 "https://dcdn-b.example.com/triggers/uCDN-A". This URL was 518 given to the uCDN-A when the CI/T interface was established. 520 2. The dCDN-B authenticates the request, validates the CI/T 521 Command, and, if it accepts the request, creates a new Trigger 522 Status Resource. 524 3. The dCDN-B responds to the uCDN-A with an HTTP 201 response 525 status and the location of the Trigger Status Resource. 527 4. The dCDN-B triggers the action in the dCDN-C by POSTing a CI/T 528 Command to a collection of Trigger Status Resources 529 "https://dcdn-c.example.com/triggers/dCDN-B". This URL was 530 given to the uCDN-A when the CI/T interface was established. 532 5. The dCDN-C authenticates the request, validates the CI/T 533 Command, and, if it accepts the request, creates a new Trigger 534 Status Resource. 536 6. The dCDN-C responds to the dCDN-B with an HTTP 201 response 537 status and the location of the Trigger Status Resource. 539 7. The dCDN-C acts upon the CI/T Command. However, the command 540 fails at dCDN-C as, for example, the Tigger Specification 541 contains a "type" that is not supported by dCDN-C. 543 8. The dCDN-B can poll, possibly repeatedly, the Trigger Status 544 Resource in dCDN-C. 546 9. The dCDN-C responds with the Trigger Status Resource, describing 547 the progress or results of the CI/T Trigger Command. In the 548 described flow, the returned Status is "failed", with an Error 549 Description Object holding an "eunsupported" Error Code 550 reflecting the status response. 552 10. The uCDN-A can poll, possibly repeatedly, the Trigger Status 553 Resource in dCDN-B. 555 11. The dCDN-B responds with the Trigger Status Resource, describing 556 the progress or results of the CI/T Trigger Command. In the 557 flow described above, the returned Status is "failed", and the 558 "eunsupported" error received in the trigger status resource 559 from dCDN-C is propagated along with dCDN-C PID by adding it to 560 the errors array in dCDN-B's own status resource to be sent back 561 to the originating uCDN-A. 563 3.3. Properties of CI/T Version 2 objects 565 This section defines the values that can appear in the top-level 566 objects described in Section 3.1, and their encodings. 568 3.3.1. Trigger Specification Version 2 570 Version 2 of the Trigger Specification adds the following properties 571 on top of the existing properties of the trigger specification 572 defined in Section 5.2.1 of [RFC8007]. 574 Property: content.regexs 576 Description: Regexs of content URLs to which the CI/T trigger 577 command applies. 579 Type: A JSON array of RegexMatch objects (see Section 3.3.2). 581 Mandatory: No, but at least one of "metadata.*" or "content.*" 582 MUST be present and non-empty. 584 Property: content.playlists 586 Description: Playlists of content the CI/T trigger command 587 applies to. 589 Type: A JSON array of Playlist objects (see Section 3.3.3). 591 Mandatory: No, but at least one of "metadata.*" or "content.*" 592 MUST be present and non-empty. 594 Property: extensions 596 Description: Array of trigger extension data. 598 Type: Array of GenericTriggerExtension objects (see 599 Section 3.3.5.2). 601 Mandatory: No. The default is no extensions. 603 Example of a JSON serialized invalidation trigger.v2 object with a 604 list of regex objects, a list of playlist objects, and extensions: 606 { 607 "trigger.v2": { 608 "type": "invalidate", 609 "content.regexs": [ ], 610 "content.playlists": [ ], 611 "extensions": [ , 926 "generic-trigger-extension-value": 927 { 928 929 }, 930 "mandatory-to-enforce": true, 931 "safe-to-redistribute": true, 932 "incomprehensible": false 933 } 935 3.3.6. Error Description Version 2 937 Version 2 of the Error Description adds the "content.playlists", 938 "content.regexs", "extensions" and "cdn" properties on top of the 939 existing properties of version 1 of the trigger Error Description as 940 defined in Section 5.2.6 of [RFC8007]. 942 Properties: content.regexs, content.playlists 944 Description: Content Regex and Playlist references copied from 945 the Trigger Specification. Only those regexs and playlists to 946 which the error applies are included in each property, but 947 those references MUST be exactly as they appear in the request; 948 the dCDN MUST NOT change or generalize the URLs or Regexs. 949 Note that these properties are added on top of the already 950 existing properties: "metadata.urls", "content.urls", 951 "metadata.patterns" and "content.patterns". 953 Type: A JSON array of JSON strings, where each string is copied 954 from a "content.regexs" or "content.playlists" value in the 955 corresponding Trigger Specification. 957 Mandatory: At least one of "content.regexs", 958 "content.playlists", "metadata.urls", "content.urls", 959 "metadata.patterns" or "content.patterns" is mandatory in each 960 Error Description object. 962 Property: extensions 964 Description: Array of trigger extension objects copied from the 965 corresponding "extensions" array from the Trigger 966 Specification. Only those extensions to which the error 967 applies are included, but those extensions MUST be exactly as 968 they appear in the request. 970 Type: Array of GenericTriggerExtension objects, where each 971 extension object is copied from the "extensions" array values 972 in the Trigger Specification. 974 Mandatory: No. The "extensions" array SHOULD be used only if 975 the error relates to extension objects. 977 Property: cdn 979 Description: The CDN PID of the CDN where the error occurred. 980 The "cdn" property is used by the originating uCDN or by 981 propagating dCDN in order to distinguish in which CDN the error 982 occured. 984 Type: A non-empty JSON string, where the string is a CDN PID as 985 defined in Section 4.6 of [RFC8007]. 987 Mandatory: Yes. In the case the dCDN does not like to expose 988 this information, it should provide its own CDN PID. 990 Example of a JSON serialized Error Description object reporting a 991 malformed Playlist: 993 { 994 "content.playlists": [ 995 { 996 "playlist": "https://www.example.com/hls/title/index.m3u8", 997 "media-protocol": "hls" 998 } 999 ], 1000 "description": "Failed to parse HLS playlist", 1001 "error": "econtent", 1002 "cdn": "AS64500:0" 1003 }, 1005 Example of a JSON serialized Error Description object reporting an 1006 unsupported extension object: 1008 { 1009 "errors.v2": [ 1010 { 1011 "extensions": [ 1012 { 1013 "generic-trigger-extension-type": 1014 , 1015 "generic-trigger-extension-value": 1016 { 1017 1018 }, 1019 } 1020 ], 1021 "description": "unrecognized extension ", 1022 "error": "eextension", 1023 "cdn": "AS64500:0" 1024 }, 1025 ] 1026 } 1028 3.3.7. Error codes 1030 This document adds the error code "eextension" to the error codes 1031 table defined in Section 5.2.6 of [RFC8007]. This error code 1032 designates that an error occurred while parsing a generic trigger 1033 extension, or that the specific extension is not supported by the 1034 CDN. A CDN that fails to execute a trigger due a generic extension 1035 object which is "mandatory-to-enforce" MUST report it using the 1036 "errors.v2" array within the trigger status resource, while setting 1037 the error code to "eextension" and providing an appropriate 1038 description. The "eextension" error code is a registered type of 1039 "CDNI CI/T Trigger Error Codes" (see Section 6.2). 1041 3.4. Examples 1043 The following subsections provides usage examples of the specified 1044 interface extensions being used by the trigger command and status 1045 resource. 1047 3.4.1. Invalidation with Regex 1049 In the following example a CI/T "invalidate" command uses the Regex 1050 property to specify the range of content objects for invalidation, 1051 the command is rejected by the dCDN due to regex complexity, and an 1052 appropriate error is reflected in the status response. 1054 REQUEST: 1056 POST /triggers HTTP/1.1 1057 User-Agent: example-user-agent/0.1 1058 Host: triggers.dcdn.example.com 1059 Accept: */* 1060 Content-Type: application/cdni; ptype=ci-trigger-command.v2 1061 { 1062 "trigger.v2": { 1063 "type": "invalidate", 1064 "content.regexs": [ 1065 { 1066 "regex": "^(https:\\/\\/video\\.example\\.com)\\/ 1067 ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$", 1068 "case-sensitive": true, 1069 "match-query-string": false 1070 }, 1071 { }, 1072 ... 1073 { }, 1074 ], 1075 }, 1076 "cdn-path": [ "AS64496:0" ] 1077 } 1079 RESPONSE: 1081 HTTP/1.1 201 Created 1082 Date: Wed, 04 May 2016 08:48:10 GMT 1083 Content-Length: 467 1084 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1085 Location: https://triggers.dcdn.example.com/triggers/0 1086 Server: example-server/0.1 1088 { 1089 "errors.v2": [ 1090 { 1091 "content.regexs": [ 1092 { 1093 "regex": "^(https:\\/\\/video\\.example\\.com)\\/ 1094 ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$", 1095 "case-sensitive": true, 1096 "match-query-string": false 1097 }, 1098 ], 1099 "description": "The dCDN rejected a regex due to complexity", 1100 "error": "ereject", 1101 "cdn": "AS64500:0" 1102 }, 1103 ], 1104 "ctime": 1462351690, 1105 "etime": 1462351698, 1106 "mtime": 1462351690, 1107 "status": "failed", 1108 "trigger.v2": { } 1109 } 1111 3.4.2. Preposition with Playlists 1113 In the following example a CI/T "preposition" command uses the 1114 Playlist property to specify the full media library of a specific 1115 content. The command fails due to playlist parse error and an 1116 appropriate error is reflected in the status response. 1118 REQUEST: 1120 POST /triggers HTTP/1.1 1121 User-Agent: example-user-agent/0.1 1122 Host: triggers.dcdn.example.com 1123 Accept: */* 1124 Content-Type: application/cdni; ptype=ci-trigger-command.v2 1125 { 1126 "trigger.v2": { 1127 "type": "preposition", 1128 "content.playlists": [ 1129 { 1130 "playlist": "https://www.example.com/hls/title/index.m3u8", 1131 "media-protocol": "hls" 1132 }, 1133 { }, 1134 ... 1135 { }, 1136 ], 1137 }, 1138 "cdn-path": [ "AS64496:0" ] 1139 } 1141 RESPONSE: 1143 HTTP/1.1 201 Created 1144 Date: Wed, 04 May 2016 08:48:10 GMT 1145 Content-Length: 467 1146 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1147 Location: https://triggers.dcdn.example.com/triggers/0 1148 Server: example-server/0.1 1150 { 1151 "errors.v2": [ 1152 { 1153 "content.playlists": [ 1154 { 1155 "playlist": "https://www.example.com/hls/title/index.m3u8", 1156 "media-protocol": "hls" 1157 }, 1158 ], 1159 "description": "The dCDN was not able to parse the playlist", 1160 "error": "econtent", 1161 "cdn": "AS64500:0" 1162 }, 1163 ], 1164 "ctime": 1462351690, 1165 "etime": 1462351698, 1166 "mtime": 1462351690, 1167 "status": "failed", 1168 "trigger.v2": { } 1169 } 1171 3.4.3. Extensions with Error Propagation 1173 In the following example a CI/T "preposition" command is using two 1174 extensions to control the way the trigger is executed. In this 1175 example the receiving dCDN identified as "AS64500:0" does not support 1176 the first extension in the extensions array. dCDN "AS64500:0" further 1177 distributes this trigger to another downstream CDN that is identified 1178 as "AS64501:0", which does not support the second extension in the 1179 extensions array. The error is propagated from "AS64501:0" to 1180 "AS64500:0" and the errors.v2 array reflects both errors. 1182 REQUEST: 1184 POST /triggers HTTP/1.1 1185 User-Agent: example-user-agent/0.1 1186 Host: triggers.dcdn.example.com 1187 Accept: */* 1188 Content-Type: application/cdni; ptype=ci-trigger-command.v2 1189 { 1190 "trigger.v2": { 1191 "type": "preposition", 1192 "content.playlists": [ 1193 { 1194 "playlist": "https://www.example.com/hls/title/index.m3u8", 1195 "media-protocol": "hls" 1196 }, 1197 ], 1198 "extensions": [ 1199 { 1200 "generic-trigger-extension-type": 1201 , 1202 "generic-trigger-extension-value": 1203 { 1204 1205 }, 1206 "mandatory-to-enforce": true, 1207 "safe-to-redistribute": true, 1208 }, 1209 { 1210 "generic-trigger-extension-type": 1211 , 1212 "generic-trigger-extension-value": 1213 { 1214 1215 }, 1216 "mandatory-to-enforce": true, 1217 "safe-to-redistribute": true, 1218 }, 1219 ], 1220 }, 1221 "cdn-path": [ "AS64496:0" ] 1222 } 1224 RESPONSE: 1226 HTTP/1.1 201 Created 1227 Date: Wed, 04 May 2016 08:48:10 GMT 1228 Content-Length: 467 1229 Content-Type: application/cdni; ptype=ci-trigger-status.v2 1230 Location: https://triggers.dcdn.example.com/triggers/0 1231 Server: example-server/0.1 1233 { 1234 "errors.v2": [ 1235 { 1236 "extensions": [ 1237 { 1238 "generic-trigger-extension-type": 1239 , 1240 "generic-trigger-extension-value": 1241 { 1242 1243 }, 1244 "mandatory-to-enforce": true, 1245 "safe-to-redistribute": true, 1246 }, 1247 ], 1249 "description": "unrecognized extension ", 1250 "error": "eextension", 1251 "cdn": "AS64500:0" 1252 }, 1253 { 1254 "extensions": [ 1255 { 1256 "generic-trigger-extension-type": 1257 , 1258 "generic-trigger-extension-value": 1259 { 1260 1261 }, 1262 "mandatory-to-enforce": true, 1263 "safe-to-redistribute": true, 1264 }, 1265 ], 1266 "description": "unrecognized extension ", 1267 "error": "eextension", 1268 "cdn": "AS64501:0" 1269 }, 1270 ], 1271 "ctime": 1462351690, 1272 "etime": 1462351698, 1273 "mtime": 1462351690, 1274 "status": "failed", 1275 "trigger.v2": { } 1276 } 1278 4. Trigger Extension Objects 1280 The objects defined below are intended to be used in the 1281 GenericTriggerExtension object's generic-trigger-extension-value 1282 field as defined in Section Section 3.3.5.2, and their generic- 1283 trigger-extension-type property MUST be set to the appropriate CDNI 1284 Payload Type as defined in Section 6.1 . 1286 4.1. LocationPolicy extension 1288 A content operation may be relevant for a specific geographical 1289 region, or need to be excluded from a specific region. In this case, 1290 the trigger should be applied only to parts of the network that are 1291 either "included" or "not excluded" by the location policy. Note 1292 that the restrictions here are on the cache location rather than the 1293 client location. 1295 The LocationPolicy object defines which CDN or cache locations for 1296 which the trigger command is relevant. 1298 Example use cases: 1300 o Pre-position: Certain contracts allow for pre-positioning or 1301 availability of contract in all regions except for certain 1302 excluded regions in the world, including caches. For example, 1303 some content cannot ever knowingly touch servers in a specific 1304 country, including cached content. Therefore, these regions MUST 1305 be excluded from a pre-positioning operation. 1307 o Purge: In certain cases, content may have been located on servers 1308 in regions where the content must not reside. In such cases, a 1309 purge operation to remove content specifically from that region, 1310 is required. 1312 Object specification 1314 Property: locations 1316 Description: An Access List that allows or denies (blocks) the 1317 trigger execution per cache location. 1319 Type: Array of LocationRule objects (see Section 4.2.2.1 of 1320 [RFC8006]) 1322 Mandatory: Yes. 1324 If a location policy object is not listed within the trigger command, 1325 the default behavior is to execute the trigger in all available 1326 caches and locations of the dCDN. 1328 The trigger command is allowed, or denied, for a specific cache 1329 location according to the action of the first location whose 1330 footprint matches against that cache's location. If two or more 1331 footprints overlap, the first footprint that matches against the 1332 cache's location determines the action a CDN MUST take. If the 1333 "locations" property is an empty list or if none of the listed 1334 footprints match the location of a specific cache location, then the 1335 result is equivalent to a "deny" action. 1337 The following is an example of a JSON serialized generic trigger 1338 extension object containing a location policy object that allows the 1339 trigger execution in the US but blocks its execution in Canada: 1341 { 1342 "generic-trigger-extension-type": "CIT.LocationPolicy", 1343 "generic-trigger-extension-value": 1344 { 1345 "locations": [ 1346 { 1347 "action": "allow", 1348 "footprints": [ 1349 { 1350 "footprint-type": "countrycode", 1351 "footprint-value": ["us"] 1352 } 1353 ] 1354 }, 1355 { 1356 "action": "deny", 1357 "footprints": [ 1358 { 1359 "footprint-type": "countrycode", 1360 "footprint-value": ["ca"] 1361 } 1362 ] 1363 } 1364 ] 1365 }, 1366 "mandatory-to-enforce": true, 1367 "safe-to-redistribute": true, 1368 "incomprehensible": false 1369 } 1371 4.2. TimePolicy Extension 1373 A uCDN may wish to perform content management operations on the dCDN 1374 in a specific schedule. The TimePolicy extensions allows the uCDN to 1375 instruct the dCDN to execute the trigger command in a desired time 1376 window. For example, a content provider that wishes to pre-populate 1377 a new episode at off-peak time so that it would be ready on caches at 1378 prime time when the episode is released for viewing. A scheduled 1379 operation enables the uCDN to direct the dCDN in what time frame to 1380 execute the trigger. 1382 A uCDN may wish to to schedule a trigger such that the dCDN will 1383 execute it in local time, as it is measured in each region. For 1384 example, a uCDN may wish the dCDN to pull the content at off-peak 1385 hours, between 2AM-4AM, however, as a CDN is distributed across 1386 multiple time zones, the UTC definition of 2AM depends on the actual 1387 location. 1389 We define two alternatives for localized scheduling: 1391 o Regional schedule: When used in conjunction with the Location 1392 Policy defined in Section 4.1, the uCDN can trigger separate 1393 commands for different geographical regions, for each region using 1394 a different schedule. This allows the uCDN to control the 1395 execution time per region. 1397 o Local Time schedule: We introduce a "local time" version for 1398 Internet timestamps that follows the notation for local time as 1399 defined in Section 4.2.2 of [ISO8601]. When local time is used, 1400 that dCDN SHOULD execute the triggers at different absolute times, 1401 according the local time of each execution location. 1403 Object specification 1405 Property: unix-time-window 1407 Description: A UNIX epoch time window in which the trigger 1408 SHOULD be executed. 1410 Type: TimeWindow object using UNIX epoch timestamps (see 1411 Section 4.2.3.2 of [RFC8006]) 1413 Mandatory: No, but exactly one of "unixEpochWindow", 1414 "utcWindow" or "localTimeWindow" MUST be present. 1416 Property: utc-window 1418 Description: A UTC time window in which the trigger SHOULD be 1419 executed. 1421 Type: UTCWindow object as defined in Section 4.2.1. 1423 Mandatory: No, but exactly one of "unixEpochWindow", 1424 "utcWindow" or "localTimeWindow" MUST be present. 1426 Property: local-time-window 1428 Description: A local time window. The dCDN SHOULD execute the 1429 trigger at the defined time frame, interpreted as the the local 1430 time per location. 1432 Type: LocalTimeWindow object as defined in Section 4.2.2. 1434 Mandatory: No, but exactly one of "unixEpochWindow", 1435 "utcWindow" or "localTimeWindow" MUST be present. 1437 If a time policy object is not listed within the trigger command, the 1438 default behavior is to execute the trigger in a time frame most 1439 suitable to the dCDN taking under consideration other constrains and 1440 / or obligations. 1442 Example of a JSON serialized generic trigger extension object 1443 containing a time policy object that schedules the trigger execution 1444 to a window between 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC, 1445 using the "unix-time-window" property: 1447 { 1448 "generic-trigger-extension-type": "CIT.TimePolicy", 1449 "generic-trigger-extension-value": 1450 { 1451 "unix-time-window": { 1452 "start": 946717200, 1453 "end": 946746000 1454 } 1455 } 1456 "mandatory-to-enforce": true, 1457 "safe-to-redistribute": true, 1458 "incomprehensible": false 1459 } 1461 4.2.1. UTCWindow 1463 A UTCWindow object describes a time range in UTC or UTC and a zone 1464 offset that can be applied by a TimePolicy. 1466 Property: start 1468 Description: The start time of the window. 1470 Type: Internet date and time as defined in [RFC3339]. 1472 Mandatory: No, but at least one of "start" or "end" MUST be 1473 present and non-empty. 1475 Property: end 1477 Description: The end time of the window. 1479 Type: Internet date and time as defined in [RFC3339]. 1481 Mandatory: No, but at least one of "start" or "end" MUST be 1482 present and non-empty. 1484 Example JSON serialized UTCWindow object that describes a time window 1485 from 02:30 01/01/2000 UTC to 04:30 01/01/2000 UTC: 1487 { 1488 "start": 2000-01-01T02:30:00.00Z, 1489 "end": 2000-01-01T04:30:00.00Z, 1490 } 1492 Example JSON serialized UTCWindow object that describes a time window 1493 in New York time zone offset UTC-05:00 from 02:30 01/01/2000 to 04:30 1494 01/01/2000: 1496 { 1497 "start": 2000-01-01T02:30:00.00-05:00, 1498 "end": 2000-01-01T04:30:00.00-05:00, 1499 } 1501 4.2.2. LocalTimeWindow 1503 A LocalTimeWindow object describes a time range in local time. The 1504 reader of this object MUST interpret it as "the local time at the 1505 location of execution". For example, if the time window states 2AM 1506 to 4AM local time then a dCDN that has presence in both London (UTC) 1507 and New York (UTC-05:00) will execute the trigger at 2AM-4AM UTC in 1508 London and at 2AM-4AM UTC-05:00 in New York. 1510 Property: start 1512 Description: The start time of the window. 1514 Type: JSON string formatted as DateLocalTime as defined in 1515 Section 4.2.3. 1517 Mandatory: No, but at least one of "start" or "end" MUST be 1518 present and non-empty. 1520 Property: end 1522 Description: The end time of the window. 1524 Type: JSON string formatted as DateLocalTime as defined in 1525 Section 4.2.3. 1527 Mandatory: No, but at least one of "start" or "end" MUST be 1528 present and non-empty. 1530 Example JSON serialized LocalTimeWindow object that describes a local 1531 time window from 02:30 01/01/2000 to 04:30 01/01/2000. 1533 { 1534 "start": 2000-01-01T02:30:00.00, 1535 "end": 2000-01-01T04:30:00.00, 1536 } 1538 4.2.3. DateLocalTime 1540 DateLocalTime is a timestamp that follows the date and local time 1541 notation in Section 4.3.2 of [ISO8601] as a complete date and time 1542 extended representation, where the time zone designator is omitted. 1543 In addition, for simplicity and as exact accuracy is not an objective 1544 in this case, this specification does not support the decimal 1545 fractions of seconds, and does not take leap second into 1546 consideration. 1548 Type: JSON string using the format "date-local-time" as defined in 1549 Section 4.2.3.1. 1551 4.2.3.1. Date and Local Time Format 1553 The Date and Local Time format is specified here using the syntax 1554 description notation defined in [ABNF]. 1556 date-fullyear = 4DIGIT 1557 date-month = 2DIGIT ; 01-12 1558 date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on 1559 ; month/year 1560 time-hour = 2DIGIT ; 00-23 1561 time-minute = 2DIGIT ; 00-59 1562 time-second = 2DIGIT ; 00-59 leap seconds are not supported 1564 local-time = time-hour ":" time-minute ":" time-second 1565 full-date = date-fullyear "-" date-month "-" date-mday 1566 date-local-time = full-date "T" local-time 1568 Example time representing 09:00AM on 01/01/2000 local time: 1570 2000-01-01T09:00:00.00 1572 NOTE: Per [ABNF] and [ISO8601], the "T" character in this syntax 1573 may alternatively be lower case "t". For simplicity, Applications 1574 that generate the "date-local-time" format defined here, SHOULD 1575 only use the upper case letter "T". 1577 4.2.3.2. Restrictions 1579 The grammar element date-mday represents the day number within the 1580 current month. The maximum value varies based on the month and year 1581 as follows: 1583 Month Number Month/Year Maximum value of date-mday 1584 ------------ ---------- -------------------------- 1585 01 January 31 1586 02 February, normal 28 1587 02 February, leap year 29 1588 03 March 31 1589 04 April 30 1590 05 May 31 1591 06 June 30 1592 07 July 31 1593 08 August 31 1594 09 September 30 1595 10 October 31 1596 11 November 30 1597 12 December 31 1599 See Appendix C of [RFC3339] for a sample C code that determines if a 1600 year is a leap year. 1602 The grammar element time-second may have the values 0-59. The value 1603 of 60 that is used in [ISO8601] to represent a leap second MUST NOT 1604 be used. 1606 Although [ISO8601] permits the hour to be "24", this profile of 1607 [ISO8601] only allows values between "00" and "23" for the hour in 1608 order to reduce confusion. 1610 5. Footprint and Capabilities 1612 This section covers the FCI objects required for advertisement of the 1613 extensions and properties introduced in this document. 1615 5.1. CI/T Versions Capability Object 1617 The CI/T versions capability object is used to indicate support for 1618 one or more CI/T objects versions. Note that the default version as 1619 originally defined in [RFC8007] MUST be implicitly supported 1620 regardless of the versions listed in this capability object. 1622 Property: versions 1624 Description: A list of version numbers. 1626 Type: An array of JSON strings 1628 Mandatory: No. The default is version 1. A missing or an 1629 empty versions list means that only version 1 of the interface 1630 and objects is supported. 1632 5.1.1. CI/T Versions Capability Object Serialization 1634 The following shows an example of a JSON serialized CI/T Versions 1635 Capability object serialization for a dCDN that supports versions 2 1636 and 2.1 of the CI/T interface. 1638 { 1639 "capabilities": [ 1640 { 1641 "capability-type": "FCI.TriggerVersion", 1642 "capability-value": { 1643 "versions": [ "1", "2", "2.1" ] 1644 }, 1645 "footprints": [ 1646 1647 ] 1648 } 1649 ] 1650 } 1652 5.2. CI/T Playlist Protocol Capability Object 1654 The CI/T Playlist Protocol capability object is used to indicate 1655 support for one or more MediaProtocol types listed in Section 6.3 by 1656 the playlists property of the "trigger.v2" object. 1658 Property: media-protocols 1660 Description: A list of media protocols. 1662 Type: A list of MediaProtocol (from the CDNI Triggers media 1663 protocol types Section 6.3) 1665 Mandatory: No. The default, in case of a missing or an empty 1666 list, is none supported. 1668 5.2.1. CI/T Playlist Protocol Capability Object Serialization 1670 The following shows an example of a JSON serialized CI/T Playlist 1671 Protocol Capability object serialization for a dCDN that supports 1672 "hls" and "dash". 1674 { 1675 "capabilities": [ 1676 { 1677 "capability-type": "FCI.TriggerPlaylistProtocol", 1678 "capability-value": { 1679 "media-protocols": ["hls", "dash"] 1680 }, 1681 "footprints": [ 1682 1683 ] 1684 } 1685 ] 1686 } 1688 5.3. CI/T Trigger Extension Capability Object 1690 The CI/T Generic Extension capability object is used to indicate 1691 support for one or more GenericExtensionObject types. 1693 Property: trigger-extension 1695 Description: A list of supported CDNI CI/T 1696 GenericExtensionObject types. 1698 Type: List of strings corresponding to entries from the "CDNI 1699 Payload Types" registry [RFC7736] that are under the CIT 1700 namespace, and that correspond to CDNI CI/T 1701 GenericExtensionObject objects. 1703 Mandatory: No. The default, in case of a missing or an empty 1704 list, MUST be interpreted as "no GenericExtensionObject types 1705 are supported". A non-empty list MUST be interpreted as 1706 containing "the only GenericExtensionObject types that are 1707 supported". 1709 5.3.1. CI/T Trigger Extension Capability Object Serialization 1711 The following shows an example of a JSON serialized CI/T Trigger 1712 Extension Capability object serialization for a dCDN that supports 1713 the "CIT.LocationPolicy" and the "CIT.TimePolicy" objects. 1715 { 1716 "capabilities": [ 1717 { 1718 "capability-type": "FCI.TriggerGenericExtension", 1719 "capability-value": { 1720 "trigger-extension": ["CIT.LocationPolicy", "CIT.TimePolicy"] 1721 }, 1722 "footprints": [ 1723 1724 ] 1725 } 1726 ] 1727 } 1729 6. IANA Considerations 1731 6.1. CDNI Payload Types 1733 This document requests the registration of the following CDNI Payload 1734 Types under the IANA "CDNI Payload Types" registry defined in 1735 [RFC7736]: 1737 +-----------------------------+---------------+ 1738 | Payload Type | Specification | 1739 +-----------------------------+---------------+ 1740 | ci-trigger-command.v2 | RFCthis | 1741 | ci-trigger-status.v2 | RFCthis | 1742 | CIT.LocationPolicy | RFCthis | 1743 | CIT.TimePolicy | RFCthis | 1744 | FCI.TriggerVersion | RFCthis | 1745 | FCI.TriggerPlaylistProtocol | RFCthis | 1746 | FCI.TriggerGenericExtension | RFCthis | 1747 +-----------------------------+---------------+ 1749 [RFC Editor: Please replace RFCthis with the published RFC number for 1750 this document.] 1752 6.1.1. CDNI ci-trigger-command.v2 Payload Type 1754 Purpose: The purpose of this payload type is to distinguish version 2 1755 of the CI/T command (and any associated capability advertisement) 1757 Interface: CI/T 1759 Encoding: see Section 3.1 1761 6.1.2. CDNI ci-trigger-status.v2 Payload Type 1763 Purpose: The purpose of this payload type is to distinguish version 2 1764 of the CI/T status resource response (and any associated capability 1765 advertisement) 1767 Interface: CI/T 1769 Encoding: see Section 3.1 1771 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type 1773 Purpose: The purpose of this Trigger Extension type is to distinguish 1774 LocationPolicy CIT Trigger Extension objects. 1776 Interface: CI/T 1778 Encoding: see Section 4.1 1780 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type 1782 Purpose: The purpose of this Trigger Extension type is to distinguish 1783 TimePolicy CI/T Trigger Extension objects. 1785 Interface: CI/T 1787 Encoding: see Section 4.2 1789 6.1.5. CDNI FCI CI/T Versions Payload Type 1791 Purpose: The purpose of this payload type is to distinguish FCI 1792 advertisement objects for CI/T Triggers Versions objects 1794 Interface: FCI 1796 Encoding: see Section 5.1.1 1798 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type 1800 Purpose: The purpose of this payload type is to distinguish FCI 1801 advertisement objects for CI/T Playlist Protocol objects 1803 Interface: FCI 1805 Encoding: see Section 5.2.1 1807 6.1.7. CDNI FCI CI/T Extension Objects Payload Type 1809 Purpose: The purpose of this payload type is to distinguish FCI 1810 advertisement objects for CI/T Extension objects 1812 Interface: FCI 1814 Encoding: see Section 5.3.1 1816 6.2. CDNI CI/T Trigger Error Codes types 1818 The IANA is requested to update the "CDNI CI/T Error Codes" 1819 subregistry (defined in Section 7.3 of [RFC8007] and located at 1820 ) with the 1821 following registration: 1823 +------------+--------------------------------------+---------------+ 1824 | Error Code | Description | Specification | 1825 +------------+--------------------------------------+---------------+ 1826 | eextension | The dCDN failed to parse a generic | Section | 1827 | | "mandatory-to-enforce" extension | Section 3.3.7 | 1828 | | object, or does not support this | of this | 1829 | | extension. | document. | 1830 +------------+--------------------------------------+---------------+ 1832 6.3. CDNI Media protocol types 1834 The IANA is requested to create a new "CDNI MediaProtocol Types" 1835 subregistry in the "Content Delivery Networks Interconnection (CDNI) 1836 Parameters" registry. The "CDNI MediaProtocol Types" namespace 1837 defines the valid MediaProtocol object values in 1838 Section Section 3.3.4, used by the Playlist object. Additions to the 1839 MediaProtocol namespace conform to the "Specification Required" 1840 policy as defined in Section 4.6 of [RFC8126], where the 1841 specification defines the MediaProtocol Type and the protocol to 1842 which it is associated. The designated expert will verify that new 1843 protocol definitions do not duplicate existing protocol definitions 1844 and prevent gratuitous additions to the namespace. 1846 The following table defines the initial MediaProtocol values 1847 corresponding to the HLS, MSS, and DASH protocols: 1849 +---------------+-------------------+---------------+---------------+ 1850 | MediaProtocol | Description | Specification | Protocol | 1851 | Type | | | Specification | 1852 +---------------+-------------------+---------------+---------------+ 1853 | hls | HTTP Live | RFCthis | RFC 8216 | 1854 | | Streaming | | [RFC8216] | 1855 | mss | Microsoft Smooth | RFCthis | MSS [MSS] | 1856 | | Streaming | | | 1857 | dash | Dynamic Adaptive | RFCthis | MPEG-DASH | 1858 | | Streaming over | | [MPEG-DASH] | 1859 | | HTTP (MPEG-DASH) | | | 1860 +---------------+-------------------+---------------+---------------+ 1862 [RFC Editor: Please replace RFCthis with the published RFC number for 1863 this document.] 1865 7. Security Considerations 1867 All security considerations listed in Section 8 of [RFC8007] and 1868 Section 7 of [RFC8008] apply to this document as well. 1870 This document defines the capability to use regular expression within 1871 the trigger specification for more granular content selection. The 1872 usage of regex introduced the risk of regex complexity attacks, a.k.a 1873 ReDos attacks. An attacker may be able to craft a regular expression 1874 that can exhaust server resources and may take exponential time in 1875 the worst case. An implementation MUST protect itself at a minimum 1876 by accepting triggers only from an authenticated party over a secured 1877 connection. An implementation SHOULD also protect itself by using 1878 secure programing techniques and decline trigger commands that use 1879 potentially risky regex, such techniques are readily available in 1880 secure programming literature and are beyond the scope of this 1881 document. 1883 8. Acknowledgments 1885 The authors thank Kevin J. Ma for his guidance as well as careful 1886 and methodical reviews and feedback. 1888 9. References 1890 9.1. Normative References 1892 [ABNF] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax 1893 Specifications: ABNF", STD 68, RFC 5234, 1894 DOI 10.17487/RFC5234, January 2008, 1895 . 1897 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1898 Requirement Levels", BCP 14, RFC 2119, 1899 DOI 10.17487/RFC2119, March 1997, 1900 . 1902 [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: 1903 Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, 1904 . 1906 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 1907 Resource Identifier (URI): Generic Syntax", STD 66, 1908 RFC 3986, DOI 10.17487/RFC3986, January 2005, 1909 . 1911 [RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content 1912 Distribution Network Interconnection (CDNI) Problem 1913 Statement", RFC 6707, DOI 10.17487/RFC6707, September 1914 2012, . 1916 [RFC7736] Ma, K., "Content Delivery Network Interconnection (CDNI) 1917 Media Type Registration", RFC 7736, DOI 10.17487/RFC7736, 1918 December 2015, . 1920 [RFC8006] Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma, 1921 "Content Delivery Network Interconnection (CDNI) 1922 Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016, 1923 . 1925 [RFC8007] Murray, R. and B. Niven-Jenkins, "Content Delivery Network 1926 Interconnection (CDNI) Control Interface / Triggers", 1927 RFC 8007, DOI 10.17487/RFC8007, December 2016, 1928 . 1930 [RFC8008] Seedorf, J., Peterson, J., Previdi, S., van Brandenburg, 1931 R., and K. Ma, "Content Delivery Network Interconnection 1932 (CDNI) Request Routing: Footprint and Capabilities 1933 Semantics", RFC 8008, DOI 10.17487/RFC8008, December 2016, 1934 . 1936 [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for 1937 Writing an IANA Considerations Section in RFCs", BCP 26, 1938 RFC 8126, DOI 10.17487/RFC8126, June 2017, 1939 . 1941 [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data 1942 Interchange Format", STD 90, RFC 8259, 1943 DOI 10.17487/RFC8259, December 2017, 1944 . 1946 9.2. Informative References 1948 [ISO8601] ISO, "Data elements and interchange formats -- Information 1949 interchange -- Representation of dates and times", 1950 ISO 8601:2004, Edition 3, 12 2004, 1951 . 1953 [MPEG-DASH] 1954 ISO, "Information technology -- Dynamic adaptive streaming 1955 over HTTP (DASH) -- Part 1: Media presentation description 1956 and segment format", ISO/IEC 23009-1:2014, Edition 2, 05 1957 2014, . 1959 [MSS] Microsoft, "[MS-SSTR]: Smooth Streaming Protocol", 1960 Protocol Revision 8.0, September 2017, 1961 . 1963 [OC-CM] Finkelman, O., Ed., Devabhaktuni, J., and M. Stock, "Open 1964 Caching Content Management Operations Specification", 1965 November 2017, 1966 . 1969 [OCWG] Streaming Video Alliance, "Open Caching", 1970 . 1973 [PCRE841] Hazel, P., "Perl Compatible Regular Expressions", 1974 Version 8.41, July 2017, . 1976 [RFC8216] Pantos, R., Ed. and W. May, "HTTP Live Streaming", 1977 RFC 8216, DOI 10.17487/RFC8216, August 2017, 1978 . 1980 [SVA] "Streaming Video Alliance", 1981 . 1983 Authors' Addresses 1985 Ori Finkelman 1986 Qwilt 1987 6, Ha'harash 1988 Hod HaSharon 4524079 1989 Israel 1991 Email: ori.finkelman.ietf@gmail.com 1992 Sanjay Mishra 1993 Verizon 1994 13100 Columbia Pike 1995 Silver Spring, MD 20904 1996 USA 1998 Email: sanjay.mishra@verizon.com 2000 Nir B. Sopher 2001 Qwilt 2002 6, Ha'harash 2003 Hod HaSharon 4524079 2004 Israel 2006 Email: nir@apache.org