Skip to main content

CDNI Triggers Interface SVA Extensions
draft-finkelman-cdni-triggers-sva-extensions-00

The information below is for an old version of the document.
Document Type
This is an older version of an Internet-Draft whose latest revision state is "Replaced".
Authors Ori Finkelman , Sanjay Mishra
Last updated 2018-06-14
Replaced by draft-ietf-cdni-triggers-extensions
RFC stream (None)
Formats
Additional resources
Stream Stream state (No stream defined)
Consensus boilerplate Unknown
RFC Editor Note (None)
IESG IESG state I-D Exists
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-finkelman-cdni-triggers-sva-extensions-00
Network Working Group                                       O. Finkelman
Internet-Draft                                                     Qwilt
Intended status: Standards Track                               S. Mishra
Expires: December 15, 2018                                       Verizon
                                                           June 13, 2018

                 CDNI Triggers Interface SVA Extensions
            draft-finkelman-cdni-triggers-sva-extensions-00

Abstract

   The Open Caching working group of the Streaming Video Alliance is
   focused on the delegation of video delivery request from commercial
   CDNs to a caching layer at the ISP.  In that aspect, Open Caching 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).

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 15, 2018.

Copyright Notice

   Copyright (c) 2018 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

Finkelman & Mishra      Expires December 15, 2018               [Page 1]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

   (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 . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Interfaces Extensions Overview  . . . . . . . . . . . . . . .   3
     2.1.  CDNI Control Interface / Triggers Extensions  . . . . . .   4
       2.1.1.  CI/T Objects  . . . . . . . . . . . . . . . . . . . .   4
       2.1.2.  Trigger Specification . . . . . . . . . . . . . . . .   4
       2.1.3.  Content Selection . . . . . . . . . . . . . . . . . .   4
       2.1.4.  Trigger Extensibility . . . . . . . . . . . . . . . .   4
     2.2.  CDNI Footprint and Capabilities Interface Extensions  . .   5
   3.  CI/T Version 2  . . . . . . . . . . . . . . . . . . . . . . .   6
     3.1.  CI/T Objects V2 . . . . . . . . . . . . . . . . . . . . .   6
     3.2.  Properties of CI/T Version 2 objects  . . . . . . . . . .   6
     3.3.  RegexMatch  . . . . . . . . . . . . . . . . . . . . . . .   7
     3.4.  Playlist  . . . . . . . . . . . . . . . . . . . . . . . .   9
     3.5.  AbrProtocol . . . . . . . . . . . . . . . . . . . . . . .  10
     3.6.  CI/T Trigger Extensions . . . . . . . . . . . . . . . . .  10
       3.6.1.  Enforcement Options . . . . . . . . . . . . . . . . .  10
       3.6.2.  GenericExtensionObject  . . . . . . . . . . . . . . .  13
   4.  Trigger Extension Objects . . . . . . . . . . . . . . . . . .  15
     4.1.  LocationPolicy extension  . . . . . . . . . . . . . . . .  15
     4.2.  TimePolicy Extension  . . . . . . . . . . . . . . . . . .  17
   5.  Footprint and Capabilities  . . . . . . . . . . . . . . . . .  19
     5.1.  CI/T Versions Capability Object . . . . . . . . . . . . .  19
       5.1.1.  CI/T Versions Capability Object Serialization . . . .  20
     5.2.  CI/T Playlist Protocol Capability Object  . . . . . . . .  20
       5.2.1.  CI/T Playlist Protocol Capability Object
               Serialization . . . . . . . . . . . . . . . . . . . .  20
     5.3.  CI/T Trigger Extension Capability Object  . . . . . . . .  21
       5.3.1.  CI/T Trigger Extension Capability Object
               Serialization . . . . . . . . . . . . . . . . . . . .  21
   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  22
     6.1.  CDNI Payload Types  . . . . . . . . . . . . . . . . . . .  22
       6.1.1.  CDNI ci-trigger-command.v2 Payload Type . . . . . . .  22
       6.1.2.  CDNI ci-trigger-status.v2 Payload Type  . . . . . . .  23
       6.1.3.  CDNI CI/T LocationPolicy Trigger Extension Type . . .  23
       6.1.4.  CDNI CI/T TimePolicy Trigger Extension Type . . . . .  23
       6.1.5.  CDNI FCI CI/T Versions Payload Type . . . . . . . . .  23
       6.1.6.  CDNI FCI CI/T Playlist Protocol Payload Type  . . . .  23

Finkelman & Mishra      Expires December 15, 2018               [Page 2]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

       6.1.7.  CDNI FCI CI/T Extension Objects Payload Type  . . . .  24
     6.2.  CDNI CI/T Trigger ABR protocol types  . . . . . . . . . .  24
   7.  Security Considerations . . . . . . . . . . . . . . . . . . .  24
   8.  Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .  25
   9.  Contributors  . . . . . . . . . . . . . . . . . . . . . . . .  25
   10. References  . . . . . . . . . . . . . . . . . . . . . . . . .  25
     10.1.  Normative References . . . . . . . . . . . . . . . . . .  25
     10.2.  Informative References . . . . . . . . . . . . . . . . .  26
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  26

1.  Introduction

   This document defines the objects and extensions needed for Open
   Caching content management operations.  For that purpose it extends
   CDNI Control Interface/Triggers [RFC8007].  The basic operations are
   the ones defined in the RFC (i.e. purge, invalidate, pre-position).
   For consistency, this document follows the CDNI notation of uCDN (the
   commercial CDN) and dCDN (the ISP caching layer).  When using the
   term CP in this document we refer to a video content provider.

   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].

