CDNI Control Triggers Interface Extensions
draft-ietf-cdni-triggers-extensions-09

Document Type Active Internet-Draft (cdni WG)
Authors Ori Finkelman  , Sanjay Mishra  , Nir Baruch Sopher 
Last updated 2021-06-20
Replaces draft-finkelman-cdni-triggers-sva-extensions
Stream Internet Engineering Task Force (IETF)
Intended RFC status (None)
Formats plain text xml pdf htmlized bibtex
Stream WG state WG Document
Document shepherd No shepherd assigned
IESG IESG state I-D Exists
Consensus Boilerplate Unknown
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                       O. Finkelman
Internet-Draft                                                     Qwilt
Updates: 8007 (if approved)                                    S. Mishra
Intended status: Standards Track                                 Verizon
Expires: December 22, 2021                                     N. Sopher
                                                                   Qwilt
                                                           June 20, 2021

               CDNI Control Triggers Interface Extensions
                 draft-ietf-cdni-triggers-extensions-09

Abstract

   Open Caching architecture is a use case of Content Delivery Network
   Interconnection (CDNI) in which the commercial Content Delivery
   Network (CDN) is the upstream CDN (uCDN) and the ISP caching layer
   serves as the downstream CDN (dCDN).  This document defines
   extensions to the Content Delivery Network Interconnection (CDNI)
   Control Interface/Triggers defined in RFC 8007.  These extensions are
   derived from requirements raised by Open Caching architecture but are
   also applicable to CDNI use cases in general.

Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [RFC2119].

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on December 22, 2021.

Finkelman, et al.       Expires December 22, 2021               [Page 1]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

Copyright Notice

   Copyright (c) 2021 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.1.  Terminology . . . . . . . . . . . . . . . . . . . . . . .   4
     1.2.  Structure of this document  . . . . . . . . . . . . . . .   4
   2.  Interfaces Extensions Overview  . . . . . . . . . . . . . . .   5
     2.1.  CDNI Control Interface / Triggers Extensions  . . . . . .   5
       2.1.1.  CI/T Objects  . . . . . . . . . . . . . . . . . . . .   5
       2.1.2.  Trigger Specification . . . . . . . . . . . . . . . .   5
       2.1.3.  Content Selection . . . . . . . . . . . . . . . . . .   5
       2.1.4.  Trigger Extensibility . . . . . . . . . . . . . . . .   6
       2.1.5.  Error Handling  . . . . . . . . . . . . . . . . . . .   6
     2.2.  CDNI Footprint and Capabilities Interface Extensions  . .   7
   3.  CI/T Version 2  . . . . . . . . . . . . . . . . . . . . . . .   7
     3.1.  CI/T Objects V2 . . . . . . . . . . . . . . . . . . . . .   7
     3.2.  Error Handling V2 . . . . . . . . . . . . . . . . . . . .  10
       3.2.1.  Extension Errors  . . . . . . . . . . . . . . . . . .  10
       3.2.2.  Error propagation . . . . . . . . . . . . . . . . . .  11
     3.3.  Properties of CI/T Version 2 objects  . . . . . . . . . .  13
       3.3.1.  Trigger Specification Version 2 . . . . . . . . . . .  14
       3.3.2.  RegexMatch  . . . . . . . . . . . . . . . . . . . . .  15
       3.3.3.  Playlist  . . . . . . . . . . . . . . . . . . . . . .  16
       3.3.4.  MediaProtocol . . . . . . . . . . . . . . . . . . . .  17
       3.3.5.  CI/T Trigger Extensions . . . . . . . . . . . . . . .  17
         3.3.5.1.  Enforcement Options . . . . . . . . . . . . . . .  17
         3.3.5.2.  GenericExtensionObject  . . . . . . . . . . . . .  20
       3.3.6.  Error Description Version 2 . . . . . . . . . . . . .  22
       3.3.7.  Error codes . . . . . . . . . . . . . . . . . . . . .  24
     3.4.  Examples  . . . . . . . . . . . . . . . . . . . . . . . .  24
       3.4.1.  Invalidation with Regex . . . . . . . . . . . . . . .  24
       3.4.2.  Preposition with Playlists  . . . . . . . . . . . . .  26
       3.4.3.  Extensions with Error Propagation . . . . . . . . . .  27
   4.  Trigger Extension Objects . . . . . . . . . . . . . . . . . .  29

Finkelman, et al.       Expires December 22, 2021               [Page 2]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

     4.1.  LocationPolicy extension  . . . . . . . . . . . . . . . .  29
     4.2.  TimePolicy Extension  . . . . . . . . . . . . . . . . . .  31
       4.2.1.  UTCWindow . . . . . . . . . . . . . . . . . . . . . .  33
       4.2.2.  LocalTimeWindow . . . . . . . . . . . . . . . . . . .  34
       4.2.3.  DateLocalTime . . . . . . . . . . . . . . . . . . . .  35
         4.2.3.1.  Date and Local Time Format  . . . . . . . . . . .  35
         4.2.3.2.  Restrictions  . . . . . . . . . . . . . . . . . .  36
   5.  Footprint and Capabilities  . . . . . . . . . . . . . . . . .  36
     5.1.  CI/T Versions Capability Object . . . . . . . . . . . . .  36
       5.1.1.  CI/T Versions Capability Object Serialization . . . .  37
     5.2.  CI/T Playlist Protocol Capability Object  . . . . . . . .  37
       5.2.1.  CI/T Playlist Protocol Capability Object
               Serialization . . . . . . . . . . . . . . . . . . . .  37
     5.3.  CI/T Trigger Extension Capability Object  . . . . . . . .  38
       5.3.1.  CI/T Trigger Extension Capability Object
               Serialization . . . . . . . . . . . . . . . . . . . .  38
   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  39
     6.1.  CDNI Payload Types  . . . . . . . . . . . . . . . . . . .  39
       6.1.1.  CDNI ci-trigger-command.v2 Payload Type . . . . . . .  39
       6.1.2.  CDNI ci-trigger-status.v2 Payload Type  . . . . . . .  40
       6.1.3.  CDNI CI/T LocationPolicy Trigger Extension Type . . .  40
       6.1.4.  CDNI CI/T TimePolicy Trigger Extension Type . . . . .  40
       6.1.5.  CDNI FCI CI/T Versions Payload Type . . . . . . . . .  40
       6.1.6.  CDNI FCI CI/T Playlist Protocol Payload Type  . . . .  40
       6.1.7.  CDNI FCI CI/T Extension Objects Payload Type  . . . .  41
     6.2.  CDNI CI/T Trigger Error Codes types . . . . . . . . . . .  41
     6.3.  CDNI Media protocol types . . . . . . . . . . . . . . . .  41
   7.  Security Considerations . . . . . . . . . . . . . . . . . . .  42
   8.  Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .  42
   9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  42
     9.1.  Normative References  . . . . . . . . . . . . . . . . . .  42
     9.2.  Informative References  . . . . . . . . . . . . . . . . .  44
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  44

1.  Introduction

   The Streaming Video Alliance [SVA] is a global association that works
   to solve streaming video challenges in an effort to improve end-user
   experience and adoption.  The Open Caching Working Group [OCWG] of
   the Streaming Video Alliance [SVA] is focused on the delegation of
   video delivery requests from commerical CDNs to a caching layer at
   the ISP's network.  Open Caching architecture is a specific use case
   of CDNI where the commercial CDN is the upstream CDN (uCDN) and the
   ISP caching layer is the downstream CDN (dCDN).  The Open Caching
   Content Management Operations Specification [OC-CM] defines objects
   and extensions required by Open Caching architecture for granular
   content management operations.  This document adds those extensions
   to the CDNI Control Interface / Triggers [RFC8007] as required for

Finkelman, et al.       Expires December 22, 2021               [Page 3]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   Open Caching content management options.  This document also
   specifies a generic extension mechanism to enable adding future
   functions for controlling the trigger execution>.

   The CDNI Metadata Interface is described in [RFC8006].

   The CDNI Footprint and Capability Interface is described in
   [RFC8008].

   The CDNI Control Interface / Triggers is described in [RFC8007].

   For consistency with other CDNI documents, this document follows the
   CDNI convention of uCDN (upstream CDN) and dCDN (downstream CDN) as
   described in [RFC6707] to represent the commercial CDN and ISP
   caching layer, respectively.

1.1.  Terminology

   This document reuses the terminology defined in [RFC6707], [RFC7736]
   [RFC8006], [RFC8007], and [RFC8008].

   Additionally, the following terms are used throughout this document
   and are defined as follows:

   o  HLS - HTTP Live Streaming

   o  DASH - Dynamic Adaptive Streaming Over HTTP

   o  MSS - Microsoft Smooth Streaming

1.2.  Structure of this document

   The remainder of this document is organized as follows:

   o  Section 2 gives an overview of the extensions specified in this
      document.

   o  Section 3 specifies version 2 of the CDNI Control Interface /
      Triggers.

   o  Section 4 specifies an initial set of trigger extension objects.

   o  Section 5 specifies Footprint and Capability objects for CI/T
      version and extensions.

   o  Section 6 list the IANA considerations of this document.

