Re: [CDNi] [E] Cache management interface | Triggers v2

Alan Arolovitch <alan@2you.io> Fri, 03 November 2023 14:42 UTC

Return-Path: <alan@2you.io>
X-Original-To: cdni@ietfa.amsl.com
Delivered-To: cdni@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 66382C17061B for <cdni@ietfa.amsl.com>; Fri, 3 Nov 2023 07:42:05 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 1.223
X-Spam-Level: *
X-Spam-Status: No, score=1.223 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DATE_IN_FUTURE_03_06=3.027, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=0.1, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=2you-io.20230601.gappssmtp.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BHyIkQKHlWNg for <cdni@ietfa.amsl.com>; Fri, 3 Nov 2023 07:42:00 -0700 (PDT)
Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [IPv6:2a00:1450:4864:20::131]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id EA21BC1519A0 for <cdni@ietf.org>; Fri, 3 Nov 2023 07:41:59 -0700 (PDT)
Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-507a98517f3so2669437e87.0 for <cdni@ietf.org>; Fri, 03 Nov 2023 07:41:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2you-io.20230601.gappssmtp.com; s=20230601; t=1699022518; x=1699627318; darn=ietf.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=NFxJT6ubhAuIzcYGLieGaPIsiHrFTXyecMP2d8fU5jM=; b=eb2xq568rcuk4/sYZWrG9I4/2jOaPCT/LMzW5JajplJh2GwnYz0GE2y8fimz3POqNH cCpVPnSYQHVXjxQ+zYRT8BdiWUU5bmi1ZG/6ejckntoxqpe7eVJWlYJmgYgyVCWhKj1w 6qJV4Rn6nefx63CTUcad/ilFBpS1WEngvTz0phXGeHkpvTvvurTP00Wsk/4dp+pUnMGv /HxVqta92tLxWsmrlM+sqe3TwpM2HrC4KP4ejoxv6pxDNrzkWOIn19DCHc5pPfWOkU8+ GE9YagVHsryhTHADHIoyp1a2DOl3BWQCDSYoX+0jz1Yj5iY1cX28B44GmoeAacEZcokW z0cw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699022518; x=1699627318; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=NFxJT6ubhAuIzcYGLieGaPIsiHrFTXyecMP2d8fU5jM=; b=UTsVxCCOiXxaYCWsuV6nMLWP5kuXYPc5N+P27HeBaD49zQolVyAzJ0wPy/WL5TZp56 bEvsDwMg1fIFf0cx/MAbDrU4kfRXn0Au+uyciyq8sjJZ4b7lDEq7o0fYXyQ39VYXQLkS K6YCqBZk4dUwfIkJa4DZ5mcecd3trRQNrozR54WVsiSodREQG0pNzE04HpV9NQoULd64 PkO8N0Ajh/N1hrWnnPGLxBfglQzrt4a7yYAi0pEN2zRee4FhL2/zNfdLkoB4ICTPajuR zCXElcCJmMG07UPAotAOwiPEU3l9Qz2rGfc5I8/QJEuj50i8Kp30k23m5vMRc7MoLBsN O+NA==
X-Gm-Message-State: AOJu0YzBqSYv4zFsouyyNOH8YusaMF70qN50OYSrn+nX5QzAlADJ4AKg PE84niBN/T+SRG0epMx9pOE8iTyY0qaFks+eF5kqRg==
X-Google-Smtp-Source: AGHT+IHnyHeeeD4M5fLygD8OzWTKxs3D9kGjnKkh4MAtQQ3ZIdL5/3uIS9EgB8wVAD9xYVKRANp0maRmPzmZDC6m5rc=
X-Received: by 2002:a19:6905:0:b0:507:a3ae:3252 with SMTP id e5-20020a196905000000b00507a3ae3252mr14533651lfc.27.1699022517767; Fri, 03 Nov 2023 07:41:57 -0700 (PDT)
MIME-Version: 1.0
References: <F2A083C3-CD48-4D76-A27A-91F53717C99B@2you.io> <CA+EbDtAuzHP6MyGuotQn8jfRb+VAoFR6-4ai5KJVVq5Ef0DZeQ@mail.gmail.com> <CANv64+5ZzmZRDPxEKY4f5Xw6xvHdR+7tBd6RcNiJLEiPWmkffQ@mail.gmail.com> <CA+EbDtAJdG-_daui+5wzhTsP8-4O0_tFsmNAxQJqWts_+qnPTg@mail.gmail.com>
In-Reply-To: <CA+EbDtAJdG-_daui+5wzhTsP8-4O0_tFsmNAxQJqWts_+qnPTg@mail.gmail.com>
From: Alan Arolovitch <alan@2you.io>
Date: Fri, 03 Nov 2023 14:41:46 -0400
Message-ID: <CANv64+6pQb_yhTDEie1AuW5uySwSDsAmoSwqrCE5LHOQpHFTKw@mail.gmail.com>
To: "Mishra, Sanjay" <sanjay.mishra@verizon.com>
Cc: cdni@ietf.org, Nir Sopher <nirsopher@gmail.com>
Content-Type: multipart/alternative; boundary="000000000000a3266d060940814a"
Archived-At: <https://mailarchive.ietf.org/arch/msg/cdni/GQRezno74REm4Mxpi8MHKqIaZog>
Subject: Re: [CDNi] [E] Cache management interface | Triggers v2
X-BeenThere: cdni@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: "This list is to discuss issues associated with the Interconnection of Content Delivery Networks \(CDNs\)" <cdni.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/cdni>, <mailto:cdni-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/cdni/>
List-Post: <mailto:cdni@ietf.org>
List-Help: <mailto:cdni-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/cdni>, <mailto:cdni-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 03 Nov 2023 14:42:05 -0000