1.1.  Terminology

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

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

   o  SVA - Streaming Video Alliance

   o  OC - SVA Open Caching

   o  CP - Content Provider

   o  ABR - Adaptive Bitrate

2.  Interfaces Extensions Overview

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

Finkelman & Mishra      Expires December 15, 2018               [Page 3]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

2.1.  CDNI Control Interface / Triggers Extensions

2.1.1.  CI/T Objects

   This document specifies version 2 of the CI/T objects in order to
   support version 2 of the Trigger Specification as required below in
   Section 2.1.2.

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.

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.  The Open Caching specifications
   requires 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].

2.1.4.  Trigger Extensibility

   The CDNI Control Interface / Triggers [RFC8007] defines a set of
   objects used by the trigger commands.  These objects cover the basic
   trigger functionality.  The specification of the Open Caching
   architecture requires additional properties to allow a more granular
   trigger execution operation.  In this document we define a mechanism
   for a generic trigger extension object wrapper for managing
   individual CDNI trigger extensions in an opaque manner, as well as an
   initial set of trigger extension objects.

Finkelman & Mishra      Expires December 15, 2018               [Page 4]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

   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.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/DASH/MSS, DASH templates.

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

Finkelman & Mishra      Expires December 15, 2018               [Page 5]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

3.  CI/T Version 2

   Version 2 of the CI/T interface is an extension of the original
   interface as defined in section 5 of [RFC8007].  This sections
   defines version 2 of the CI/T objects and their properties.

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.2, instead of a "trigger" object.
      All other properties of the trigger command are as defined in
      section 5.1.1 of [RFC8007].

   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.2, instead of a
      "trigger" object.  All other properties of the trigger command are
      as defined in section 5.1.1 of [RFC8007].

   o  Trigger Collections: The payload type ci-trigger-collection is
      used with no changes comparing to previous version.

   Usage example of version 2 of trigger command

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

3.2.  Properties of CI/T Version 2 objects

   Version 2 of the Trigger Object 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

Finkelman & Mishra      Expires December 15, 2018               [Page 6]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

         Description: Regexs of content URLs the trigger Command applies
         to.

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

         Mandatory: No, but at least one of "metadata.*", "content.*" or
         "playlist.urls" 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.4).

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

      Property: extensions

         Description: Array of trigger extension data.

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

         Mandatory-to-Specify: No.  The default is no extensions.

   Example of an invalidation trigger.v2 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:1" ]
   }

3.3.  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