Finkelman, et al.       Expires December 22, 2021               [Page 4]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   o  Section 7 describes the security considerations for the specified
      properties and extensions.

2.  Interfaces Extensions Overview

   This document defines extensions for the CDNI Control Interface /
   Triggers (CI/T) [RFC8007] and defines FCI objects as per the CDNI
   Footprint and Capabilities Interface [RFC8008].

2.1.  CDNI Control Interface / Triggers Extensions

2.1.1.  CI/T Objects

   This document specifies version 2 of the CI/T commands and objects.
   In this context the CI/T commands and objects as were specified in
   [RFC8007] are considered to be version 1.

2.1.2.  Trigger Specification

   This document specifies version 2 of the Trigger Specification which
   is an enhancement of the Trigger Specification that includes all
   properties as defined in Section 5.2.1 of [RFC8007] as well as the
   additional properties required by the use cases listed below in
   Section 2.1.3 and Section 2.1.4.

2.1.3.  Content Selection

   The trigger specification as defined in Section 5.2.1 of [RFC8007]
   provides means to select content objects by matching a full content
   URL or patterns with wildcards.  This document specifies two
   additional selection options:

   o  Regular Expression - Using regex, a uCDN can create more complex
      rules to select the content objects for the cases of
      "invalidation" and "purge".  For example, purging specific content
      within a specific directory path.

   o  Content Playlist - Using video playlist files, a uCDN can trigger
      an operation that will be applied to a collection of distinct
      media files in a format that is natural for a streaming video
      content provider.  A playlist may have several formats,
      specifically HTTP Live Streaming (HLS) *.m3u8 manifest [RFC8216],
      Microsoft Smooth Streaming (MSS) *.ismc client manifest [MSS], and
      Dynamic Adaptive Streaming over HTTP (DASH) *.mpd file [ISO/IEC
      23009-1:2014] [MPEG-DASH].

Finkelman, et al.       Expires December 22, 2021               [Page 5]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

2.1.4.  Trigger Extensibility

   The CDNI Control Interface / Triggers [RFC8007] defines a set of
   properties and objects used by the trigger commands.  In this
   document we define an extension mechanism to the triggers interface
   that enables the application to add various functions that allow
   finer control over the trigger execution.  This document specifies a
   generic trigger extension object wrapper for managing individual CDNI
   trigger extensions in an opaque manner.

   This document also registers CDNI Payload Types [RFC7736] under the
   namespace CIT for the initial set of trigger extension types:

   o  CIT.LocationPolicy (for controlling the locations in which the
      trigger is executed)

   o  CIT.TimePolicy (for scheduling a trigger to run in a specific time
      window)

   Example use cases

   o  Pre-position with cache location policy

   o  Purge content with cache location policy

   o  Pre-position at a specific time

   o  Purge by content acquisition time (e.g. purge all content acquired
      in the past X hours)

2.1.5.  Error Handling

   This document extends the CI/T Error Handling (see Section 4.7 of
   [RFC8007]) to support the following:

   o  Playlists and Regexs - report errors that happened due to specific
      playlists and/or regexs.

   o  Extension errors - report an error that happened due to an
      extension object.

   o  Error propagation - enable the uCDN to traceback an error to the
      dCDN in which it occurred.

Finkelman, et al.       Expires December 22, 2021               [Page 6]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

2.2.  CDNI Footprint and Capabilities Interface Extensions

   Extending the trigger mechanism with optional properties requires the
   ability for the dCDN to advertise which optional properties it
   supports.

   The CDNI Footprint and Capabilities Interface [RFC8008] enables the
   dCDN to advertise the capabilities it supports across different
   footprints.  This document introduces FCI objects to support the
   advertisement of these optional properties.

   Example use cases

   o  Trigger types: Advertise which trigger types are supported by the
      dCDN.  CDNI defines three trigger types (purge, invalidate, pre-
      position), but it does not necessarily mean that all dCDNs support
      all of them.  The uCDN may prefer to work only with dCDN that
      support what the uCDN needs.

   o  Content selection rule types: Advertise which selection types are
      supported.  For example, if adding content regex as a means to
      match on content URLs, not all dCDN would support it.  For
      playlist mapping, advertise which types and versions of protocols
      are supported, e.g.  HLS.vX/DASH.vY/MSS.vX, DASH templates.  Note
      that the version string or schema are protocol specific.

   o  Trigger extensions: Advertise which trigger extensions object
      types are supported by the dCDN.

3.  CI/T Version 2

   [RFC8007] does not define a version number and versioning scheme.
   We, therefore, designate the interface and objects as defined in
   Section 5 of [RFC8007] as version 1.  The following sections define
   version 2 of the CI/T objects and their properties as extensions of
   version 1.

3.1.  CI/T Objects V2

   Version 2 of the CI/T interface requires the support of the following
   objects:

   o  CI/T Commands v2: A trigger command request using the payload type
      ci-trigger-command.v2.  Version 2 MUST only use "trigger.v2"
      objects as defined in Section 3.3.1, instead of "trigger" objects.
      All other properties of the trigger command v2 are as defined in
      Section 5.1.1 of [RFC8007].

Finkelman, et al.       Expires December 22, 2021               [Page 7]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   o  Trigger Status Resource v2: A trigger status resource response
      using the payload type ci-trigger-status.v2.  Version 2 MUST only
      use "trigger.v2" objects as defined in Section 3.3.1, instead of a
      "trigger" object, as well as "errors.v2" array as defined in
      Section 3.3.6, instead of a "errors" array.  All other properties
      of the trigger status v2 are as defined in Section 5.1.2 of
      [RFC8007].  The errors array "errors.v2" is a list of all errors
      that occurred in any of the downstream CDNs along the execution
      path.  When a downstream CDN, dCDN-A, propagates a trigger to
      another downstream CDN, dCDN-B, it MUST also propagate back all
      errors reported by dCDN-B in the trigger status resource and add
      them to its own trigger status resource.

   o  Trigger Collections: The payload type ci-trigger-collection is
      used with no changes and as defined in 5.1.3 of [RFC8007].

   Usage example of version 2 of trigger command

Finkelman, et al.       Expires December 22, 2021               [Page 8]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   REQUEST:

     POST /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: triggers.dcdn.example.com
     Accept: */*
     Content-Type: application/cdni; ptype=ci-trigger-command.v2
     {
       "trigger.v2": { <properties of a trigger.v2 object> },
       "cdn-path": [ "AS64496:0" ]
     }

   RESPONSE:

     HTTP/1.1 201 Created
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Length: 467
     Content-Type: application/cdni; ptype=ci-trigger-status.v2
     Location: https://triggers.dcdn.example.com/triggers/0
     Server: example-server/0.1

     {
        "errors.v2": [ { <properties of 1st error.v2 object> },
                         ...,
                       { <properties of Nth error.v2 object> }
        ],
        "ctime": 1462351690,
        "etime": 1462351698,
        "mtime": 1462351690,
        "status": "pending",
        "trigger.v2": { <properties of a trigger.v2 object> }
     }

   Usage example of version 2 of trigger status for the trigger created
   in the above trigger command example:

Finkelman, et al.       Expires December 22, 2021               [Page 9]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   REQUEST:

     GET /triggers/0 HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: triggers.dcdn.example.com
     Accept: */*

   RESPONSE:

     HTTP/1.1 200 OK
     Content-Length: 467
     Expires: Wed, 04 May 2016 08:49:10 GMT
     Server: example-server/0.1
     ETag: "6990548174277557683"
     Cache-Control: max-age=60
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Type: application/cdni; ptype=ci-trigger-status.v2

     {
        "errors.v2": [ { <properties of 1st error.v2 object> },
                         ...,
                       { <properties of Nth error.v2 object> }
        ],
        "ctime": 1462351690,
        "etime": 1462351698,
        "mtime": 1462351690,
        "status": "pending",
        "trigger.v2": { <properties of a trigger.v2 object> }
     }

3.2.  Error Handling V2

   The CDNI CI/T interface defines a mechanism for error reporting (see
   Section 4.7 of [RFC8007]) and an Error Description object for
   reporting errors (see Section 5.2.6 of [RFC8007]).  This document
   specifies version 2 of CI/T error handling in order to support the
   following:

3.2.1.  Extension Errors

   Report an error that occures due to an extension object.  As
   extension objects are expected to be added to the interface whenever
   new requirement comes along, it is expected that in some cases a dCDN
   may receive a trigger that it cannot process or it does not
   understand.  It is therefore essential for the trigger caller to be
   able to know when such errors occur so they can take actions to fix
   them.  This document adds a mechanism to report extension errors.

Finkelman, et al.       Expires December 22, 2021              [Page 10]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

