idnits 2.17.1 draft-finkelman-cdni-triggers-sva-extensions-01.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (October 22, 2018) is 2013 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 481, but not defined Summary: 0 errors (**), 0 flaws (~~), 2 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group O. Finkelman 3 Internet-Draft Qwilt 4 Intended status: Standards Track S. Mishra 5 Expires: April 25, 2019 Verizon 6 October 22, 2018 8 CDNI Control Triggers Interface Extensions 9 draft-finkelman-cdni-triggers-sva-extensions-01 11 Abstract 13 The Open Caching working group of the Streaming Video Alliance is 14 focused on the delegation of video delivery request from commercial 15 CDNs to a caching layer at the ISP. In that aspect, Open Caching is 16 a specific use case of CDNI, where the commercial CDN is the upstream 17 CDN (uCDN) and the ISP caching layer is the downstream CDN (dCDN). 18 The extensions specified in this document to the CDNI CI/T interface 19 are derived from requirements raised by Open Caching but are 20 applicable to CDNI use cases in general. 22 Requirements Language 24 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 25 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 26 document are to be interpreted as described in RFC 2119 [RFC2119]. 28 Status of This Memo 30 This Internet-Draft is submitted in full conformance with the 31 provisions of BCP 78 and BCP 79. 33 Internet-Drafts are working documents of the Internet Engineering 34 Task Force (IETF). Note that other groups may also distribute 35 working documents as Internet-Drafts. The list of current Internet- 36 Drafts is at https://datatracker.ietf.org/drafts/current/. 38 Internet-Drafts are draft documents valid for a maximum of six months 39 and may be updated, replaced, or obsoleted by other documents at any 40 time. It is inappropriate to use Internet-Drafts as reference 41 material or to cite them other than as "work in progress." 43 This Internet-Draft will expire on April 25, 2019. 45 Copyright Notice 47 Copyright (c) 2018 IETF Trust and the persons identified as the 48 document authors. All rights reserved. 50 This document is subject to BCP 78 and the IETF Trust's Legal 51 Provisions Relating to IETF Documents 52 (https://trustee.ietf.org/license-info) in effect on the date of 53 publication of this document. Please review these documents 54 carefully, as they describe your rights and restrictions with respect 55 to this document. Code Components extracted from this document must 56 include Simplified BSD License text as described in Section 4.e of 57 the Trust Legal Provisions and are provided without warranty as 58 described in the Simplified BSD License. 60 Table of Contents 62 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 63 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 64 2. Interfaces Extensions Overview . . . . . . . . . . . . . . . 4 65 2.1. CDNI Control Interface / Triggers Extensions . . . . . . 4 66 2.1.1. CI/T Objects . . . . . . . . . . . . . . . . . . . . 4 67 2.1.2. Trigger Specification . . . . . . . . . . . . . . . . 4 68 2.1.3. Content Selection . . . . . . . . . . . . . . . . . . 4 69 2.1.4. Trigger Extensibility . . . . . . . . . . . . . . . . 5 70 2.1.5. Error Propagation . . . . . . . . . . . . . . . . . . 5 71 2.2. CDNI Footprint and Capabilities Interface Extensions . . 6 72 3. CI/T Version 2 . . . . . . . . . . . . . . . . . . . . . . . 6 73 3.1. CI/T Objects V2 . . . . . . . . . . . . . . . . . . . . . 6 74 3.2. Properties of CI/T Version 2 objects . . . . . . . . . . 9 75 3.2.1. Trigger Specification Version 2 . . . . . . . . . . . 9 76 3.2.2. RegexMatch . . . . . . . . . . . . . . . . . . . . . 10 77 3.2.3. Playlist . . . . . . . . . . . . . . . . . . . . . . 12 78 3.2.4. MediaProtocol . . . . . . . . . . . . . . . . . . . . 13 79 3.2.5. CI/T Trigger Extensions . . . . . . . . . . . . . . . 13 80 3.2.5.1. Enforcement Options . . . . . . . . . . . . . . . 13 81 3.2.5.2. GenericExtensionObject . . . . . . . . . . . . . 16 82 3.2.6. Error Description Version 2 . . . . . . . . . . . . . 18 83 3.2.7. Error codes . . . . . . . . . . . . . . . . . . . . . 19 84 4. Trigger Extension Objects . . . . . . . . . . . . . . . . . . 19 85 4.1. LocationPolicy extension . . . . . . . . . . . . . . . . 19 86 4.2. TimePolicy Extension . . . . . . . . . . . . . . . . . . 21 87 5. Footprint and Capabilities . . . . . . . . . . . . . . . . . 23 88 5.1. CI/T Versions Capability Object . . . . . . . . . . . . . 23 89 5.1.1. CI/T Versions Capability Object Serialization . . . . 24 90 5.2. CI/T Playlist Protocol Capability Object . . . . . . . . 24 91 5.2.1. CI/T Playlist Protocol Capability Object 92 Serialization . . . . . . . . . . . . . . . . . . . . 24 94 5.3. CI/T Trigger Extension Capability Object . . . . . . . . 25 95 5.3.1. CI/T Trigger Extension Capability Object 96 Serialization . . . . . . . . . . . . . . . . . . . . 25 97 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 98 6.1. CDNI Payload Types . . . . . . . . . . . . . . . . . . . 26 99 6.1.1. CDNI ci-trigger-command.v2 Payload Type . . . . . . . 26 100 6.1.2. CDNI ci-trigger-status.v2 Payload Type . . . . . . . 27 101 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type . . . 27 102 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type . . . . . 27 103 6.1.5. CDNI FCI CI/T Versions Payload Type . . . . . . . . . 27 104 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type . . . . 27 105 6.1.7. CDNI FCI CI/T Extension Objects Payload Type . . . . 28 106 6.2. CDNI CI/T Trigger Error Codes types . . . . . . . . . . . 28 107 6.3. CDNI Media protocol types . . . . . . . . . . . . . . . . 28 108 7. Security Considerations . . . . . . . . . . . . . . . . . . . 29 109 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 29 110 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 29 111 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 112 10.1. Normative References . . . . . . . . . . . . . . . . . . 30 113 10.2. Informative References . . . . . . . . . . . . . . . . . 30 114 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 31 116 1. Introduction 118 This document defines the objects and extensions required for 119 granular content management operations. For that purpose it extends 120 CDNI Control Interface/Triggers [RFC8007]. The basic operations are 121 the ones defined in the RFC (i.e. purge, invalidate, pre-position). 122 For consistency, this document follows the CDNI notation of uCDN (the 123 commercial CDN) and dCDN (the ISP caching layer). When using the 124 term CP in this document we refer to a video content provider. 126 The CDNI metadata interface is described in [RFC8006]. 128 The CDNI footprint and capability interface is described in 129 [RFC8008]. 131 The CDNI control interface / triggers is described in [RFC8007]. 133 1.1. Terminology 135 This document reuses the terminology defined in [RFC6707], [RFC8006], 136 [RFC8007], and [RFC8008]. 138 Additionally, the following terms are used throughout this document 139 and are defined as follows: 141 o HLS - HTTP Live Streaming 142 o DASH - Dynamic Adaptive Streaming Over HTTP 144 o MSS - Microsoft Smooth Streaming 146 2. Interfaces Extensions Overview 148 This document defines extensions for the CDNI Control Interface / 149 Triggers [RFC8007] and defines FCI objects as per the CDNI Footprint 150 and Capabilities Interface [RFC8008]. 152 2.1. CDNI Control Interface / Triggers Extensions 154 2.1.1. CI/T Objects 156 This document specifies version 2 of the CI/T objects in order to 157 support version 2 of the Trigger Specification as required below in 158 Section 2.1.2. 160 2.1.2. Trigger Specification 162 This document specifies version 2 of the Trigger Specification which 163 is an enhancement of the Trigger Specification that includes all 164 properties as defined in section 5.2.1 of [RFC8007] as well as the 165 additional properties required by the use cases listed below in 166 Section 2.1.3 and Section 2.1.4. 168 2.1.3. Content Selection 170 The trigger specification as defined in section 5.2.1 of [RFC8007] 171 provides means to select content objects by matching a full content 172 URL or patterns with wildcards. This document specifies two 173 additional selection options. 175 o Regular Expression - Using regex a uCDN can create more complex 176 rules to select the content objects for the cases of invalidation 177 and purge. For example, purging specific content within a 178 specific directory path. 180 o Content Playlist - Using video playlist files, a uCDN can trigger 181 an operation that will be applied to a collection of distinct 182 media files in a format that is natural for a streaming video 183 content provider. A playlist may have several formats, 184 specifically HTTP Live Streaming (HLS) *.m3u8 manifest [RFC8216], 185 Microsoft Smooth Streaming (MSS) *.ismc client manifest [MSS], and 186 Dynamic Adaptive Streaming over HTTP (DASH) *.mpd file [ISO/IEC 187 23009-1:2014] [MPEG-DASH]. 189 2.1.4. Trigger Extensibility 191 The CDNI Control Interface / Triggers [RFC8007] defines a set of 192 objects used by the trigger commands. In order to have better 193 control and finer granularity, we define a mechanism for generic 194 trigger extension object wrapper for managing individual CDNI trigger 195 extensions in an opaque manner, as well as an initial set of trigger 196 extension objects. 198 This document also registers CDNI Payload Types [RFC7736] under the 199 namespace CIT for the initial set of trigger extension types: 201 o CIT.LocationPolicy (for controlling the locations in which the 202 trigger is executed) 204 o CIT.TimePolicy (for scheduling a trigger to run in a specific time 205 window) 207 Example use cases 209 o Pre-position with cache location policy 211 o Purge content with cache location policy 213 o Pre-position at a specific time 215 o Purge by content acquisition time (e.g. purge all content acquired 216 in the past X hours) 218 2.1.5. Error Propagation 220 As triggers may be propagated over a chain of downstream CDNs and 221 since, in some cases, triggers may be redistributed from dCDN-A to 222 dCDN-B even if dCDN-A does not understand a specific extension, it is 223 essential for the uCDN that sets the trigger to be able to trace back 224 and error to the downstream where it occurred. This document 225 specifies version 2 of the Error Description which is an enhancement 226 of the Error Description as defined in section 5.2.6 of [RFC8007] and 227 that includes all the original properties as well as the additional 228 property "cdn" which is an identifier for the faulty CDN. When a 229 downstream dCDN-A propagates a trigger to another downstream dCDN-B, 230 it MUST also propagate back the errors received in the trigger status 231 resource from dCDN-B. This makes sure that the trigger originating 232 upstream CDN will receive an array of errors that occurred in all the 233 CDNs along the execution path, each error carrying its own CDN 234 identifier. 236 2.2. CDNI Footprint and Capabilities Interface Extensions 238 Extending the trigger mechanism with optional properties requires the 239 ability for the dCDN to advertise which optional properties it 240 supports. 242 The CDNI Footprint and Capabilities Interface [RFC8008] enables the 243 dCDN to advertise the capabilities it supports across different 244 footprints. This document introduces FCI objects to support the 245 advertisement of these optional properties. 247 Example use cases 249 o Trigger types: Advertise which trigger types are supported by the 250 dCDN. CDNI defines three trigger types (purge, invalidate, pre- 251 position), but it does not necessarily mean that all dCDNs support 252 all of them. The uCDN may prefer to work only with dCDN that 253 support what the uCDN needs. 255 o Content selection rule types: Advertise which selection types are 256 supported. For example, if adding content regex as a means to 257 match on content URLs, not all dCDN would support it. For 258 playlist mapping, advertise which types and versions of protocols 259 are supported, e.g. HLS.vX/DASH.vY/MSS.vX, DASH templates. Note 260 that the version string or schema are protocol specific. 262 o Trigger extensions: Advertise which trigger extensions object 263 types are supported by the dCDN. 265 3. CI/T Version 2 267 [RFC8007] does not define a version number and versioning scheme. 268 We, therefore, designate the interface and objects as defined in 269 section 5 of [RFC8007] as version 1. The following sections define 270 version 2 of the CI/T objects and their properties as extensions of 271 version 1. 273 3.1. CI/T Objects V2 275 Version 2 of the CI/T interface requires the support of the following 276 objects: 278 o CI/T Commands v2: A trigger command request using the payload type 279 ci-trigger-command.v2. Version 2 MUST only use "trigger.v2" 280 objects as defined in Section 3.2.1, instead of "trigger" objects. 281 All other properties of the trigger command v2 are as defined in 282 section 5.1.1 of [RFC8007]. 284 o Trigger Status Resource v2: A trigger status resource response 285 using the payload type ci-trigger-status.v2. Version 2 MUST only 286 use "trigger.v2" objects as defined in Section 3.2.1, instead of a 287 "trigger" object, as well as "errors.v2" objects as defined in 288 Section 3.2.6, instead of a "errors" object All other properties 289 of the trigger status v2 are as defined in section 5.1.2 of 290 [RFC8007]. The errors array "errors.v2" is a list of all errors 291 that occurred in any of the downstream CDNs along the execution 292 path. When a downstream CDN, dCDN-A, propagates a trigger to 293 another downstream CDN, dCDN-B, it MUST also propagated back all 294 errors reported by dCDN-B in the trigger status resource and add 295 them to its own trigger status resource. 297 o Trigger Collections: The payload type ci-trigger-collection is 298 used with no changes and as defined in 5.1.3 of [RFC8007]. 300 Usage example of version 2 of trigger command 301 REQUEST: 303 POST /triggers HTTP/1.1 304 User-Agent: example-user-agent/0.1 305 Host: triggers.dcdn.example.com 306 Accept: */* 307 Content-Type: application/cdni; ptype=ci-trigger-command.v2 308 { 309 "trigger.v2": { }, 310 "cdn-path": [ "AS64496:1" ] 311 } 313 RESPONSE: 315 HTTP/1.1 201 Created 316 Date: Wed, 04 May 2016 08:48:10 GMT 317 Content-Length: 467 318 Content-Type: application/cdni; ptype=ci-trigger-status.v2 319 Location: https://triggers.dcdn.example.com/triggers/0 320 Server: example-server/0.1 322 { 323 "errors.v2": [ { }, 324 ..., 325 { } 326 ], 327 "ctime": 1462351690, 328 "etime": 1462351698, 329 "mtime": 1462351690, 330 "status": "pending", 331 "trigger.v2": { } 332 } 334 Usage example of version 2 of trigger status for the trigger created 335 in the above trigger command example: 337 REQUEST: 339 GET /triggers/0 HTTP/1.1 340 User-Agent: example-user-agent/0.1 341 Host: triggers.dcdn.example.com 342 Accept: */* 344 RESPONSE: 346 HTTP/1.1 200 OK 347 Content-Length: 467 348 Expires: Wed, 04 May 2016 08:49:10 GMT 349 Server: example-server/0.1 350 ETag: "6990548174277557683" 351 Cache-Control: max-age=60 352 Date: Wed, 04 May 2016 08:48:10 GMT 353 Content-Type: application/cdni; ptype=ci-trigger-status.v2 355 { 356 "errors.v2": [ { }, 357 ..., 358 { } 359 ], 360 "ctime": 1462351690, 361 "etime": 1462351698, 362 "mtime": 1462351690, 363 "status": "pending", 364 "trigger.v2": { } 365 } 367 3.2. Properties of CI/T Version 2 objects 369 This section defines the values that can appear in the top-level 370 objects described in Section 3.1, and their encodings. 372 3.2.1. Trigger Specification Version 2 374 Version 2 of the Trigger Specification adds the following properties 375 on top of the existing properties of the trigger specification 376 defined in section 5.2.1 of [RFC8007]. 378 Property: content.regexs 380 Description: Regexs of content URLs to which the CI/T trigger 381 command applies. 383 Type: A JSON array of RegexMatch objects (see Section 3.2.2). 385 Mandatory: No, but at least one of "metadata.*" or "content.*" 386 MUST be present and non-empty. 388 Property: content.playlists 390 Description: Playlists of content the CI/T trigger command 391 applies to. 393 Type: A JSON array of Playlist objects (see Section 3.2.3). 395 Mandatory: No, but at least one of "metadata.*" or "content.*" 396 MUST be present and non-empty. 398 Property: extensions 400 Description: Array of trigger extension data. 402 Type: Array of GenericTriggerExtension objects (see 403 Section 3.2.5.2). 405 Mandatory-to-Specify: No. The default is no extensions. 407 Example of an invalidation trigger.v2 with a list of regex objects, a 408 list of playlist objects, and extensions: 410 { 411 "trigger.v2": { 412 "type": "invalidate", 413 "content.regexs": [ ], 414 "content.playlists": [ ], 415 "extensions": [ , 726 "generic-trigger-extension-value": 727 { 728 729 }, 730 "mandatory-to-enforce": true, 731 "safe-to-redistribute": true, 732 "incomprehensible": false 733 } 735 3.2.6. Error Description Version 2 737 Version 2 of the Error Description adds the "cdn" property on top of 738 the existing properties of the trigger Error Description as defined 739 in section 5.2.6 of [RFC8007]. The "cdn" property identifies the CDN 740 in which the error have occurred. 742 Property: cdn 744 Description: The CDN PID of the CDN where the error occurred. 746 Type: A non-empty JSON string, where the string is a CDN PID as 747 defined in section 4.6 of [RFC8007]. 749 Mandatory: Yes. 751 Example of an errors.v2 with a an error of unsupported location 752 policy extension object: 754 { 755 "errors.v2": [ 756 { 757 "content.urls": [ 758 "https://newsite.example.com/index.html" 759 ], 760 "description": "unrecoginzed extension type CIT.LocationPolicy", 761 "error": "eunsupported", 762 "cdn": "AS64496:1" 763 }, 764 ] 765 } 767 3.2.7. Error codes 769 This document adds the error code "eextension" to the error codes 770 table defined in section 5.2.6 of [RFC8007]. This error code 771 designates that an error occurred while parsing a generic trigger 772 extension, or that the specific extension is not supported by the 773 CDN. A CDN that fails to parse or execute a generic extension object 774 MUST report it using the "errors.v2" array within the trigger status 775 resource, while setting the error code to "eextension" and providing 776 an appropriate description. The "eextension" error code is a 777 registered type of "CDNI CI/T Trigger Error Codes" (see Section 6.2). 779 4. Trigger Extension Objects 781 The objects defined below are intended to be used in the 782 GenericTriggerExtension object's generic-trigger-extension-value 783 field as defined in section Section 3.2.5.2, and their generic- 784 trigger-extension-type property MUST be set to the appropriate CDNI 785 Payload Type as defined in Section 6.1 . 787 4.1. LocationPolicy extension 789 A content operation may be relevant for a specific geographical 790 region, or need to be excluded from a specific region. In this case, 791 the trigger should be applied only to parts of the network that are 792 either "included" or "not excluded" by the location policy. Note 793 that the restrictions here are on the cache location rather than the 794 client location. 796 The LocationPolicy object defines which CDN or cache locations for 797 which the trigger command is relevant. 799 Example use cases: 801 o Pre-position: Certain contracts allow for pre-positioning or 802 availability of contract in all regions except for certain 803 excluded regions in the world, including caches. For example, 804 some content cannot ever knowingly touch servers in a specific 805 country, including cached content. Therefore, these regions MUST 806 be excluded from a pre-positioning operation. 808 o Purge: In certain cases, content may have been located on servers 809 in regions where the content must not reside. In such cases a 810 purge operation to remove content specifically from that region, 811 is required. 813 Object specification 814 Property: locations 816 Description: An Access List that allows or denies (blocks) the 817 trigger execution per cache location. 819 Type: Array of LocationRule objects (see Section 4.2.2.1 of 820 [RFC8006]) 822 Mandatory-to-Specify: Yes. 824 If a location policy object is not listed within the trigger command, 825 the default behavior is to execute the trigger in all available 826 caches and locations of the dCDN. 828 The trigger command is allowed, or denied, for a specific cache 829 location according to the action of the first location whose 830 footprint matches against that cache's location. If two or more 831 footprints overlap, the first footprint that matches against the 832 cache's location determines the action a CDN MUST take. If the 833 "locations" property is an empty list or if none of the listed 834 footprints match the location of a specific cache location, then the 835 result is equivalent to a "deny" action. 837 The following is an example of pre-position trigger specification 838 with a trigger-extensions array including a location policy that 839 allows the trigger execution in the US but blocks its execution in 840 Canada: 842 { 843 "trigger": { 844 "type": "preposition", 845 "content.urls": [ 846 "https://www.example.com/a/b/c/1", 847 "https://www.example.com/a/b/c/2" 848 ], 849 "extensions": [ 850 { 851 "generic-trigger-extension-type": "CIT.LocationPolicy", 852 "generic-trigger-extension-value": 853 { 854 "locations": [ 855 { 856 "action": "allow", 857 "footprints": [ 858 { 859 "footprint-type": "countrycode", 860 "footprint-value": ["us"] 861 } 862 ] 863 }, 864 { 865 "action": "deny", 866 "footprints": [ 867 { 868 "footprint-type": "countrycode", 869 "footprint-value": ["ca"] 870 } 871 ] 872 } 873 ] 874 }, 875 "mandatory-to-enforce": true, 876 "safe-to-redistribute": true, 877 "incomprehensible": false 878 } 879 ] 880 }, 881 "cdn-path": [ "AS64496:1" ] 882 } 884 4.2. TimePolicy Extension 886 A uCDN may wish to perform content management operations on the dCDN 887 in a specific schedule. The TimePolicy extensions allows the uCDN to 888 instruct the dCDN to execute the trigger command in a desired time 889 window. 891 Example use cases 893 * Pre-position: A content provider wishes to pre-populate a new 894 episode at off-peak time so that it would be ready on caches 895 (for example home caches) at prime time when the episode is 896 released for viewing. A scheduled operation enables the uCDN 897 to direct the dCDN in what time frame to execute the trigger. 898 The time values are in UNIX epoch. 900 * Regional schedule: When used in combination with the Location 901 Policy defined in Section 4.1, the uCDN can trigger separate 902 commands for different geographical regions, for each region 903 using a different schedule. This allows the uCDN to control 904 the execution time per region and, for example, direct the dCDN 905 to execute at off-peak hours, as they are defined per region. 907 Object specification 909 Property: window 911 Description: A time frame in which the trigger should be 912 executed. 914 Type: TimeWindow object (see Section 4.2.3.2 of [RFC8006]) 916 Mandatory-to-Specify: Yes. 918 If a time policy object is not listed within the trigger command, the 919 default behavior is to execute the trigger in a time frame most 920 suitable to the dCDN taking under consideration other constrains and 921 / or obligations. 923 Example of trigger specification with a scheduled time window between 924 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC: 926 POST /triggers HTTP/1.1 927 User-Agent: example-user-agent/0.1 928 Host: dcdn.example.com 929 Accept: */* 930 Content-Type: application/cdni; ptype=ci-trigger-command 931 Content-Length: 352 933 { 934 "trigger": { 935 "type": "preposition", 936 "content.urls": [ 937 "https://www.example.com/a/b/c/1", 938 "https://www.example.com/a/b/c/2" 939 ], 940 "extensions": [ 941 { 942 "generic-trigger-extension-type": "CIT.TimePolicy", 943 "generic-trigger-extension-value": 944 { 945 "window": { 946 "start": 946717200, 947 "end": 946746000 948 } 949 } 950 "mandatory-to-enforce": true, 951 "safe-to-redistribute": true, 952 "incomprehensible": false 953 } 954 ], 955 }, 956 "cdn-path": [ "AS64496:1" ] 957 } 959 5. Footprint and Capabilities 961 This section covers the FCI objects required for advertisement of the 962 extensions and properties introduced in this document. 964 5.1. CI/T Versions Capability Object 966 The CI/T versions capability object is used to indicate support for 967 one or more CI/T objects versions. Note that the default version as 968 originally defined in [RFC8007] MUST be implicitly supported 969 regardless of the versions listed in this capability object. 971 Property: versions 973 Description: A list of version numbers. 975 Type: An array of JSON strings 977 Mandatory-to-Specify: No. The default is version 1. A missing 978 or an empty versions list means that only version 1 of the 979 interface and objects is supported. 981 5.1.1. CI/T Versions Capability Object Serialization 983 The following shows an example of CI/T Versions Capability object 984 serialization for a dCDN that supports versions 2 and 2.1 of the CI/T 985 interface. 987 { 988 "capabilities": [ 989 { 990 "capability-type": "FCI.TriggerVersion", 991 "capability-value": { 992 "versions": [ "1", "2", "2.1" ] 993 }, 994 "footprints": [ 995 996 ] 997 } 998 ] 999 } 1001 5.2. CI/T Playlist Protocol Capability Object 1003 The CI/T Playlist Protocol capability object is used to indicate 1004 support for one or more MediaProtocols listed in Section 6.3 by the 1005 playlists property of the "trigger.v2" object. 1007 Property: media-protocols 1009 Description: A list of media protocols. 1011 Type: A list of MediaProtocol (from the CDNI Triggers media 1012 protocol types Section 6.3) 1014 Mandatory-to-Specify: No. The default, in case of a missing or 1015 an empty list, is none supported. 1017 5.2.1. CI/T Playlist Protocol Capability Object Serialization 1019 The following shows an example of CI/T Playlist Protocol Capability 1020 object serialization for a dCDN that supports "hls" and "dash". 1022 { 1023 "capabilities": [ 1024 { 1025 "capability-type": "FCI.TriggerPlaylistProtocol", 1026 "capability-value": { 1027 "media-protocols": ["hls", "dash"] 1028 }, 1029 "footprints": [ 1030 1031 ] 1032 } 1033 ] 1034 } 1036 5.3. CI/T Trigger Extension Capability Object 1038 The CI/T Generic Extension capability object is used to indicate 1039 support for one or more GenericExtensionObject types. 1041 Property: trigger-extension 1043 Description: A list of supported CDNI CI/T 1044 GenericExtensionObject types. 1046 Type: List of strings corresponding to entries from the "CDNI 1047 Payload Types" registry [RFC7736] that are under the CIT 1048 namespace, and that correspond to CDNI CI/T 1049 GenericExtensionObject objects. 1051 Mandatory-to-Specify: No. The default, in case of a missing or 1052 an empty list, MUST be interpreted as "no 1053 GenericExtensionObject types are supported". A non-empty list 1054 MUST be interpreted as containing "the only 1055 GenericExtensionObject types that are supported". 1057 5.3.1. CI/T Trigger Extension Capability Object Serialization 1059 The following shows an example of CI/T Trigger Extension Capability 1060 object serialization for a dCDN that supports the 1061 "CIT.LocationPolicy" and the "CIT.TimePolicy" objects. 1063 { 1064 "capabilities": [ 1065 { 1066 "capability-type": "FCI.TriggerGenericExtension", 1067 "capability-value": { 1068 "trigger-extension": ["CIT.LocationPolicy", "CIT.TimePolicy"] 1069 }, 1070 "footprints": [ 1071 1072 ] 1073 } 1074 ] 1075 } 1077 6. IANA Considerations 1079 6.1. CDNI Payload Types 1081 This document requests the registration of the following CDNI Payload 1082 Types under the IANA CDNI Payload Type registry defined in [RFC7736]: 1084 +-----------------------------+---------------+ 1085 | Payload Type | Specification | 1086 +-----------------------------+---------------+ 1087 | ci-trigger-command.v2 | RFCthis | 1088 | ci-trigger-status.v2 | RFCthis | 1089 | CIT.LocationPolicy | RFCthis | 1090 | CIT.TimePolicy | RFCthis | 1091 | FCI.TriggerVersion | RFCthis | 1092 | FCI.TriggerPlaylistProtocol | RFCthis | 1093 | FCI.TriggerGenericExtension | RFCthis | 1094 +-----------------------------+---------------+ 1096 [RFC Editor: Please replace RFCthis with the published RFC number for 1097 this document.] 1099 6.1.1. CDNI ci-trigger-command.v2 Payload Type 1101 Purpose: The purpose of this payload type is to distinguish version 2 1102 of the CI/T command (and any associated capability advertisement) 1104 Interface: CI/T 1106 Encoding: see Section 3.1 1108 6.1.2. CDNI ci-trigger-status.v2 Payload Type 1110 Purpose: The purpose of this payload type is to distinguish version 2 1111 of the CI/T status resource response (and any associated capability 1112 advertisement) 1114 Interface: CI/T 1116 Encoding: see Section 3.1 1118 6.1.3. CDNI CI/T LocationPolicy Trigger Extension Type 1120 Purpose: The purpose of this Trigger Extension type is to distinguish 1121 LocationPolicy CIT Trigger Extension objects. 1123 Interface: CI/T 1125 Encoding: see Section 4.1 1127 6.1.4. CDNI CI/T TimePolicy Trigger Extension Type 1129 Purpose: The purpose of this Trigger Extension type is to distinguish 1130 TimePolicy CI/T Trigger Extension objects. 1132 Interface: CI/T 1134 Encoding: see Section 4.2 1136 6.1.5. CDNI FCI CI/T Versions Payload Type 1138 Purpose: The purpose of this payload type is to distinguish FCI 1139 advertisement objects for CI/T Triggers Versions objects 1141 Interface: FCI 1143 Encoding: see Section 5.1.1 1145 6.1.6. CDNI FCI CI/T Playlist Protocol Payload Type 1147 Purpose: The purpose of this payload type is to distinguish FCI 1148 advertisement objects for CI/T Playlist Protocol objects 1150 Interface: FCI 1152 Encoding: see Section 5.2.1 1154 6.1.7. CDNI FCI CI/T Extension Objects Payload Type 1156 Purpose: The purpose of this payload type is to distinguish FCI 1157 advertisement objects for CI/T Extension objects 1159 Interface: FCI 1161 Encoding: see Section 5.3.1 1163 6.2. CDNI CI/T Trigger Error Codes types 1165 The IANA is requested to update the "CDNI CI/T Error Codes" 1166 subregistry (defined in section 7.3 of [RFC8007] and located at 1167 ) with the 1168 following registration: 1170 +------------+-----------------------------------+------------------+ 1171 | Error Code | Description | Specification | 1172 +------------+-----------------------------------+------------------+ 1173 | eextension | The dCDN failed to parse a | Section Section | 1174 | | generic extension object, or does | 3.2.7 of this | 1175 | | not support this extension. | document. | 1176 +------------+-----------------------------------+------------------+ 1178 6.3. CDNI Media protocol types 1180 The IANA is requested to create a new "CDNI MediaProtocol Types" 1181 subregistry in the "Content Delivery Networks Interconnection (CDNI) 1182 Parameters" registry. The "CDNI Media Protocol Types" namespace 1183 defines the valid Media Protocol object values in 1184 Section Section 3.2.4, used by the Playlist object. Additions to the 1185 MediaProtocol namespace conform to the "Specification Required" 1186 policy as defined in section 4.6 of [RFC8126], where the 1187 specification defines the MediaProtocol Type and the protocol to 1188 which it is associated. The designated expert will verify that new 1189 protocol definitions do not duplicate existing protocol definitions 1190 and prevent gratuitous additions to the namespace. 1192 The following table defines the initial MediaProtocol values 1193 corresponding to the HLS, MSS, and DASH protocols: 1195 +---------------+-------------------+---------------+---------------+ 1196 | MediaProtocol | Description | Specification | Protocol | 1197 | Type | | | Specification | 1198 +---------------+-------------------+---------------+---------------+ 1199 | hls | HTTP Live | RFCthis | RFC 8216 | 1200 | | Streaming | | [RFC8216] | 1201 | mss | Microsoft Smooth | RFCthis | MSS [MSS] | 1202 | | Streaming | | | 1203 | dash | Dynamic Adaptive | RFCthis | MPEG-DASH | 1204 | | Streaming over | | [MPEG-DASH] | 1205 | | HTTP (MPEG-DASH) | | | 1206 +---------------+-------------------+---------------+---------------+ 1208 [RFC Editor: Please replace RFCthis with the published RFC number for 1209 this document.] 1211 7. Security Considerations 1213 All security considerations listed in section 8 of [RFC8007] and 1214 section 7 of [RFC8008] apply to this document as well. 1216 This document defines the capability to use regular expression within 1217 the trigger spec for more granular content selection. The usage of 1218 regex introduced the risk of regex complexity attacks, a.k.a ReDos 1219 attacks. An attacker may be able to craft a regular expression that 1220 can exhaust server resources and may take exponential time in in the 1221 worst case. An implementation MUST protect itself by at least accept 1222 triggers only from an authenticated party over a secured connection. 1223 An implementation SHOULD also protect itself by using secure 1224 programing techniques and decline trigger commands that use 1225 potentially risky regex, such techniques are readily available in 1226 secure programming literature and are beyond the scope of this 1227 document. 1229 8. Acknowledgments 1231 TBD 1233 9. Contributors 1235 The authors would like to thank all members of the "Streaming Video 1236 Alliance" (SVA) Open Caching Working Group for their contribution in 1237 support of this document. 1239 10. References 1241 10.1. Normative References 1243 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1244 Requirement Levels", BCP 14, RFC 2119, 1245 DOI 10.17487/RFC2119, March 1997, 1246 . 1248 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 1249 Resource Identifier (URI): Generic Syntax", STD 66, 1250 RFC 3986, DOI 10.17487/RFC3986, January 2005, 1251 . 1253 [RFC8006] Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma, 1254 "Content Delivery Network Interconnection (CDNI) 1255 Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016, 1256 . 1258 [RFC8007] Murray, R. and B. Niven-Jenkins, "Content Delivery Network 1259 Interconnection (CDNI) Control Interface / Triggers", 1260 RFC 8007, DOI 10.17487/RFC8007, December 2016, 1261 . 1263 [RFC8008] Seedorf, J., Peterson, J., Previdi, S., van Brandenburg, 1264 R., and K. Ma, "Content Delivery Network Interconnection 1265 (CDNI) Request Routing: Footprint and Capabilities 1266 Semantics", RFC 8008, DOI 10.17487/RFC8008, December 2016, 1267 . 1269 [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for 1270 Writing an IANA Considerations Section in RFCs", BCP 26, 1271 RFC 8126, DOI 10.17487/RFC8126, June 2017, 1272 . 1274 [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data 1275 Interchange Format", STD 90, RFC 8259, 1276 DOI 10.17487/RFC8259, December 2017, 1277 . 1279 10.2. Informative References 1281 [MPEG-DASH] 1282 ISO, "Information technology -- Dynamic adaptive streaming 1283 over HTTP (DASH) -- Part 1: Media presentation description 1284 and segment format", ISO/IEC 23009-1:2014, Edition 2, 05 1285 2014, . 1287 [MSS] Microsoft, "[MS-SSTR]: Smooth Streaming Protocol", 1288 Protocol Revision 8.0, September 2017, 1289 . 1291 [PCRE841] Hazel, P., "Perl Compatible Regular Expressions", 1292 Version 8.41, July 2017, . 1294 [RFC6707] Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content 1295 Distribution Network Interconnection (CDNI) Problem 1296 Statement", RFC 6707, DOI 10.17487/RFC6707, September 1297 2012, . 1299 [RFC7736] Ma, K., "Content Delivery Network Interconnection (CDNI) 1300 Media Type Registration", RFC 7736, DOI 10.17487/RFC7736, 1301 December 2015, . 1303 [RFC8216] Pantos, R., Ed. and W. May, "HTTP Live Streaming", 1304 RFC 8216, DOI 10.17487/RFC8216, August 2017, 1305 . 1307 Authors' Addresses 1309 Ori Finkelman 1310 Qwilt 1311 6, Ha'harash 1312 Hod HaSharon 4524079 1313 Israel 1315 Phone: +972-72-2221647 1316 Email: orif@qwilt.com 1318 Sanjay Mishra 1319 Verizon 1320 13100 Columbia Pike 1321 Silver Spring, MD 20904 1322 USA 1324 Email: sanjay.mishra@verizon.com