Sanjay, Nir,
Thanks for the feedback, please find my responses embedded below

On Fri, Nov 3, 2023 at 5:11 AM Mishra, Sanjay <sanjay.mishra@verizon.com>
wrote:

> Hi Alan - Nir and discussed your comments and please see our further
> clarifications to your comments
>
>
>>>    1. For items 1 to 3 are new extensions you are proposing and those
>>>    may be just easy to define in a new draft.
>>>
>>> Sounds good, I'll work on the draft once we finalize the cache
>> management spec at SVTA.
>>
>>
>>>    1. For #4, this appears a heavy lift in the current draft as some of
>>>    the capabilities such as duration and recurrence and the RFC7265 brings
>>>    added complexity for dCDN and some dCDN may not support. It may be best to
>>>    leave Timepolicy as is defined in v2 but JCAL policy can be added in the
>>>    new draft.
>>>
>>> I can see that JCAL/iCalendar support can be somewhat of a lift, even
>> though there's a number of JCAL libraries out there.
>> At the same time, the TimePolicy extension in its current form is a
>> partial ad-hoc scheduling implementation, and should be obsoleted by
>> RFC7265,
>> which is a well-established IETF standard with implementation base.
>> Do we want to release CI/T v2 that is obsolete at the time of release?
>> [NS/SM] We do not think TimePolicy would be obsoleted. Let the dcdn
>> choose what it supports and publish via the FCI (as already defined in the
>> draft)
>>
>
[AA]  If so, and we think that TimePolicy in its current form has value, I
propose we break out the JCAL support into a new extension SchedulePolicy,
and have it specified together in the same draft with other extensions
coming out of the SVTA cache management spec