Finkelman & Mishra      Expires December 15, 2018               [Page 7]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

         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 special meaning in JSON [RFC8259] as the
         escape character within JSON strings, the regular expression
         character '\' MUST be escaped as '\\'.

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

      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.

   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)$".

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

Finkelman & Mishra      Expires December 15, 2018               [Page 8]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

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

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

3.4.  Playlist

   A Playlist consists of a full URL and an ABR protocol identifier.  An
   implementation that supports a specific playlist ABR 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 on 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: abr-protocol

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

         Type: AbrProtocol (see Section 3.5).

         Mandatory: Yes.

   Example of a HLS playlist:

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

Finkelman & Mishra      Expires December 15, 2018               [Page 9]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

3.5.  AbrProtocol

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

   Type: JSON string

   Example:

   "dash"

3.6.  CI/T Trigger Extensions

   A "trigger.v2" object, as defined in Section 3.2 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.6.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
   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-

Finkelman & Mishra      Expires December 15, 2018              [Page 10]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

   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 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 & Mishra      Expires December 15, 2018              [Page 11]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

   +-------+-------+------------+--------------------------------------+
   | 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 tCDN 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 & Mishra      Expires December 15, 2018              [Page 12]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

   +-------+--------+---------------+----------------------------------+
   | 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.6.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-to-Specify: 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 & Mishra      Expires December 15, 2018              [Page 13]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

         Mandatory-to-Specify: Yes.

      Property: mandatory-to-enforce

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

         Type: Boolean

         Mandatory-to-Specify: 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.

         Type: Boolean

         Mandatory-to-Specify: 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-to-Specify: No.  Default is comprehensible (i.e., a
         value of False).

   Example of a GenericTriggerExtension containing a specific trigger
   extension object:

Finkelman & Mishra      Expires December 15, 2018              [Page 14]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

    {
      "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
    }

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.6.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
   included or not excluded by the location policy.  Note that the
   restrictions here are on the cache location rather than client
   location.

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

   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 CPs 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 on.  In such cases a
      purge operation to remove content specifically from that region,
      is required.

   Object specification

Finkelman & Mishra      Expires December 15, 2018              [Page 15]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

      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-to-Specify: 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 pre-position trigger specification
   with a trigger-extensions array including a location policy that
   allows the trigger execution in the US but blocks its execution in
   Canada:

Finkelman & Mishra      Expires December 15, 2018              [Page 16]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

      {
        "trigger": {
          "type": "preposition",
          "content.urls": [
              "https://www.example.com/a/b/c/1",
              "https://www.example.com/a/b/c/2"
          ],
          "extensions": [
             {
                "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
           }
          ]
        },
        "cdn-path": [ "AS64496:1" ]
      }

4.2.  TimePolicy Extension

   A uCDN may wish to perform content management operation on the dCDN
   under a defined schedule.  The TimePolicy extensions allows the uCDN
   to instruct the dCDN to execute the trigger command in a desired time
   window.