3.2.2.  Error propagation

   This subsection explains the mechanism for enabling the uCDN to
   traceback an error to the dCDN in which it occurred.  CDNI triggers
   may be propagated over a chain of downstream CDNs.  For example, an
   upstream CDN A (uCDN-A) that is delegating to a downstream CDN B
   (dCDN-B) and dCDN-B is delegating to a downstream CDN C (dCDN-C).
   Triggers sent from uCDN-A to dCDN-B may be redistributed from dCDN-B
   to dCDN-C and errors can occur anywhere along the path.  Therefore,
   it might be essential for uCDN-A that sets the trigger, to be able to
   trace back an error to the downstream CDN where it occurred.  This
   document adds a mechanism to propagate the CDN Provider ID (PID) of
   the dCDN where the fault occured, back to the uCDN by adding the PID
   to the error description.  When dCDN-B propagates a trigger to the
   further downstream dCDN-C, it MUST also propagate back the errors
   received in the trigger status resource from dCDN-C by adding them to
   the errors array in its own status resource to be sent back to the
   originating uCDN-A.  While propagating back the errors, and depending
   on the implementation, dCDN-B MAY also specify the dCDN-C PID,
   indicating to which CDN the error relates spefically.  The trigger
   originating upstream CDN will receive an array of errors that
   occurred in all the CDNs along the execution path, where each error
   MAY be carrying its own CDN identifier.

   Figure 1 below is an example showing the message flow used by uCDN-A
   to trigger activity in the dCDN-B, followed by dCDN-C, as well as the
   discovery of the status of that activity, including the Error
   Propagation.

   uCDN-A                         dCDN-B                         dCDN-C
    |                              |                              |
    | (1) POST                     |                              |
    | https://dcdn-b.example.com   |                              |
    | /triggers/uCDN-A             |                              |
   [ ]--------------------------->[ ]--+                          |
    |                             [ ]  | (2)                      |
    |                             [ ]<-+                          |
    | (3) HTTP 201 Response.      [ ]                             |
    |<----------------------------[ ]                             |
    | Loc:                        [ ]                             |
    | https://dcdn-b.example.com  [ ] (4) POST                    |
    | /triggers/uCDN-A/123        [ ] https://dcdn-c.example.com  |
    |                             [ ] /triggers/uCDN-A            | (5)
    |                             [ ]--------------------------->[ ]--+
    |                              |                             [ ]  |
    |                              |                             [ ]<-+
    |                              | (6) HTTP 201 Response.      [ ]
    |                             [ ]<---------------------------[ ]

Finkelman, et al.       Expires December 22, 2021              [Page 11]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

    |                              |  Loc:                        |
    |                              |  https://dcdn-c.example.com  |
    |                              |  /triggers/dCDN-B/456        |
    |                              |                              |
    |                             [ ]--+                          |
    |                             [ ]  | (7.1)                    |
    |                             [ ]<-+                         [ ]--+
    |                              |                       (7.2) [ ]  |
    |                              |                             [ ]<-+
    |                              |                              |
    .                              .                              .
    .                              .                              .
    .                              .                              .
    |                              | (8) GET                      |
    |                              | https://dcdn-c.example.com   |
    |                              | /triggers/dCDN-B/456         |
    |                             [ ]--------------------------->[ ]
    |                              |                             [ ]
    |                              | (9) HTTP 200                [ ]
    |                              | Trigger Status Resource     [ ]
    |                             [ ]<---------------------------[ ]
    |                              |                              |
    .                              .                              .
    .                              .                              .
    .                              .                              .
    | (10) GET                     |                              |
    | https://dcdn-b.example.com   |                              |
    | /triggers/uCDN-A/123         |                              |
   [ ]--------------------------->[ ]                             |
    |                             [ ]                             |
    | (11) HTTP 200               [ ]                             |
    | Trigger Status Resource     [ ]                             |
   [ ]<---------------------------[ ]                             |

   Figure 1: CDNI Message Flow for Triggers, Including Error Propagation

   The steps in Figure 1 are as follows:

   1.   The uCDN-A triggers action in the dCDN-B by POSTing a CI/T
        Command to a collection of Trigger Status Resources
        "https://dcdn-b.example.com/triggers/uCDN-A".  This URL was
        given to the uCDN-A when the CI/T interface was established.

   2.   The dCDN-B authenticates the request, validates the CI/T
        Command, and, if it accepts the request, creates a new Trigger
        Status Resource.

Finkelman, et al.       Expires December 22, 2021              [Page 12]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   3.   The dCDN-B responds to the uCDN-A with an HTTP 201 response
        status and the location of the Trigger Status Resource.

   4.   The dCDN-B triggers the action in the dCDN-C by POSTing a CI/T
        Command to a collection of Trigger Status Resources
        "https://dcdn-c.example.com/triggers/dCDN-B".  This URL was
        given to the uCDN-A when the CI/T interface was established.

   5.   The dCDN-C authenticates the request, validates the CI/T
        Command, and, if it accepts the request, creates a new Trigger
        Status Resource.

   6.   The dCDN-C responds to the dCDN-B with an HTTP 201 response
        status and the location of the Trigger Status Resource.

   7.   The dCDN-C acts upon the CI/T Command.  However, the command
        fails at dCDN-C as, for example, the Tigger Specification
        contains a "type" that is not supported by dCDN-C.

   8.   The dCDN-B can poll, possibly repeatedly, the Trigger Status
        Resource in dCDN-C.

   9.   The dCDN-C responds with the Trigger Status Resource, describing
        the progress or results of the CI/T Trigger Command.  In the
        described flow, the returned Status is "failed", with an Error
        Description Object holding an "eunsupported" Error Code
        reflecting the status response.

   10.  The uCDN-A can poll, possibly repeatedly, the Trigger Status
        Resource in dCDN-B.

   11.  The dCDN-B responds with the Trigger Status Resource, describing
        the progress or results of the CI/T Trigger Command.  In the
        flow described above, the returned Status is "failed", and the
        "eunsupported" error received in the trigger status resource
        from dCDN-C is propagated along with dCDN-C PID by adding it to
        the errors array in dCDN-B's own status resource to be sent back
        to the originating uCDN-A.

3.3.  Properties of CI/T Version 2 objects

   This section defines the values that can appear in the top-level
   objects described in Section 3.1, and their encodings.

Finkelman, et al.       Expires December 22, 2021              [Page 13]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

3.3.1.  Trigger Specification Version 2

   Version 2 of the Trigger Specification adds the following properties
   on top of the existing properties of the trigger specification
   defined in Section 5.2.1 of [RFC8007].

      Property: content.regexs

         Description: Regexs of content URLs to which the CI/T trigger
         command applies.

         Type: A JSON array of RegexMatch objects (see Section 3.3.2).

         Mandatory: No, but at least one of "metadata.*" or "content.*"
         MUST be present and non-empty.

      Property: content.playlists

         Description: Playlists of content the CI/T trigger command
         applies to.

         Type: A JSON array of Playlist objects (see Section 3.3.3).

         Mandatory: No, but at least one of "metadata.*" or "content.*"
         MUST be present and non-empty.

      Property: extensions

         Description: Array of trigger extension data.

         Type: Array of GenericTriggerExtension objects (see
         Section 3.3.5.2).

         Mandatory: No.  The default is no extensions.

   Example of a JSON serialized invalidation trigger.v2 object with a
   list of regex objects, a list of playlist objects, and extensions:

   {
     "trigger.v2": {
       "type": "invalidate",
       "content.regexs": [ <list of RegexMatch objects> ],
       "content.playlists": [ <list of Playlist objects> ],
       "extensions": [ <list of GenericTriggerExtension objects ]
     },
     "cdn-path": [ "AS64496:0" ]
   }

Finkelman, et al.       Expires December 22, 2021              [Page 14]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

3.3.2.  RegexMatch

   A RegexMatch consists of a regular expression string a URI is matched
   against, and flags describing the type of match.  It is encoded as a
   JSON object with following properties:

      Property: regex

         Description: A regular expression for URI matching.

         Type: A regular expression to match against the URI, i.e
         against the path-absolute and the query string parameters
         [RFC3986].  The regular expression string MUST be compatible
         with PCRE [PCRE841].

         Note: Because '\' has a special meaning in JSON [RFC8259] as
         the escape character within JSON strings, the regular
         expression character '\' MUST be escaped as '\\'.

         Mandatory: Yes.

      Property: case-sensitive

         Description: Flag indicating whether or not case-sensitive
         matching should be used.

         Type: JSON boolean.  Either "true" (the matching is case
         sensitive) or "false" (the matching is case insensitive).

         Mandatory: No; default is case-insensitive match (i.e., a value
         of "false").

      Property: match-query-string

         Description: Flag indicating whether to include the query part
         of the URI when comparing against the regex.

         Type: JSON boolean.  Either "true" (the full URI, including the
         query part, should be compared against the regex) or "false"
         (the query part of the URI should be dropped before comparison
         with the given regex).

         Mandatory: No; default is "false".  The query part of the URI
         MUST be dropped before comparison with the given regex.  This
         makes the regular expression simpler and safer for cases in
         which the query parameters are not relevant for the match.