>
>
>> If dCDN doesn't support some advanced JCAL scheduling features like
>> recurrence, there's ample room to manage that using eextension error code
>> in Error.V2
>>
>> [NS/SM] This should be managed by a capability object - such a solution
>> would be cleaner and mor sustaninable than emitting an error, which is too
>> late.
>>
> We support a capability object to specify which spec can be used with
>> which extension. However, the usecase of complex extension is not covered
>> by such a general capability.
>>
> We should probably need to define for JCAL (and every complex extension)
>> an additional capability object specifying what part of JCAL it is
>> supported.
>> I think that both the new JCAL extension and its capability object should
>> be pushed to a separate doc.
>>
> [AA] I am okay with a capability object specifying support per extension.
I don't think it makes sense to specify subsets of extension functionality,
as we would be guessing
what part of the extension future implementations may choose to opt in or
out of.
In my mind, this is exactly the purpose of having the eextension error code
in Error.V2 object, to allow extension support negotiation without
prescribing support specifics.


>>>    1.  Items 5 & 6 to generalize playlist to an object list is
>>>    reasonable and we can add those in the next revision (v10) early Dec.
>>>
>>> Great, please let me know what is the best way to add those
>> In the spirit of iterative changes, I propose to consider three minor
>> features that may belong in the core CI/T v2 spec, rather than the cache
>> management extension:
>> - add trigger execution priority in Trigger.v2, to allow uCDN to
>> introduce urgent triggers
>> [NS/SM] While working on the different drafts, we already discussed
>> capabilities that allows dependencies between triggers.
>>
> We concluded that any such capability can be simply defined and added as
>> an extension, without forcing the dCDN to support it. We suggest to push it
>> to a separate doc.
>>
> [AA] I don't think I agree here.
I see CI/T triggers as a spec for queue-based task execution and extensions
as a mechanism to enrich the processing of individual tasks.
Task prioritization is a core feature of the trigger framework, not an
individual trigger feature.
Trigger priority support should likely go beyond individual trigger
extensions.
For example, when viewing pending and complete triggers, uCDN may be
interested to see trigger creation time (mtime), the time when trigger
execution started, and trigger priority,
so it can make decisions on new triggers priority.

>
>
>> - add an optional object list to Trigger Status v2; this is to show to
>> uCDN how dCDN resolved playlist (aka objectlist) provided to it via
>> conteMnt.playlist(objectlist) spec
>> [NS/SM] makes sense, also for url patterns. However, wouldnt it
>> dramatically enlarge the status object and make the transaction heavier?
>>
> Addiiotnally note that the extra complexity the dCDN would have to manage
>> such a list, especially in a multiple CDN hierarcy topology (e.g. when the
>> dCDN has 2 further dCDNs that may provide different replies)
>>
> Bottom line, we can add it to the respones structure, specifying that it
>> should be included only if the "status request" specify so via a flag. However,
>> due to the complexity and requirement for concise definitions, maybe to
>> add such feature we should add it in a separate doc, with a designated API
>> endpoint.
>>
>
>
[AA] Yes, it might. For that reason the proposal is to allow dCDN to
specify such object list via URL to dCDN-side resource, using MI.Link
mechanism.
In this way, there may be no need to have a flag in the status request,
because uCDN may choose not to retrieve the object list if it's not
interested in it.
I am not sure what the purpose of the designated API endpoint would be.
To make sure, all these proposals have already been written up in the SVTA
spec draft.

>
>>
> - add an optional object list to Error.v2
>> [NS/SM] Again. It might be too heavy and complex.
>>
> A full description may create an [object * error * cdn-heirarchy] matrix,
>> which may be too much.
>>
> Lets decide how to proceed after resolving which option we agree to take
>> wrt the above (status object) question.
>>
> [AA] As above, the way out of burdening the response is by supplying the
list via an external URL.