Finkelman & Mishra      Expires December 15, 2018              [Page 17]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

      Example use cases

      *  Pre-position: A content provider wishes to pre-populate a new
         episode at off-peak time so that it would be ready on caches
         (for example home 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.
         The time values are in UNIX epoch.

      *  Regional schedule: When used with combination with the Location
         Policy defined in Section 4.1 the uCDN can trigger separate
         commands for different geographical regions, for each region
         using different schedule.  This allows the uCDN to control the
         execution time per region and, for example, direct the dCDN to
         execute at off-peak hours, as they are defined per region.

   Object specification

      Property: window

         Description: A time frame in which the trigger should be
         executed.

         Type: TimeWindow object (see Section 4.2.3.2 of [RFC8006])

         Mandatory-to-Specify: Yes.

   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 trigger specification with a scheduled time window between
   09:00 01/01/2000 UTC and 17:00 01/01/2000 UTC:

Finkelman & Mishra      Expires December 15, 2018              [Page 18]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

      POST /triggers HTTP/1.1
      User-Agent: example-user-agent/0.1
      Host: dcdn.example.com
      Accept: */*
      Content-Type: application/cdni; ptype=ci-trigger-command
      Content-Length: 352

      {
        "trigger": {
          "type": "preposition",
          "content.urls": [
              "https://www.example.com/a/b/c/1",
              "https://www.example.com/a/b/c/2"
            ],
          "extensions": [
             {
                "generic-trigger-extension-type": "CIT.TimePolicy",
                "generic-trigger-extension-value":
                 {
                   "windows": {
                      "start": 946717200,
                      "end": 946746000
                   }
                 }
                "mandatory-to-enforce": true,
                "safe-to-redistribute": true,
                "incomprehensible": false
             }
          ],
        },
        "cdn-path": [ "AS64496:1" ]
      }

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 & Mishra      Expires December 15, 2018              [Page 19]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

         Type: An array of JSON strings

         Mandatory-to-Specify: Yes.

5.1.1.  CI/T Versions Capability Object Serialization

   The following shows an example of 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": [ "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 AbrProtocols listed in Section 6.2 by the
   playlists property of the "trigger.v2" object.

      Property: abr-protocols

         Description: A list of ABR protocols.

         Type: A list of AbrProtocol (from the CDNI Triggers ABR
         protocol types Section 6.2)

         Mandatory-to-Specify: Yes.

5.2.1.  CI/T Playlist Protocol Capability Object Serialization

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

Finkelman & Mishra      Expires December 15, 2018              [Page 20]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

      {
        "capabilities": [
          {
            "capability-type": "FCI.TriggerPlaylistProtocol",
            "capability-value": {
              "abr-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-to-Specify: Yes.  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 CI/T Trigger Extension Capability
   object serialization for a dCDN that supports the
   "CIT.LocationPolicy" and the "CIT.TimePolicy" objects.

Finkelman & Mishra      Expires December 15, 2018              [Page 21]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

   {
     "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 Type 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 4.1

Finkelman & Mishra      Expires December 15, 2018              [Page 22]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

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 4.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 & Mishra      Expires December 15, 2018              [Page 23]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

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 ABR protocol types

   The IANA is requested to create a new "CDNI CI/T Trigger AbrProtocol
   Types" subregistry in the "Content Delivery Networks Interconnection
   (CDNI) Parameters" registry.  The "CDNI CI/T Trigger ABR Protocol
   Types" namespace defines the valid ABR Protocol object values in
   Section Section 3.5, used by the Playlist object.  Additions to the
   AbrProtocol namespace conform to the "Specification Required" policy
   as defined in section 4.6 of [RFC8126], where the specification
   defines the AbrProtocol 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 AbrProtocol values
   corresponding to the HLS, MSS, and DASH protocols:

   +-------------+---------------------+---------------+---------------+
   | AbrProtocol | Description         | Type          | Protocol      |
   | Type        |                     | Specification | Specification |
   +-------------+---------------------+---------------+---------------+
   | hls         | HTTP Live Streaming | RFCthis       | RFC 8216      |
   |             |                     |               | [RFC8216]     |
   | mss         | Microsoft Smooth    | RFCthis       | MSS [MSS]     |
   |             | Streaming           |               |               |
   | dash        | Dynamic Adaptive    | RFCthis       | MPEG-DASH     |
   |             | Streaming over HTTP |               | [MPEG-DASH]   |
   |             | (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.

Finkelman & Mishra      Expires December 15, 2018              [Page 24]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

8.  Acknowledgments

   TBD

9.  Contributors

   The authors would like to thank all members of the SVA's Open Caching
   Working Group for their contribution in support of this document.

10.  References

10.1.  Normative References

   [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>.

   [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>.

   [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 & Mishra      Expires December 15, 2018              [Page 25]
Internet-Draft   CDNI Triggers Interface SVA Extensions        June 2018

10.2.  Informative References

   [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, <http://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>.

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

   [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>.

   [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>.

Authors' Addresses

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

   Phone: +972-72-2221647
   Email: orif@qwilt.com

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

   Email: sanjay.mishra@verizon.com

Finkelman & Mishra      Expires December 15, 2018              [Page 26]