Finkelman, et al.       Expires December 22, 2021              [Page 15]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   Example of a case sensitive, no query parameters, regex match
   against:

   "^(https:\/\/video\.example\.com)\/([a-z])\/
    movie1\/([1-7])\/*(index.m3u8|\d{3}.ts)$"

   {
     "regex": "^(https:\\/\\/video\\.example\\.com)\\/([a-z])\\/movie1\
              \/([1-7])\\/*(index.m3u8|\\d{3}.ts)$",
     "case-sensitive": true,
     "match-query-string": false
   }

   This regex matches URLs of domain video.example.com where the path
   structure is /(single lower case letter)/(name-of-title)/(single
   digit between 1 to 7)/(index.m3u8 or a 3 digit number with ts
   extension).  For example:

   https://video.example.com/d/movie1/5/index.m3u8
   or
   https://video.example.com/k/movie1/4/013.ts

3.3.3.  Playlist

   A Playlist consists of a full URL and a media protocol identifier.
   An implementation that supports a specific playlist media protocol
   MUST be able to parse playlist files of that protocol type and
   extract, possibly recursively, the URLs to all media objects and/or
   sub playlist files, and apply the trigger to each one of them
   separately.

   Playlist is encoded as a JSON object with following properties:

      Property: playlist

         Description: A URL to the playlist file.

         Type: A URL represented as a JSON string.

         Mandatory: Yes.

      Property: media-protocol

         Description: Media protocol to be when parsing and interpreting
         this playlist.

         Type: MediaProtocol (see Section 3.3.4).

Finkelman, et al.       Expires December 22, 2021              [Page 16]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

         Mandatory: Yes.

   Example of a JSON serialized HLS playlist object:

   {
     "playlist": "https://www.example.com/hls/title/index.m3u8",
     "media-protocol": "hls"
   }

3.3.4.  MediaProtocol

   Media Protocol objects are used to specify registered type of media
   protocol (see Section 6.3) used for protocol related operations like
   pre-position according to playlist.

   Type: JSON string

   Example:

   "dash"

3.3.5.  CI/T Trigger Extensions

   A "trigger.v2" object, as defined in Section 3.3.1 includes an
   optional array of trigger extension objects.  A trigger extension
   contain properties that are used as directives for dCDN when
   executing the trigger command -- for example, location policies, time
   policies and so on.  Each such CDNI Trigger extension is a
   specialization of a CDNI GenericTriggerExtension object.  The
   GenericTriggerExtension object abstracts the basic information
   required for trigger distribution from the specifics of any given
   property (i.e., property semantics, enforcement options, etc.).  All
   trigger extensions are optional, and it is thus the responsibility of
   the extension specification to define a consistent default behavior
   for the case the extension is not present.

3.3.5.1.  Enforcement Options

   The trigger enforcement options concept is in accordance with the
   metadata enforcement options as defined in Section 3.2 of [RFC8006].

   The GenericTriggerExtension object defines the properties contained
   within it as well as whether or not the properties are "mandatory-to-
   enforce".  If the dCDN does not understand or support a mandatory-to-
   enforce property, the dCDN MUST NOT execute the trigger command.  If
   the extension is not mandatory-to-enforce, then that
   GenericTriggerExtension object can be safely ignored and the trigger

Finkelman, et al.       Expires December 22, 2021              [Page 17]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   command can be processed in accordance with the rest of the CDNI
   Trigger spec.

   Although, a CDN MUST NOT execute a trigger command if a mandatory-to-
   enforce extension cannot be enforced, it could still be safe to
   redistribute that trigger (the "safe-to-redistribute" property) to
   another CDN without modification.  For example, in the cascaded CDN
   case, a transit CDN (tCDN) could convey mandatory-to-enforce trigger
   extension to a dCDN.  For a trigger extension that does not require
   customization or translation (i.e., trigger extension that is safe-
   to-redistribute), the data representation received off the wire MAY
   be stored and redistributed without being understood or supported by
   the tCDN.  However, for trigger extension that requires translation,
   transparent redistribution of the uCDN trigger values might not be
   appropriate.  Certain triggers extensions can be safely, though
   perhaps not optimally, redistributed unmodified.  For example, pre-
   position command might be executed in suboptimal times for some
   geographies if transparently redistributed, but it might still work.

   Redistribution safety MUST be specified for each
   GenericTriggerExtension property.  If a CDN does not understand or
   support a given GenericTriggerExtension property that is not safe-to-
   redistribute, the CDN MUST set the "incomprehensible" flag to true
   for that GenericTriggerExtension object before redistributing it.
   The "incomprehensible" flag signals to a dCDN that trigger metadata
   was not properly transformed by the tCDN.  A CDN MUST NOT attempt to
   execute a trigger with an extension that has been marked as
   "incomprehensible" by a uCDN.

   tCDNs MUST NOT change the value of mandatory-to-enforce or safe-to-
   redistribute when propagating a trigger to a dCDN.  Although a tCDN
   can set the value of "incomprehensible" to true, a tCDN MUST NOT
   change the value of "incomprehensible" from true to false.

   Table 1 describes the action to be taken by a tCDN for the different
   combinations of mandatory-to-enforce ("MtE") and safe-to-redistribute
   ("StR") properties when the tCDN either does or does not understand
   the trigger extension object in question:

Finkelman, et al.       Expires December 22, 2021              [Page 18]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   +-------+-------+------------+--------------------------------------+
   | MtE   | StR   | Extension  | Trigger action                       |
   |       |       | object     |                                      |
   |       |       | understood |                                      |
   |       |       | by tCDN    |                                      |
   +-------+-------+------------+--------------------------------------+
   | False | True  | True       | Can execute and redistribute.        |
   | False | True  | False      | Can execute and redistribute.        |
   | False | False | False      | Can execute. MUST set                |
   |       |       |            | "incomprehensible" to true when      |
   |       |       |            | redistributing.                      |
   | False | False | True       | Can execute. Can redistribute after  |
   |       |       |            | transforming the trigger extension   |
   |       |       |            | (if the CDN knows how to do so       |
   |       |       |            | safely); otherwise, MUST set         |
   |       |       |            | "incomprehensible" to true when      |
   |       |       |            | redistributing.                      |
   | True  | True  | True       | Can execute and redistribute.        |
   | True  | True  | False      | MUST NOT execute but can             |
   |       |       |            | redistribute..                       |
   | True  | False | True       | Can execute. Can redistribute after  |
   |       |       |            | transforming the trigger extension   |
   |       |       |            | (if the CDN knows how to do so       |
   |       |       |            | safely); otherwise, MUST set         |
   |       |       |            | "incomprehensible" to true when      |
   |       |       |            | redistributing.                      |
   | True  | False | False      | MUST NOT serve.  MUST set            |
   |       |       |            | "incomprehensible" to true when      |
   |       |       |            | redistributing.                      |
   +-------+-------+------------+--------------------------------------+

   Table 1: Action to be taken by a tCDN for the different combinations
                         of MtE and StR properties

   Table 2 describes the action to be taken by a dCDN for the different
   combinations of mandatory-to-enforce and "incomprehensible"
   ("Incomp") properties, when the dCDN either does or does not
   understand the trigger extension object in question:

Finkelman, et al.       Expires December 22, 2021              [Page 19]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   +-------+--------+---------------+----------------------------------+
   | MtE   | Incomp | Extension     | Trigger action                   |
   |       |        | object        |                                  |
   |       |        | understood by |                                  |
   |       |        | dCDN          |                                  |
   +-------+--------+---------------+----------------------------------+
   | False | False  | True          | Can execute.                     |
   | False | True   | True          | Can execute but MUST NOT         |
   |       |        |               | interpret/apply any trigger      |
   |       |        |               | extension marked as              |
   |       |        |               | "incomprehensible".              |
   | False | False  | False         | Can execute.                     |
   | False | True   | False         | Can execute but MUST NOT         |
   |       |        |               | interpret/apply any trigger      |
   |       |        |               | extension marked as              |
   |       |        |               | "incomprehensible".              |
   | True  | False  | True          | Can execute.                     |
   | True  | True   | True          | MUST NOT execute.                |
   | True  | False  | False         | MUST NOT execute.                |
   | True  | True   | False         | MUST NOT execute.                |
   +-------+--------+---------------+----------------------------------+

   Table 2: Action to be taken by a dCDN for the different combinations
                       of MtE and Incomp properties

3.3.5.2.  GenericExtensionObject

   A GenericTriggerExtension object is a wrapper for managing individual
   CDNI Trigger extensions in an opaque manner.

      Property: generic-trigger-extension-type

         Description: Case-insensitive CDNI Trigger extension object
         type.

         Type: String containing the CDNI Payload Type [RFC7736] of the
         object contained in the generic-trigger-extension-value
         property (see table in Section 6.1).

         Mandatory: Yes.

      Property: generic-trigger-extension-value

         Description: CDNI Trigger extension object.

         Type: Format/Type is defined by the value of the generic-
         trigger-extension-type property above.

Finkelman, et al.       Expires December 22, 2021              [Page 20]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

         Mandatory: Yes.

      Property: mandatory-to-enforce

         Description: Flag identifying whether or not the enforcement of
         this trigger extension is mandatory.

         Type: Boolean

         Mandatory: No.  Default is to treat the trigger extension as
         mandatory-to-enforce (i.e., a value of True).

      Property: safe-to-redistribute

         Description: Flag identifying whether or not this trigger
         extension can be safely redistributed without modification,
         even if the CDN fails to understand the extension.

         Type: Boolean

         Mandatory: No.  Default is to allow transparent redistribution
         (i.e., a value of True).

      Property: incomprehensible

         Description: Flag identifying whether or not any CDN in the
         chain of delegation has failed to understand and/or failed to
         properly transform this trigger extension object.  Note: This
         flag only applies to trigger extension objects whose safe-to-
         redistribute property has a value of False.

         Type: Boolean

         Mandatory: No.  Default is comprehensible (i.e., a value of
         False).

   Example of a JSON serialized GenericTriggerExtension object
   containing a specific trigger extension object:

Finkelman, et al.       Expires December 22, 2021              [Page 21]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   {
     "generic-trigger-extension-type":
        <Type of this trigger extension object>,
     "generic-trigger-extension-value":
         {
           <properties of this trigger extension object>
         },
     "mandatory-to-enforce": true,
     "safe-to-redistribute": true,
     "incomprehensible": false
   }

3.3.6.  Error Description Version 2

   Version 2 of the Error Description adds the "content.playlists",
   "content.regexs", "extensions" and "cdn" properties on top of the
   existing properties of version 1 of the trigger Error Description as
   defined in Section 5.2.6 of [RFC8007].

      Properties: content.regexs, content.playlists

         Description: Content Regex and Playlist references copied from
         the Trigger Specification.  Only those regexs and playlists to
         which the error applies are included in each property, but
         those references MUST be exactly as they appear in the request;
         the dCDN MUST NOT change or generalize the URLs or Regexs.
         Note that these properties are added on top of the already
         existing properties: "metadata.urls", "content.urls",
         "metadata.patterns" and "content.patterns".

         Type: A JSON array of JSON strings, where each string is copied
         from a "content.regexs" or "content.playlists" value in the
         corresponding Trigger Specification.

         Mandatory: At least one of "content.regexs",
         "content.playlists", "metadata.urls", "content.urls",
         "metadata.patterns" or "content.patterns" is mandatory in each
         Error Description object.

      Property: extensions

         Description: Array of trigger extension objects copied from the
         corresponding "extensions" array from the Trigger
         Specification.  Only those extensions to which the error
         applies are included, but those extensions MUST be exactly as
         they appear in the request.

Finkelman, et al.       Expires December 22, 2021              [Page 22]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

         Type: Array of GenericTriggerExtension objects, where each
         extension object is copied from the "extensions" array values
         in the Trigger Specification.

         Mandatory: No.  The "extensions" array SHOULD be used only if
         the error relates to extension objects.

      Property: cdn

         Description: The CDN PID of the CDN where the error occurred.
         The "cdn" property is used by the originating uCDN or by
         propagating dCDN in order to distinguish in which CDN the error
         occured.

         Type: A non-empty JSON string, where the string is a CDN PID as
         defined in Section 4.6 of [RFC8007].

         Mandatory: Yes. In the case the dCDN does not like to expose
         this information, it should provide its own CDN PID.

   Example of a JSON serialized Error Description object reporting a
   malformed Playlist:

   {
      "content.playlists": [
         {
           "playlist": "https://www.example.com/hls/title/index.m3u8",
           "media-protocol": "hls"
         }
       ],
      "description": "Failed to parse HLS playlist",
      "error": "econtent",
      "cdn": "AS64500:0"
   },

   Example of a JSON serialized Error Description object reporting an
   unsupported extension object:

Finkelman, et al.       Expires December 22, 2021              [Page 23]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   {
     "errors.v2": [
      {
        "extensions": [
          {
           "generic-trigger-extension-type":
             <Type of this erroneous trigger extension object>,
           "generic-trigger-extension-value":
             {
              <properties of this erroneous trigger extension object>
             },
          }
        ],
        "description": "unrecognized extension <type>",
        "error": "eextension",
        "cdn": "AS64500:0"
      },
     ]
   }

3.3.7.  Error codes

   This document adds the error code "eextension" to the error codes
   table defined in Section 5.2.6 of [RFC8007].  This error code
   designates that an error occurred while parsing a generic trigger
   extension, or that the specific extension is not supported by the
   CDN.  A CDN that fails to execute a trigger due a generic extension
   object which is "mandatory-to-enforce" MUST report it using the
   "errors.v2" array within the trigger status resource, while setting
   the error code to "eextension" and providing an appropriate
   description.  The "eextension" error code is a registered type of
   "CDNI CI/T Trigger Error Codes" (see Section 6.2).

3.4.  Examples

   The following subsections provides usage examples of the specified
   interface extensions being used by the trigger command and status
   resource.

3.4.1.  Invalidation with Regex

   In the following example a CI/T "invalidate" command uses the Regex
   property to specify the range of content objects for invalidation,
   the command is rejected by the dCDN due to regex complexity, and an
   appropriate error is reflected in the status response.

   REQUEST:

Finkelman, et al.       Expires December 22, 2021              [Page 24]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

     POST /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: triggers.dcdn.example.com
     Accept: */*
     Content-Type: application/cdni; ptype=ci-trigger-command.v2
     {
       "trigger.v2": {
         "type": "invalidate",
         "content.regexs": [
           {
             "regex": "^(https:\\/\\/video\\.example\\.com)\\/
             ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$",
             "case-sensitive": true,
             "match-query-string": false
           },
           { <RegexMatch #2> },
           ...
           { <RegexMatch #N> },
         ],
       },
       "cdn-path": [ "AS64496:0" ]
     }

   RESPONSE:

     HTTP/1.1 201 Created
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Length: 467
     Content-Type: application/cdni; ptype=ci-trigger-status.v2
     Location: https://triggers.dcdn.example.com/triggers/0
     Server: example-server/0.1

     {
       "errors.v2": [
         {
           "content.regexs": [
             {
               "regex": "^(https:\\/\\/video\\.example\\.com)\\/
               ([a-z])\\/movie1\\/([1-7])\\/*(index.m3u8|\\d{3}.ts)$",
               "case-sensitive": true,
               "match-query-string": false
             },
           ],
           "description": "The dCDN rejected a regex due to complexity",
           "error": "ereject",
           "cdn": "AS64500:0"
         },
       ],

Finkelman, et al.       Expires December 22, 2021              [Page 25]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

       "ctime": 1462351690,
       "etime": 1462351698,
       "mtime": 1462351690,
       "status": "failed",
       "trigger.v2": { <content of trigger object from the command> }
     }

3.4.2.  Preposition with Playlists

   In the following example a CI/T "preposition" command uses the
   Playlist property to specify the full media library of a specific
   content.  The command fails due to playlist parse error and an
   appropriate error is reflected in the status response.

   REQUEST:

     POST /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: triggers.dcdn.example.com
     Accept: */*
     Content-Type: application/cdni; ptype=ci-trigger-command.v2
     {
       "trigger.v2": {
         "type": "preposition",
         "content.playlists": [
          {
           "playlist": "https://www.example.com/hls/title/index.m3u8",
           "media-protocol": "hls"
          },
          { <Playlist #2> },
          ...
          { <Playlist #N> },
         ],
       },
       "cdn-path": [ "AS64496:0" ]
     }

   RESPONSE:

     HTTP/1.1 201 Created
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Length: 467
     Content-Type: application/cdni; ptype=ci-trigger-status.v2
     Location: https://triggers.dcdn.example.com/triggers/0
     Server: example-server/0.1

     {
       "errors.v2": [

Finkelman, et al.       Expires December 22, 2021              [Page 26]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

         {
          "content.playlists": [
            {
             "playlist": "https://www.example.com/hls/title/index.m3u8",
             "media-protocol": "hls"
            },
           ],
          "description": "The dCDN was not able to parse the playlist",
          "error": "econtent",
          "cdn": "AS64500:0"
         },
       ],
       "ctime": 1462351690,
       "etime": 1462351698,
       "mtime": 1462351690,
       "status": "failed",
       "trigger.v2": { <content of trigger object from the command> }
     }

3.4.3.  Extensions with Error Propagation

   In the following example a CI/T "preposition" command is using two
   extensions to control the way the trigger is executed.  In this
   example the receiving dCDN identified as "AS64500:0" does not support
   the first extension in the extensions array. dCDN "AS64500:0" further
   distributes this trigger to another downstream CDN that is identified
   as "AS64501:0", which does not support the second extension in the
   extensions array.  The error is propagated from "AS64501:0" to
   "AS64500:0" and the errors.v2 array reflects both errors.

   REQUEST:

     POST /triggers HTTP/1.1
     User-Agent: example-user-agent/0.1
     Host: triggers.dcdn.example.com
     Accept: */*
     Content-Type: application/cdni; ptype=ci-trigger-command.v2
     {
       "trigger.v2": {
         "type": "preposition",
         "content.playlists": [
          {
            "playlist": "https://www.example.com/hls/title/index.m3u8",
            "media-protocol": "hls"
          },
         ],
         "extensions": [
             {

Finkelman, et al.       Expires December 22, 2021              [Page 27]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

               "generic-trigger-extension-type":
                  <Type of trigger extension object #1>,
               "generic-trigger-extension-value":
                   {
                     <properties of trigger extension object #1>
                   },
               "mandatory-to-enforce": true,
               "safe-to-redistribute": true,
             },
             {
               "generic-trigger-extension-type":
                  <Type of trigger extension object #2>,
               "generic-trigger-extension-value":
                   {
                     <properties of trigger extension object #2>
                   },
               "mandatory-to-enforce": true,
               "safe-to-redistribute": true,
             },
         ],
       },
       "cdn-path": [ "AS64496:0" ]
     }

   RESPONSE:

     HTTP/1.1 201 Created
     Date: Wed, 04 May 2016 08:48:10 GMT
     Content-Length: 467
     Content-Type: application/cdni; ptype=ci-trigger-status.v2
     Location: https://triggers.dcdn.example.com/triggers/0
     Server: example-server/0.1

     {
        "errors.v2": [
          {
            "extensions": [
               {
                 "generic-trigger-extension-type":
                    <Type of trigger extension object #1>,
                 "generic-trigger-extension-value":
                     {
                       <properties of trigger extension object #1>
                     },
                 "mandatory-to-enforce": true,
                 "safe-to-redistribute": true,
               },
             ],

Finkelman, et al.       Expires December 22, 2021              [Page 28]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

            "description": "unrecognized extension <type>",
            "error": "eextension",
            "cdn": "AS64500:0"
          },
          {
            "extensions": [
               {
                 "generic-trigger-extension-type":
                    <Type of trigger extension object #2>,
                 "generic-trigger-extension-value":
                     {
                       <properties of trigger extension object #2>
                     },
                 "mandatory-to-enforce": true,
                 "safe-to-redistribute": true,
               },
             ],
            "description": "unrecognized extension <type>",
            "error": "eextension",
            "cdn": "AS64501:0"
          },
        ],
        "ctime": 1462351690,
        "etime": 1462351698,
        "mtime": 1462351690,
        "status": "failed",
        "trigger.v2": { <content of trigger object from the command> }
     }

4.  Trigger Extension Objects

   The objects defined below are intended to be used in the
   GenericTriggerExtension object's generic-trigger-extension-value
   field as defined in Section Section 3.3.5.2, and their generic-
   trigger-extension-type property MUST be set to the appropriate CDNI
   Payload Type as defined in Section 6.1 .

4.1.  LocationPolicy extension

   A content operation may be relevant for a specific geographical
   region, or need to be excluded from a specific region.  In this case,
   the trigger should be applied only to parts of the network that are
   either "included" or "not excluded" by the location policy.  Note
   that the restrictions here are on the cache location rather than the
   client location.

   The LocationPolicy object defines which CDN or cache locations for
   which the trigger command is relevant.

Finkelman, et al.       Expires December 22, 2021              [Page 29]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   Example use cases:

   o  Pre-position: Certain contracts allow for pre-positioning or
      availability of contract in all regions except for certain
      excluded regions in the world, including caches.  For example,
      some content cannot ever knowingly touch servers in a specific
      country, including cached content.  Therefore, these regions MUST
      be excluded from a pre-positioning operation.

   o  Purge: In certain cases, content may have been located on servers
      in regions where the content must not reside.  In such cases, a
      purge operation to remove content specifically from that region,
      is required.

   Object specification

      Property: locations

         Description: An Access List that allows or denies (blocks) the
         trigger execution per cache location.

         Type: Array of LocationRule objects (see Section 4.2.2.1 of
         [RFC8006])

         Mandatory: Yes.

   If a location policy object is not listed within the trigger command,
   the default behavior is to execute the trigger in all available
   caches and locations of the dCDN.

   The trigger command is allowed, or denied, for a specific cache
   location according to the action of the first location whose
   footprint matches against that cache's location.  If two or more
   footprints overlap, the first footprint that matches against the
   cache's location determines the action a CDN MUST take.  If the
   "locations" property is an empty list or if none of the listed
   footprints match the location of a specific cache location, then the
   result is equivalent to a "deny" action.

   The following is an example of a JSON serialized generic trigger
   extension object containing a location policy object that allows the
   trigger execution in the US but blocks its execution in Canada:

Finkelman, et al.       Expires December 22, 2021              [Page 30]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   {
      "generic-trigger-extension-type": "CIT.LocationPolicy",
      "generic-trigger-extension-value":
       {
          "locations": [
            {
              "action": "allow",
              "footprints": [
                {
                  "footprint-type": "countrycode",
                  "footprint-value": ["us"]
                }
              ]
            },
            {
              "action": "deny",
              "footprints": [
                {
                  "footprint-type": "countrycode",
                  "footprint-value": ["ca"]
                }
              ]
            }
          ]
       },
      "mandatory-to-enforce": true,
      "safe-to-redistribute": true,
      "incomprehensible": false
   }

4.2.  TimePolicy Extension

   A uCDN may wish to perform content management operations on the dCDN
   in a specific schedule.  The TimePolicy extensions allows the uCDN to
   instruct the dCDN to execute the trigger command in a desired time
   window.  For example, a content provider that wishes to pre-populate
   a new episode at off-peak time so that it would be ready on caches at
   prime time when the episode is released for viewing.  A scheduled
   operation enables the uCDN to direct the dCDN in what time frame to
   execute the trigger.

   A uCDN may wish to to schedule a trigger such that the dCDN will
   execute it in local time, as it is measured in each region.  For
   example, a uCDN may wish the dCDN to pull the content at off-peak
   hours, between 2AM-4AM, however, as a CDN is distributed across
   multiple time zones, the UTC definition of 2AM depends on the actual
   location.

Finkelman, et al.       Expires December 22, 2021              [Page 31]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   We define two alternatives for localized scheduling:

   o  Regional schedule: When used in conjunction with the Location
      Policy defined in Section 4.1, the uCDN can trigger separate
      commands for different geographical regions, for each region using
      a different schedule.  This allows the uCDN to control the
      execution time per region.

   o  Local Time schedule: We introduce a "local time" version for
      Internet timestamps that follows the notation for local time as
      defined in Section 4.2.2 of [ISO8601].  When local time is used,
      that dCDN SHOULD execute the triggers at different absolute times,
      according the local time of each execution location.

   Object specification

      Property: unix-time-window

         Description: A UNIX epoch time window in which the trigger
         SHOULD be executed.

         Type: TimeWindow object using UNIX epoch timestamps (see
         Section 4.2.3.2 of [RFC8006])

         Mandatory: No, but exactly one of "unixEpochWindow",
         "utcWindow" or "localTimeWindow" MUST be present.

      Property: utc-window

         Description: A UTC time window in which the trigger SHOULD be
         executed.

         Type: UTCWindow object as defined in Section 4.2.1.

         Mandatory: No, but exactly one of "unixEpochWindow",
         "utcWindow" or "localTimeWindow" MUST be present.

      Property: local-time-window

         Description: A local time window.  The dCDN SHOULD execute the
         trigger at the defined time frame, interpreted as the the local
         time per location.

         Type: LocalTimeWindow object as defined in Section 4.2.2.

         Mandatory: No, but exactly one of "unixEpochWindow",
         "utcWindow" or "localTimeWindow" MUST be present.

Finkelman, et al.       Expires December 22, 2021              [Page 32]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   If a time policy object is not listed within the trigger command, the
   default behavior is to execute the trigger in a time frame most
   suitable to the dCDN taking under consideration other constrains and
   / or obligations.

   Example of a JSON serialized generic trigger extension object
   containing a time policy object that schedules the trigger execution
   to a window between 09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC,
   using the "unix-time-window" property:

   {
      "generic-trigger-extension-type": "CIT.TimePolicy",
      "generic-trigger-extension-value":
       {
         "unix-time-window": {
            "start": 946717200,
            "end": 946746000
         }
       }
      "mandatory-to-enforce": true,
      "safe-to-redistribute": true,
      "incomprehensible": false
   }

4.2.1.  UTCWindow

   A UTCWindow object describes a time range in UTC or UTC and a zone
   offset that can be applied by a TimePolicy.

      Property: start

         Description: The start time of the window.

         Type: Internet date and time as defined in [RFC3339].

         Mandatory: No, but at least one of "start" or "end" MUST be
         present and non-empty.

      Property: end

         Description: The end time of the window.

         Type: Internet date and time as defined in [RFC3339].

         Mandatory: No, but at least one of "start" or "end" MUST be
         present and non-empty.

Finkelman, et al.       Expires December 22, 2021              [Page 33]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   Example JSON serialized UTCWindow object that describes a time window
   from 02:30 01/01/2000 UTC to 04:30 01/01/2000 UTC:

   {
     "start": 2000-01-01T02:30:00.00Z,
     "end": 2000-01-01T04:30:00.00Z,
   }

   Example JSON serialized UTCWindow object that describes a time window
   in New York time zone offset UTC-05:00 from 02:30 01/01/2000 to 04:30
   01/01/2000:

   {
     "start": 2000-01-01T02:30:00.00-05:00,
     "end": 2000-01-01T04:30:00.00-05:00,
   }

4.2.2.  LocalTimeWindow

   A LocalTimeWindow object describes a time range in local time.  The
   reader of this object MUST interpret it as "the local time at the
   location of execution".  For example, if the time window states 2AM
   to 4AM local time then a dCDN that has presence in both London (UTC)
   and New York (UTC-05:00) will execute the trigger at 2AM-4AM UTC in
   London and at 2AM-4AM UTC-05:00 in New York.

      Property: start

         Description: The start time of the window.

         Type: JSON string formatted as DateLocalTime as defined in
         Section 4.2.3.

         Mandatory: No, but at least one of "start" or "end" MUST be
         present and non-empty.

      Property: end

         Description: The end time of the window.

         Type: JSON string formatted as DateLocalTime as defined in
         Section 4.2.3.

         Mandatory: No, but at least one of "start" or "end" MUST be
         present and non-empty.

   Example JSON serialized LocalTimeWindow object that describes a local
   time window from 02:30 01/01/2000 to 04:30 01/01/2000.

Finkelman, et al.       Expires December 22, 2021              [Page 34]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   {
     "start": 2000-01-01T02:30:00.00,
     "end": 2000-01-01T04:30:00.00,
   }

4.2.3.  DateLocalTime

   DateLocalTime is a timestamp that follows the date and local time
   notation in Section 4.3.2 of [ISO8601] as a complete date and time
   extended representation, where the time zone designator is omitted.
   In addition, for simplicity and as exact accuracy is not an objective
   in this case, this specification does not support the decimal
   fractions of seconds, and does not take leap second into
   consideration.

   Type: JSON string using the format "date-local-time" as defined in
   Section 4.2.3.1.

4.2.3.1.  Date and Local Time Format

   The Date and Local Time format is specified here using the syntax
   description notation defined in [ABNF].

   date-fullyear   = 4DIGIT
   date-month      = 2DIGIT  ; 01-12
   date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                             ; month/year
   time-hour       = 2DIGIT  ; 00-23
   time-minute     = 2DIGIT  ; 00-59
   time-second     = 2DIGIT  ; 00-59 leap seconds are not supported

   local-time      = time-hour ":" time-minute ":" time-second
   full-date       = date-fullyear "-" date-month "-" date-mday
   date-local-time = full-date "T" local-time

   Example time representing 09:00AM on 01/01/2000 local time:

   2000-01-01T09:00:00.00

      NOTE: Per [ABNF] and [ISO8601], the "T" character in this syntax
      may alternatively be lower case "t".  For simplicity, Applications
      that generate the "date-local-time" format defined here, SHOULD
      only use the upper case letter "T".

Finkelman, et al.       Expires December 22, 2021              [Page 35]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

4.2.3.2.  Restrictions

   The grammar element date-mday represents the day number within the
   current month.  The maximum value varies based on the month and year
   as follows:

   Month Number  Month/Year           Maximum value of date-mday
   ------------  ----------           --------------------------
   01            January              31
   02            February, normal     28
   02            February, leap year  29
   03            March                31
   04            April                30
   05            May                  31
   06            June                 30
   07            July                 31
   08            August               31
   09            September            30
   10            October              31
   11            November             30
   12            December             31

   See Appendix C of [RFC3339] for a sample C code that determines if a
   year is a leap year.

   The grammar element time-second may have the values 0-59.  The value
   of 60 that is used in [ISO8601] to represent a leap second MUST NOT
   be used.

   Although [ISO8601] permits the hour to be "24", this profile of
   [ISO8601] only allows values between "00" and "23" for the hour in
   order to reduce confusion.

5.  Footprint and Capabilities

   This section covers the FCI objects required for advertisement of the
   extensions and properties introduced in this document.

5.1.  CI/T Versions Capability Object

   The CI/T versions capability object is used to indicate support for
   one or more CI/T objects versions.  Note that the default version as
   originally defined in [RFC8007] MUST be implicitly supported
   regardless of the versions listed in this capability object.

      Property: versions

         Description: A list of version numbers.

Finkelman, et al.       Expires December 22, 2021              [Page 36]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

         Type: An array of JSON strings

         Mandatory: No.  The default is version 1.  A missing or an
         empty versions list means that only version 1 of the interface
         and objects is supported.

5.1.1.  CI/T Versions Capability Object Serialization

   The following shows an example of a JSON serialized CI/T Versions
   Capability object serialization for a dCDN that supports versions 2
   and 2.1 of the CI/T interface.

   {
    "capabilities": [
      {
        "capability-type": "FCI.TriggerVersion",
        "capability-value": {
          "versions": [ "1", "2", "2.1" ]
        },
        "footprints": [
          <Footprint objects>
        ]
      }
    ]
   }

5.2.  CI/T Playlist Protocol Capability Object

   The CI/T Playlist Protocol capability object is used to indicate
   support for one or more MediaProtocol types listed in Section 6.3 by
   the playlists property of the "trigger.v2" object.

      Property: media-protocols

         Description: A list of media protocols.

         Type: A list of MediaProtocol (from the CDNI Triggers media
         protocol types Section 6.3)

         Mandatory: No.  The default, in case of a missing or an empty
         list, is none supported.

5.2.1.  CI/T Playlist Protocol Capability Object Serialization

   The following shows an example of a JSON serialized CI/T Playlist
   Protocol Capability object serialization for a dCDN that supports
   "hls" and "dash".

Finkelman, et al.       Expires December 22, 2021              [Page 37]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   {
    "capabilities": [
      {
        "capability-type": "FCI.TriggerPlaylistProtocol",
        "capability-value": {
          "media-protocols": ["hls", "dash"]
        },
        "footprints": [
          <Footprint objects>
        ]
      }
    ]
   }

5.3.  CI/T Trigger Extension Capability Object

   The CI/T Generic Extension capability object is used to indicate
   support for one or more GenericExtensionObject types.

      Property: trigger-extension

         Description: A list of supported CDNI CI/T
         GenericExtensionObject types.

         Type: List of strings corresponding to entries from the "CDNI
         Payload Types" registry [RFC7736] that are under the CIT
         namespace, and that correspond to CDNI CI/T
         GenericExtensionObject objects.

         Mandatory: No.  The default, in case of a missing or an empty
         list, MUST be interpreted as "no GenericExtensionObject types
         are supported".  A non-empty list MUST be interpreted as
         containing "the only GenericExtensionObject types that are
         supported".

5.3.1.  CI/T Trigger Extension Capability Object Serialization

   The following shows an example of a JSON serialized CI/T Trigger
   Extension Capability object serialization for a dCDN that supports
   the "CIT.LocationPolicy" and the "CIT.TimePolicy" objects.

Finkelman, et al.       Expires December 22, 2021              [Page 38]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   {
    "capabilities": [
      {
        "capability-type": "FCI.TriggerGenericExtension",
        "capability-value": {
          "trigger-extension": ["CIT.LocationPolicy", "CIT.TimePolicy"]
        },
        "footprints": [
          <Footprint objects>
        ]
      }
    ]
   }

6.  IANA Considerations

6.1.  CDNI Payload Types

   This document requests the registration of the following CDNI Payload
   Types under the IANA "CDNI Payload Types" registry defined in
   [RFC7736]:

              +-----------------------------+---------------+
              | Payload Type                | Specification |
              +-----------------------------+---------------+
              | ci-trigger-command.v2       | RFCthis       |
              | ci-trigger-status.v2        | RFCthis       |
              | CIT.LocationPolicy          | RFCthis       |
              | CIT.TimePolicy              | RFCthis       |
              | FCI.TriggerVersion          | RFCthis       |
              | FCI.TriggerPlaylistProtocol | RFCthis       |
              | FCI.TriggerGenericExtension | RFCthis       |
              +-----------------------------+---------------+

   [RFC Editor: Please replace RFCthis with the published RFC number for
   this document.]

6.1.1.  CDNI ci-trigger-command.v2 Payload Type

   Purpose: The purpose of this payload type is to distinguish version 2
   of the CI/T command (and any associated capability advertisement)

   Interface: CI/T

   Encoding: see Section 3.1

Finkelman, et al.       Expires December 22, 2021              [Page 39]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

6.1.2.  CDNI ci-trigger-status.v2 Payload Type

   Purpose: The purpose of this payload type is to distinguish version 2
   of the CI/T status resource response (and any associated capability
   advertisement)

   Interface: CI/T

   Encoding: see Section 3.1

6.1.3.  CDNI CI/T LocationPolicy Trigger Extension Type

   Purpose: The purpose of this Trigger Extension type is to distinguish
   LocationPolicy CIT Trigger Extension objects.

   Interface: CI/T

   Encoding: see Section 4.1

6.1.4.  CDNI CI/T TimePolicy Trigger Extension Type

   Purpose: The purpose of this Trigger Extension type is to distinguish
   TimePolicy CI/T Trigger Extension objects.

   Interface: CI/T

   Encoding: see Section 4.2

6.1.5.  CDNI FCI CI/T Versions Payload Type

   Purpose: The purpose of this payload type is to distinguish FCI
   advertisement objects for CI/T Triggers Versions objects

   Interface: FCI

   Encoding: see Section 5.1.1

6.1.6.  CDNI FCI CI/T Playlist Protocol Payload Type

   Purpose: The purpose of this payload type is to distinguish FCI
   advertisement objects for CI/T Playlist Protocol objects

   Interface: FCI

   Encoding: see Section 5.2.1

Finkelman, et al.       Expires December 22, 2021              [Page 40]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

6.1.7.  CDNI FCI CI/T Extension Objects Payload Type

   Purpose: The purpose of this payload type is to distinguish FCI
   advertisement objects for CI/T Extension objects

   Interface: FCI

   Encoding: see Section 5.3.1

6.2.  CDNI CI/T Trigger Error Codes types

   The IANA is requested to update the "CDNI CI/T Error Codes"
   subregistry (defined in Section 7.3 of [RFC8007] and located at
   <https://www.iana.org/assignments/cdni-parameters>) with the
   following registration:

   +------------+--------------------------------------+---------------+
   | Error Code | Description                          | Specification |
   +------------+--------------------------------------+---------------+
   | eextension | The dCDN failed to parse a generic   | Section       |
   |            | "mandatory-to-enforce" extension     | Section 3.3.7 |
   |            | object, or does not support this     | of this       |
   |            | extension.                           | document.     |
   +------------+--------------------------------------+---------------+

6.3.  CDNI Media protocol types

   The IANA is requested to create a new "CDNI MediaProtocol Types"
   subregistry in the "Content Delivery Networks Interconnection (CDNI)
   Parameters" registry.  The "CDNI MediaProtocol Types" namespace
   defines the valid MediaProtocol object values in
   Section Section 3.3.4, used by the Playlist object.  Additions to the
   MediaProtocol namespace conform to the "Specification Required"
   policy as defined in Section 4.6 of [RFC8126], where the
   specification defines the MediaProtocol Type and the protocol to
   which it is associated.  The designated expert will verify that new
   protocol definitions do not duplicate existing protocol definitions
   and prevent gratuitous additions to the namespace.

   The following table defines the initial MediaProtocol values
   corresponding to the HLS, MSS, and DASH protocols:

Finkelman, et al.       Expires December 22, 2021              [Page 41]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   +---------------+-------------------+---------------+---------------+
   | MediaProtocol | Description       | Specification | Protocol      |
   | Type          |                   |               | Specification |
   +---------------+-------------------+---------------+---------------+
   | hls           | HTTP Live         | RFCthis       | RFC 8216      |
   |               | Streaming         |               | [RFC8216]     |
   | mss           | Microsoft Smooth  | RFCthis       | MSS [MSS]     |
   |               | Streaming         |               |               |
   | dash          | Dynamic Adaptive  | RFCthis       | MPEG-DASH     |
   |               | Streaming over    |               | [MPEG-DASH]   |
   |               | HTTP (MPEG-DASH)  |               |               |
   +---------------+-------------------+---------------+---------------+

   [RFC Editor: Please replace RFCthis with the published RFC number for
   this document.]

7.  Security Considerations

   All security considerations listed in Section 8 of [RFC8007] and
   Section 7 of [RFC8008] apply to this document as well.

   This document defines the capability to use regular expression within
   the trigger specification for more granular content selection.  The
   usage of regex introduced the risk of regex complexity attacks, a.k.a
   ReDos attacks.  An attacker may be able to craft a regular expression
   that can exhaust server resources and may take exponential time in
   the worst case.  An implementation MUST protect itself at a minimum
   by accepting triggers only from an authenticated party over a secured
   connection.  An implementation SHOULD also protect itself by using
   secure programing techniques and decline trigger commands that use
   potentially risky regex, such techniques are readily available in
   secure programming literature and are beyond the scope of this
   document.

8.  Acknowledgments

   The authors thank Kevin J.  Ma for his guidance as well as careful
   and methodical reviews and feedback.

9.  References

9.1.  Normative References

   [ABNF]     Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
              Specifications: ABNF", STD 68, RFC 5234,
              DOI 10.17487/RFC5234, January 2008,
              <https://www.rfc-editor.org/info/rfc5234>.

Finkelman, et al.       Expires December 22, 2021              [Page 42]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC3339]  Klyne, G. and C. Newman, "Date and Time on the Internet:
              Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
              <https://www.rfc-editor.org/info/rfc3339>.

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66,
              RFC 3986, DOI 10.17487/RFC3986, January 2005,
              <https://www.rfc-editor.org/info/rfc3986>.

   [RFC6707]  Niven-Jenkins, B., Le Faucheur, F., and N. Bitar, "Content
              Distribution Network Interconnection (CDNI) Problem
              Statement", RFC 6707, DOI 10.17487/RFC6707, September
              2012, <https://www.rfc-editor.org/info/rfc6707>.

   [RFC7736]  Ma, K., "Content Delivery Network Interconnection (CDNI)
              Media Type Registration", RFC 7736, DOI 10.17487/RFC7736,
              December 2015, <https://www.rfc-editor.org/info/rfc7736>.

   [RFC8006]  Niven-Jenkins, B., Murray, R., Caulfield, M., and K. Ma,
              "Content Delivery Network Interconnection (CDNI)
              Metadata", RFC 8006, DOI 10.17487/RFC8006, December 2016,
              <https://www.rfc-editor.org/info/rfc8006>.

   [RFC8007]  Murray, R. and B. Niven-Jenkins, "Content Delivery Network
              Interconnection (CDNI) Control Interface / Triggers",
              RFC 8007, DOI 10.17487/RFC8007, December 2016,
              <https://www.rfc-editor.org/info/rfc8007>.

   [RFC8008]  Seedorf, J., Peterson, J., Previdi, S., van Brandenburg,
              R., and K. Ma, "Content Delivery Network Interconnection
              (CDNI) Request Routing: Footprint and Capabilities
              Semantics", RFC 8008, DOI 10.17487/RFC8008, December 2016,
              <https://www.rfc-editor.org/info/rfc8008>.

   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, "Guidelines for
              Writing an IANA Considerations Section in RFCs", BCP 26,
              RFC 8126, DOI 10.17487/RFC8126, June 2017,
              <https://www.rfc-editor.org/info/rfc8126>.

   [RFC8259]  Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
              Interchange Format", STD 90, RFC 8259,
              DOI 10.17487/RFC8259, December 2017,
              <https://www.rfc-editor.org/info/rfc8259>.

Finkelman, et al.       Expires December 22, 2021              [Page 43]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

9.2.  Informative References

   [ISO8601]  ISO, "Data elements and interchange formats -- Information
              interchange -- Representation of dates and times",
              ISO 8601:2004, Edition 3, 12 2004,
              <https://www.iso.org/standard/40874.html>.

   [MPEG-DASH]
              ISO, "Information technology -- Dynamic adaptive streaming
              over HTTP (DASH) -- Part 1: Media presentation description
              and segment format", ISO/IEC 23009-1:2014, Edition 2, 05
              2014, <https://www.iso.org/standard/65274.html>.

   [MSS]      Microsoft, "[MS-SSTR]: Smooth Streaming Protocol",
              Protocol Revision 8.0, September 2017,
              <https://msdn.microsoft.com/en-us/library/ff469518.aspx>.

   [OC-CM]    Finkelman, O., Ed., Devabhaktuni, J., and M. Stock, "Open
              Caching Content Management Operations Specification",
              November 2017,
              <https://www.streamingvideoalliance.org/document/open-
              caching-content-management-operations-specification/>.

   [OCWG]     Streaming Video Alliance, "Open Caching",
              <https://www.streamingvideoalliance.org/technical-groups/
              open-caching/>.

   [PCRE841]  Hazel, P., "Perl Compatible Regular Expressions",
              Version 8.41, July 2017, <http://www.pcre.org/>.

   [RFC8216]  Pantos, R., Ed. and W. May, "HTTP Live Streaming",
              RFC 8216, DOI 10.17487/RFC8216, August 2017,
              <https://www.rfc-editor.org/info/rfc8216>.

   [SVA]      "Streaming Video Alliance",
              <https://www.streamingvideoalliance.org>.

Authors' Addresses

   Ori Finkelman
   Qwilt
   6, Ha'harash
   Hod HaSharon  4524079
   Israel

   Email: ori.finkelman.ietf@gmail.com

Finkelman, et al.       Expires December 22, 2021              [Page 44]
Internet-DraftCDNI Control Interface / Triggers Extensions     June 2021

   Sanjay Mishra
   Verizon
   13100 Columbia Pike
   Silver Spring, MD  20904
   USA

   Email: sanjay.mishra@verizon.com

   Nir B. Sopher
   Qwilt
   6, Ha'harash
   Hod HaSharon  4524079
   Israel

   Email: nir@apache.org

Finkelman, et al.       Expires December 22, 2021              [Page 45]