>
> - update trigger spec objects that use URLs (which is all trigger specs
>> except for CCID) to add a field that indicates the type of URL to use -
>> published URL vs. cache key URL
>>
>
>> If we do that, we can have a clean break between the core CI/T v2 draft
>> on hand, and 2 new drafts to be submitted later - cache management trigger
>> extensions and
>> cache management interface.
>> Also, this would be a higher priority than adding JCAL support to v10.
>>
>
> [NS/SM] We see 2 options to support that, and need to think about it.
>>
> Let's take the below example:
>
>     {
>          "trigger-subject": "content",
>          "generic-trigger-spec-type": "content-playlist",
>          "generic-trigger-spec-value": {
>              "playlist": "https://www.example.com/hls/title/index.m3u8 <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.example.com_hls_title_index.m3u8&d=DwMFaQ&c=udBTRvFvXC5Dhqg7UHpJlPps3mZ3LRxpb6__0PomBTQ&r=XniVbishGiO2Ao9hKqSc-hTVIWCi3T-x6GdHR4ZTgoM&m=971EsgFLP9ZLZjNqyHBn_eP79-nLrsreGAuMd4CdJ1bGkZZhLGpP43_nqnMc4Fh-&s=WNpDRf7l_aoJVrQzvMwJZXKtjzmEmn83XzqmqILOIaA&e=>",
>              "media-protocol": "hls"
>           }
>        }
>
>
>
>> Option A. We already have a "trigger-subject" proprety ("metadata" /
>> "content"). Lets enrich the list of subjects to support the separation of
>> URLs type, or add an additional field, e.g. 'trigger-subject-variant"
>>
>
>     {
>          "trigger-subject": "content",
>
>           "trigger-subject-variant": "published-url",
>
> "generic-trigger-spec-type": "content-playlist",
> "generic-trigger-spec-value": { "playlist": "
> https://www.example.com/hls/title/index.m3u8
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.example.com_hls_title_index.m3u8&d=DwMFaQ&c=udBTRvFvXC5Dhqg7UHpJlPps3mZ3LRxpb6__0PomBTQ&r=XniVbishGiO2Ao9hKqSc-hTVIWCi3T-x6GdHR4ZTgoM&m=971EsgFLP9ZLZjNqyHBn_eP79-nLrsreGAuMd4CdJ1bGkZZhLGpP43_nqnMc4Fh-&s=WNpDRf7l_aoJVrQzvMwJZXKtjzmEmn83XzqmqILOIaA&e=>",
> "media-protocol": "hls"
>
>          }
>     }
>
>
> This approach would mean changes in the capability objects.
> We currently list the supported (subject, spec, extension) tuples. Instead
> we would now have (subject, variants, spec, extension) tuples.
>
> Option B. Define it within the different spec value objects, e.g. with a
> "url-type" field
>     {
>
>          "trigger-subject": "content",
>          "generic-trigger-spec-type": "content-playlist",
>          "generic-trigger-spec-value": {
>              "playlist": "https://www.example.com/hls/title/index.m3u8 <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.example.com_hls_title_index.m3u8&d=DwMFaQ&c=udBTRvFvXC5Dhqg7UHpJlPps3mZ3LRxpb6__0PomBTQ&r=XniVbishGiO2Ao9hKqSc-hTVIWCi3T-x6GdHR4ZTgoM&m=971EsgFLP9ZLZjNqyHBn_eP79-nLrsreGAuMd4CdJ1bGkZZhLGpP43_nqnMc4Fh-&s=WNpDRf7l_aoJVrQzvMwJZXKtjzmEmn83XzqmqILOIaA&e=>",
>
>              "url-type": "published",             "media-protocol": "hls"
>           }
>        }
>
> In this case no capability tuple would be changed. However, we would not
> be able to specify whether the different url types are supported or not.
>
> Any preference from your side?
>
[AA] I prefer Option B. The URL type is an instruction on how to interpret
the spec, along the lines of "media-protocol".
If there's a need to publish an individual capability around this, it may
be added just like the CI/T protocol capability list (section 9.3).


>
>>
>>
>>    1. For #7, can you provide more information as to what changes to
>>    error codes you are considering?
>>
>> The only error code that we have for now is etimeout, to support
>> TimePolicy
>> [SM/NS] Adding desginated error codes whenever an extestion is defined,
>> would not scale. There is an "eextension" error code that should be used
>> for every extension related error. Furthermore, the error object
>> includes a "description" field that can be used - so extension specific
>> error information can be placed in the "description" field.
>>
> When defining a new extension (like a TimePolicy), that may have specific
>> erros (e.g. "timeout"), we should also define the required format of the
>> error description to allow parsing by the uCDN. So the error would be of
>> type "eextension" and the description would be
>>
> "{subtype: timeout}". Alternatively, we can consider adding a general
>> "description-dict" field to the error and utilze it in the same manner
>> instead (having a per extension, predefined structre)
>>
> [AA] etimeout is different from eextension. The latter is defined now as
an error in parsing the extension (e.g. malformed extension syntax), or
lack of support for the extension.
etimeout communicates back to uCDN that dCDN supports the extension and
parsed it correctly, however, couldn't execute the trigger within policy
constraints specified in the extension.
This has broader use in the extension subsystem than just time-out. It is
different from ereject, which indicates that the trigger was not picked up
for execution.

>
> On Mon, Oct 30, 2023 at 10:22 AM Alan Arolovitch <alan@2you.io> wrote:
>
>> Sanjay, Nir,
>> Thanks, see my comments below
>>
>> Best regards
>> Alan
>>
>> On Sun, Oct 29, 2023 at 5:09 PM Mishra, Sanjay <sanjay.mishra@verizon.com>
>> wrote:
>>
>>> Hi Alan - Nir and I discussed your email below, and recommend the
>>> following:
>>>
>>>
>>>    1. For items 1 to 3 are new extensions you are proposing and those
>>>    may be just easy to define in a new draft.
>>>
>>> Sounds good, I'll work on the draft once we finalize the cache
>> management spec at SVTA.
>>
>>
>>>    1. For #4, this appears a heavy lift in the current draft as some of
>>>    the capabilities such as duration and recurrence and the RFC7265 brings
>>>    added complexity for dCDN and some dCDN may not support. It may be best to
>>>    leave Timepolicy as is defined in v2 but JCAL policy can be added in the
>>>    new draft.
>>>
>>> I can see that JCAL/iCalendar support can be somewhat of a lift, even
>> though there's a number of JCAL libraries out there.
>> At the same time, the TimePolicy extension in its current form is a
>> partial ad-hoc scheduling implementation, and should be obsoleted by
>> RFC7265,
>> which is a well-established IETF standard with implementation base.
>> Do we want to release CI/T v2 that is obsolete at the time of release?
>> If dCDN doesn't support some advanced JCAL scheduling features like
>> recurrence, there's ample room to manage that using eextension error code
>> in Error.V2
>>
>>>
>>>    1.  Items 5 & 6 to generalize playlist to an object list is
>>>    reasonable and we can add those in the next revision (v10) early Dec.
>>>
>>> Great, please let me know what is the best way to add those
>> In the spirit of iterative changes, I propose to consider three minor
>> features that may belong in the core CI/T v2 spec, rather than the cache
>> management extension:
>> - add trigger execution priority in Trigger.v2, to allow uCDN to
>> introduce urgent triggers
>> - add an optional object list to Trigger Status v2; this is to show to
>> uCDN how dCDN resolved playlist (aka objectlist) provided to it via
>> content.playlist(objectlist) spec
>> - add an optional object list to Error.v2
>> - update trigger spec objects that use URLs (which is all trigger specs
>> except for CCID) to add a field that indicates the type of URL to use -
>> published URL vs. cache key URL
>>
>> If we do that, we can have a clean break between the core CI/T v2 draft
>> on hand, and 2 new drafts to be submitted later - cache management trigger
>> extensions and
>> cache management interface.
>> Also, this would be a higher priority than adding JCAL support to v10.
>>
>>    1. For #7, can you provide more information as to what changes to
>>    error codes you are considering?
>>
>> The only error code that we have for now is etimeout, to support
>> TimePolicy
>>
>>> Thanks
>>> Sanjay/NIr
>>>
>>> On Thu, Oct 26, 2023 at 1:26 PM Alan Arolovitch <alan@2you.io> wrote:
>>>
>>>>
>>>> Hello
>>>>
>>>> I'm leading the cache management interface project at SVTA. The scope
>>>> is to define a full-fledged CDNi-compliant cache management interface as
>>>> part of the open caching architecture
>>>> We are heading towards completion of the initial spec draft, and I
>>>> would like to share my thoughts on how to best bring this work into CDNi.
>>>> The current high-level scope includes:
>>>> - Trigger-based cache data operations that rely on and extend CDNi
>>>> triggers v2 as currently defined in CDNI CI/T 2nd edition
>>>> - Additional CDNi metadata objects allowing uCDN to assign cache
>>>> objects in configuration hierarchy to cache buckets; tag cache objects for
>>>> use in triggers via content.ccid trigger type; indicate cache object
>>>> priority
>>>> - Cache bucket management API
>>>>
>>>> The current thinking is to split the work into two documents - one that
>>>> specifies extensions to triggers v2, and the other that pertains to cache
>>>> management specific metadata and related API.
>>>>
>>>> If so, would it make sense to incorporate the triggers v2 changes into
>>>> the current draft - all or some of them, or introduce them as a separate
>>>> document?
>>>>
>>>> The proposed triggers v2 change scope is as follows:
>>>> 1. New trigger extension PrepositionPolicy, per paragraph 8 of CDNI
>>>> CI/T v2, governing prepositioning policies like retry, patrial retrieval,
>>>> preposition methods, concurrency and bandwidth, and use of CDNi metadata
>>>> 2. New trigger extension PurgePolicy, governing purge semantics
>>>> 3. New trigger extension CommonPolicy, governing trigger execution
>>>> priority and type of URLs referenced in triggers (published vs. cache-key
>>>> URLs)
>>>> 4. Changes to trigger extension TimePolicy (8.2 in CDNi CI/T v2),
>>>> adding trigger execution scheduling, based on JSON-based iCAL [RFC7265],
>>>> allowing specifying start, stop, recurrence, duration, timezone etc.
>>>> 5. Changes of new content.playlist trigger spec(7.5.1 in CDNi CI/T v2)
>>>> to content.objectlist spec, in conjunction of introducing new types of
>>>> object list, in addition to hls, dash and mss types per 7.5.2 in CDNi CI/T
>>>> v2, allowing specifying lists of objects for trigger in JSON-encoded and
>>>> plain text formats
>>>> 6. Changes to Trigger Status Resource v2 (6.1.3 in CDNi CI/T v2) to
>>>> specify objectlists that were derived from content.objectlist triigger spec
>>>> 7. Changes to error codes in Error v2 to support the new extension
>>>> functionality
>>>>
>>>> One possible option is to incorporate changes to existing objects
>>>> (items 4-7) in the current draft, and defer the new trigger extensions
>>>> (1-3) to a separate document.
>>>>
>>>> Sanjay, Kevin,
>>>> I would appreciate some time in the open mic section in Prague to talk
>>>> about this
>>>>
>>>> Kind regards
>>>> Alan
>>>>
>>>>
>>>> _______________________________________________
>>>> CDNi mailing list
>>>> CDNi@ietf.org
>>>>
>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.ietf.org_mailman_listinfo_cdni&d=DwIGaQ&c=udBTRvFvXC5Dhqg7UHpJlPps3mZ3LRxpb6__0PomBTQ&r=XniVbishGiO2Ao9hKqSc-hTVIWCi3T-x6GdHR4ZTgoM&m=klLmU7WL8P8gyd8m8z7YB4NCt4EbVkWgNY8xAAHx_jHe9zZVF9x85ykXTw7n3KgG&s=9VNsXLtJaYQ0fxZWKYHdXOx9VLDAIzhrpd1OxV4QrR8&e=
>>>>
>>>
>>

-- 
Alan Arolovitch
CEO, 2You IO
*E* alan@2you.io | *M* +1.617.8939400 <(617)%20893-9400> | *W* www.2you.io