Re: [Netconf] LC on subscribed-notifications-10

Kent Watsen <kwatsen@juniper.net> Tue, 08 May 2018 20:04 UTC

Return-Path: <kwatsen@juniper.net>
X-Original-To: netconf@ietfa.amsl.com
Delivered-To: netconf@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4986A12D77B for <netconf@ietfa.amsl.com>; Tue, 8 May 2018 13:04:37 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 4.29
X-Spam-Level: ****
X-Spam-Status: No, score=4.29 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, GB_SUMOF=5, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=1.989, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=juniper.net
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ydOBNC3-ON67 for <netconf@ietfa.amsl.com>; Tue, 8 May 2018 13:04:33 -0700 (PDT)
Received: from mx0a-00273201.pphosted.com (mx0a-00273201.pphosted.com [208.84.65.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 29A0E126DEE for <netconf@ietf.org>; Tue, 8 May 2018 13:04:33 -0700 (PDT)
Received: from pps.filterd (m0108159.ppops.net [127.0.0.1]) by mx0a-00273201.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w48JsSCu012413; Tue, 8 May 2018 13:04:29 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; h=from : to : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=PPS1017; bh=Da3RYlA2E2GHlBN4HUa4lUMnvXiekUBAo+ZVKjbtHqw=; b=dhQBlB2m3j7/Ubfk5UqhpLy8qTJ17nOI4g/Iza9cfhtA1rMSGbHJcVWNVqu6iwUauEnj Jka76rOybmb7uraiG/YAvhJ22vyXGQoB/1jhbO6KsoKUkb/ESC4b1FXIin40D0stspPz l91yyKyd7vNnUwsDtSqMOg8TPPllKoD7jBxYLjG1pYuNUfl3PaQt4t5Jc+hqoBM8elU4 mR1rtjF7rcoZOzQyQMILjYg7cAorFF0FVk1JJfpIbRAC46XeLb6Cn4GaibWdJA2rrHoS ELOQdwrMpuWxtwN4/QgrwjrYSibpnRh5jJlzyRDWafeXJCgV0IWJpiRnL/8S2f/j+5nt IQ==
Received: from nam01-sn1-obe.outbound.protection.outlook.com (mail-sn1nam01lp0114.outbound.protection.outlook.com [207.46.163.114]) by mx0a-00273201.pphosted.com with ESMTP id 2huhsvg4tc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 08 May 2018 13:04:29 -0700
Received: from BYAPR05MB4230.namprd05.prod.outlook.com (52.135.200.153) by BYAPR05MB4421.namprd05.prod.outlook.com (52.135.202.159) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.755.10; Tue, 8 May 2018 20:04:26 +0000
Received: from BYAPR05MB4230.namprd05.prod.outlook.com ([fe80::5c50:c79f:dbd0:7a9a]) by BYAPR05MB4230.namprd05.prod.outlook.com ([fe80::5c50:c79f:dbd0:7a9a%13]) with mapi id 15.20.0755.012; Tue, 8 May 2018 20:04:26 +0000
From: Kent Watsen <kwatsen@juniper.net>
To: "Eric Voit (evoit)" <evoit@cisco.com>, Alexander Clemm <ludwig@clemm.org>, "netconf@ietf.org" <netconf@ietf.org>
Thread-Topic: [Netconf] LC on subscribed-notifications-10
Thread-Index: AQHTvAAnlMdwSaUGiEGsguuFvEIgr6PTNMYAgAKRSACAHsEbAIAEpeaAgAxV1oCAAIbkgIAIxKuAgAHWLYCAAWPcgIABfIqAgBLPcYA=
Date: Tue, 8 May 2018 20:04:26 +0000
Message-ID: <CEE5B81C-31AE-40C6-B2F0-23D93C644D85@juniper.net>
References: <17B884BF-0BB8-4B7C-BFBB-0AAFBEA857F6@juniper.net> <aedeb7390d0b4faa9f2bf12c2fe45cd2@XCH-RTP-013.cisco.com> <040a01d3be9f$09700490$1c500db0$@clemm.org> <2089023D-DA09-48E9-8F37-8FE459DC4F49@juniper.net> <dfc78f2b1062498388824b1f6dd97ff6@XCH-RTP-013.cisco.com> <1EC2E732-C524-4552-A3AD-27507239F763@juniper.net> <2b788c22f7ee4af889813b805348d69a@XCH-RTP-013.cisco.com> <9E7F3A66-98B9-4528-882C-43AAD19F0AEC@juniper.net> <96615f0331cd455182901ddf3e6ece23@XCH-RTP-013.cisco.com> <7F8F2AF4-28A5-4016-B727-10CAF6A093AF@juniper.net> <87fbe3cb907a473f816295c4545bd7fa@XCH-RTP-013.cisco.com>
In-Reply-To: <87fbe3cb907a473f816295c4545bd7fa@XCH-RTP-013.cisco.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
user-agent: Microsoft-MacOutlook/f.20.0.170309
x-originating-ip: [66.129.241.10]
x-ms-publictraffictype: Email
x-microsoft-exchange-diagnostics: 1; BYAPR05MB4421; 7:BoQ4YwhaF0y6ba4aIpoe0lXRkGNXgZLqgsA/uVuPPq6VK1Nf/Rlwzs6VsUFP3Lp/J8lQ1tb1TdoZGjI+U38R4G8VDw9SjHqKCfvl3sDrLJCy+ywPZh9e5rHlJP6i2jj7lnKsfzdEGh+vPHLBKNZIbGDJmPIp+l3dOxbcGEtqeaIZzOSZJMx0B9yTxvL4bPjObY1H50CDvcFrmc6PW/tkvvOfFRQ0MWnnTc6UkiMS1CiP306eNmeQUYQYJZftcBqB
x-ms-exchange-antispam-srfa-diagnostics: SOS;
x-ms-office365-filtering-ht: Tenant
x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:BYAPR05MB4421;
x-ms-traffictypediagnostic: BYAPR05MB4421:
x-microsoft-antispam-prvs: <BYAPR05MB4421E7B28BF3A027DA16CE08A59A0@BYAPR05MB4421.namprd05.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(28532068793085)(10436049006162)(166708455590820)(192374486261705)(788757137089)(95692535739014)(21748063052155)(17755550239193);
x-ms-exchange-senderadcheck: 1
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231254)(944501410)(52105095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(6072148)(201708071742011); SRVR:BYAPR05MB4421; BCL:0; PCL:0; RULEID:; SRVR:BYAPR05MB4421;
x-forefront-prvs: 0666E15D35
x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(376002)(39860400002)(396003)(366004)(346002)(39380400002)(189003)(199004)(51444003)(69234005)(99286004)(446003)(15650500001)(2616005)(6512007)(93886005)(7110500001)(53936002)(102836004)(5250100002)(6486002)(316002)(236005)(6306002)(6506007)(551984002)(54896002)(59450400001)(53946003)(86362001)(26005)(53546011)(186003)(2420400007)(76176011)(476003)(229853002)(68736007)(83716003)(966005)(82746002)(486006)(2501003)(11346002)(25786009)(606006)(81156014)(8936002)(105586002)(106356001)(478600001)(8676002)(33656002)(9326002)(3280700002)(7736002)(3660700001)(110136005)(6246003)(3846002)(6116002)(6436002)(2900100001)(66066001)(5660300001)(36756003)(2906002)(14454004)(81166006)(58126008)(97736004)(579004); DIR:OUT; SFP:1102; SCL:1; SRVR:BYAPR05MB4421; H:BYAPR05MB4230.namprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1;
received-spf: None (protection.outlook.com: juniper.net does not designate permitted sender hosts)
x-microsoft-antispam-message-info: Bk3eIrSoFGXSM6xITiDUZZxxZgx7h/bMp2w4vwzq9gLrwrZxTDaz/D64qchOXXpIuwr1pX0O2+A8OSDt4hYPsgnU8Z09+2SqKfYEPai09cK7+NcwOWv0mmSNwjV7p4z0r1WqpbbunV1CjqkQ+B8uC41jlJkIQOZoTQtN77dYhE3smeKGEwyY9jit2EWv83gy
spamdiagnosticoutput: 1:99
spamdiagnosticmetadata: NSPM
Content-Type: multipart/alternative; boundary="_000_CEE5B81C31AE40C6B2F023D93C644D85junipernet_"
MIME-Version: 1.0
X-MS-Office365-Filtering-Correlation-Id: a8cbbac1-5430-444f-6a2d-08d5b51ee663
X-OriginatorOrg: juniper.net
X-MS-Exchange-CrossTenant-Network-Message-Id: a8cbbac1-5430-444f-6a2d-08d5b51ee663
X-MS-Exchange-CrossTenant-originalarrivaltime: 08 May 2018 20:04:26.1245 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: bea78b3c-4cdb-4130-854a-1d193232e5f4
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR05MB4421
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2018-05-08_07:, , signatures=0
X-Proofpoint-Spam-Details: rule=outbound_spam_notspam policy=outbound_spam score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1711220000 definitions=main-1805080187
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/wUxonPHh64t-rIYrqqO32ONCl80>
Subject: Re: [Netconf] LC on subscribed-notifications-10
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Network Configuration WG mailing list <netconf.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netconf>, <mailto:netconf-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netconf/>
List-Post: <mailto:netconf@ietf.org>
List-Help: <mailto:netconf-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netconf>, <mailto:netconf-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 08 May 2018 20:04:37 -0000

Hi Eric,

I'm just noticing that the github repo for this draft also (same as restconf-notif) does not contain source files and scripts to compile the drafts.  Is this the case with all the yang-push++ drafts?

See below for more <KENT5>

Kent // contributor



On 4/26/18, 12:49 PM, "Eric Voit (evoit)" <evoit@cisco.com<mailto:evoit@cisco.com>> wrote:

Hi Kent,

All changes below are also in the latest in the pending v13 draft within:
https://github.com/netconf-wg/rfc5277bis/blob/master/draft-ietf-netconf-subscribed-notifications-13.txt<https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_netconf-2Dwg_rfc5277bis_blob_master_draft-2Dietf-2Dnetconf-2Dsubscribed-2Dnotifications-2D13.txt&d=DwMGaQ&c=HAkYuh63rsuhr6Scbfh0UjBXeMK-ndb3voDTXcWzoCI&r=9zkP0xnJUvZGJ9EPoOH7Yhqn2gsBYaGTvjISlaJdcZo&m=pyf5B1nLn0f-7e_2ibrHycJ2En-BzzKhdNIWD42jpgs&s=zuc13Lg3JIr9bsMfPGYNGeV9Kedfi-uCEfHYVm00pZI&e=>

From: Kent Watsen, April 25, 2018 6:07 PM



[further trimming]





 <Eric4>  Ahhh.  I got it now.  The two reasons are:

·         Insufficient resources (e.g., CPU)

·         Unsupportable volume (i.e., a bandwidth constraint)



I adjusted the diagram to:
                      .........
                      : start :
                      :.......:
                          |
                 establish-subscription
                          |
                          |   .------modify-subscription-------.
                          v   v                                |
                    .-----------.                        .-----------.
         .--------. | receiver  |-insufficient CPU, b/w->| receiver  |
     modify-       '|  ACTIVE   |                        | SUSPENDED |
     subscription   |           |<---CPU, b/w sufficient-|           |
         ---------->'-----------'                        '-----------'
                          |                                    |
               delete/kill-subscription                   delete/kill-
                          |                               subscription
                          v                                    |
                      .........                                |
                      :  end  :<-------------------------------'
                      :.......:



With the supporting bullet items under the diagram:



·         A publisher may choose to suspend a subscription when there is insufficient CPU or bandwidth available to service the subscription. This is notified to a subscriber with a "subscription-suspended" state change notification.



·         A suspended subscription may be modified by the subscriber (for example in an attempt to use fewer resources).  Successful modification returns the subscription to an active state.



·         Even without a "modify-subscription" request, a publisher may return a subscription to the active state should the resource constraints clear.  This is announced to the subscriber via the "subscription-resumed" subscription state change notification.



<KENT4> yes, this is it.  Just a couple nits, can you widen the diagram a couple characters to give more dashes (-) around the "insufficient" line?



<Eric5> Done.



Also, in the 3rd bullet, maybe replace "resource constraints clear" to "resource constraints become sufficient again" so that it binds with the words in the diagram?



<Eric5> Done.  I also inserted changes matching your “insufficient CPU, b/w” request into the Configured receivers Section 2.5.1.

<snip/>

<Eric3>  Added the descriptive paragraph requested in the middle of the three paragraphs below...

It is possible to place a start time on a configured subscription.  This enables streaming of logged information immediately after restart.

Replay of events records created since restart can be quite useful.  This allows event records generated before transport connectivity was supportable by a publisher to be passed to a receiver.  In addition, event records logged before restart are not sent.  This avoids the potential for accidental event record duplication.  Such duplication might otherwise be likely as a configured subscription’s identifier before and after the reboot is the same, and there may be not be evidence to a receiver that a restart has occurred.  By establishing restart as the earliest potential time for event records to be included in notification messages, a well-understood timeframe for replay is defined.

Therefore, when configured replay subscription receivers first become ACTIVE, buffered event records (if any) will be sent immediately after the "subscription-started" notification.  And the leading event record sent will be the first event record subsequent to the latest of four different times: the "replay-log-creation-time", "replay-log-aged-time", "replay-start-time", or the most recent publisher boot time.

<Kent3> Hmmm, I'm having a negative reaction to the "event records logged before restart are not sent" bit.  I know what you are trying to do, but I worry that this behavior might drop important logs, perhaps to the advantage of an adversary.  Note that some devices implement an <edit-config> with a restart.  Maybe the solution should require publishers to maintain a per configured-subscription awareness of (roughly) which log was sent last?   - and notify the receiver when a restart has occurred, or when the replaying of events occurs, so that they can be aware that there might be some duplicates?

<Eric4>  The current solution guarantees no duplicates, and also informs the receiver of each new “start-time”.  This allows the receiver to attempt to reconstruct any gaps from the last event previously pushed, should the choose to attempt such reconstruction.   As a dynamic subscription has no such boundary constraints on replay and boot time, all a subsequent dynamic subscription needs to do is to request the events between the last received event previously received from that configured subscription and the new replay-start-time.

<Kent4> So, the receiver is informed of each new "start-time" via the "subscription-started" control message, and then MUST do a short-lived dynamic subscription to scoop-up any possibly-missed logs, for which there may be none?   If we choose to keep this behavior, the draft should say this more clearly, perhaps in the Security Considerations section…

<Eric5> Added the following text as the last paragraph in the Implementation Considerations Section...

For configured replay subscriptions, the receiver is protected from duplicated events being pushed after a publisher is rebooted.  However it is possible that a receiver might want to acquire event records which failed to be delivered just prior to the reboot. Delivering these event records be accomplished by leveraging the “eventTime” from the last event record received prior to the receipt of a “subscription-started” state change notification.  With this “eventTime” and  the “replay-start-time” from the “subscription-started” notification, an independent dynamic subscription can be established which retrieves any event records which may have been generated but not sent to the receiver.

 <KENT5> Is this really limited to reboots, of any restarting of a configured subscription?  Next, I view this as a Security Consideration, since nefarious things can happen when a device reboots and note that a DoS could extend the gap to hours or days.  I think that this draft (the text above) is watering down the issue.  In my view, this is a huge consideration, along the lines of a receiver really MUST always try to use a dynamic subscription to fill in any gaps.  It almost begs the question for why configured subscriptions are supported at all.


<Eric4>  Note that this solution acts identically for loss of events when the platform *doesn’t* reboot, and events are just lost due to some overflow.  See the Section 2.5.2 text:
   “However if events are lost (rather than just delayed) due to replay buffer overflow, a new "subscription-started" must be sent.  This new "subscription-started" indicates an event record discontinuity.”
I.e., this way the receiver doesn’t have to do forensics to determine and attempt to determine the cause of a transient loss of events on a publisher.

<Kent4> okay, but note that this section refers to Section 2.4.2.1 (not 2.5.2).   I understand what you mean, but I think more text is needed to convey it to readers…

<Eric5> Added the sentence:

The most recent publisher boot time ensures that duplicate event records are not replayed from a previous time the publisher was booted.

In any case, tracking the last event sent to each receiver will be a pretty hard requirement to meet during a publisher crash.  Things are simpler to just let the receiver attempt a reconstruction should they need to.



<Kent4> this I agree with, but I really don't like the fact that receiver MUST do a short-lived dynamic subscription to scoop-up any possibly-missed logs, for which there may be none.  Perhaps we could add more values into the "subscription-started" notification message that would enable to receiver to make a local determination if such a dynamic subscription would be  helpful?



<Eric5> I recommend against providing extra objects/reasons in the “subscription-started” at this time.  Publishers might not want to advertise a reboot, and they might not want to advertise why there was loss in event continuity.   All that should matter to a receiver is that such a discontinuity existed, and they have a way to try to fill event the gap should they care.  If the need for more data and the cause of the discontinuity turns out to be required, we can always augment here with future objects.



<KENT5> first, I'm still not 100% sure if this is just a reboot problem, or any time the subscription is restarted/resumed.  Next, can you explain what info could be provided that might allow a client to make a local decision as to whether a dynamic subscription is needed of not, and does the "replay-start-time" node provide it?





<Kent3> Going back to my original comment, the new paragraph helps, it certainly caught my attention regarding reboots wiping out the replay log buffer.



<Eric4>  There is no requirement that the reboot wipe outs out the buffer (the solution is agnostic to that).   The only requirement is that a configured subscription replay start no earlier than the last reboot time.



<Kent4> I'm glad to hear that the logs before restart aren't lost, just rather that there is no attempt to send them by default.   This wasn't all that obvious to me from what you wrote before.



<Eric4>  Tweaked a Section 2.4.2.1 sentence to say:



This document puts no restrictions on the size or form of the log, where it resides within the publisher, or when event record entries in the log are purged.



I suggest adding text that clarifies this, and details the need for a short-lived dynamic-subscription.



<Eric4> The tweak above, with the suggested text in the Implementation Considerations section above hopefully covers this.



<KENT5> the "purged" part helps, but whyis this information buried inside a section titled "Requesting a replay of event records"?



<snip/>



>   Re: the 6th paragraph, I'm surprised that requirements for transport-

>   bindings wasn't discussed before in its own section.  It seems like

>   a new thing here, that a receiver's transport might not be secure.

>   I'm okay with and support this, btw, as its sometimes better to

>   offload devices thru the use of a local collector node, for which

>   encryption may not be needed...



Agree with your comments.

<KENT> but where's the change?  Shouldn't this have been discussed

previously in the draft somewhere?



<Eric2> The vast majority of transport binding discussions are addressed in the transport document.  So I see this as guidance to a documenter of a transport document.  Perhaps that is unnecessary for this document, and the paragraph should be removed.  I would be fine with that.



<Kent2> wait, I don't think you can offload transport-requirements to the transport-binding documents.   I think that this document needs to define the requirements and the transport-binding documents then show how they adhere to them.   Does this make sense?



 <Eric3>With the varied transports of NETCONF, HTTP/RESTCONF, UDP, CoAP already in drafts my belief is that only a high level subset of transport requirements spanning the universe of potential transports can potentially be abstracted in this document.  The secure transport requirement is one such example, and that is a recommendation.  The Security Considerations section is a good place for that one.  Beyond the security recommendation there aren’t too many transport independent possibilities.   I did just added one new transport requirement to the very end of “Event Streams” section though (which perhaps wasn’t explicit enough elsewhere).  This requirement is:



“Event records MUST NOT be delivered to a receiver in a different order than they were placed onto an event stream.”



What other transport-independent transport requirements might there be which are not already documented?



Stepping back, I see the transport draft plus this drafts providing the aggregate set of requirements for a full solution.  And I had thought it would be up to the draft authors plus WGs to validate that the sum of the documents is sufficient.





<Kent3> unsure.  For example, RFC 6241has Section 2 (Transport Protocol Requirements) that the SSH and TLS binding drafts refer to.  It seems that this draft should have a similar section that highlights what MUST or MUST NOT be supported.  It could even include some additional text indicating that bindings MAY introduce additional requirements.



<Eric4> I re-read RFC6241 Section 2 a couple times.  There are a comparisons can be made from that document to a subset of requirements currently in this document’s security section.  But I don’t see anything missing on the MUST and MUST NOT side of things.   FYI: the specific requirements I am thinking of are:



   For both configured and dynamic subscriptions the publisher MUST

   authenticate and authorize a receiver via some transport level

   mechanism before sending any updates.



   A secure transport is highly recommended and the publisher MUST

   ensure that the receiver has sufficient authorization to perform the

   function they are requesting against the specific subset of content

   involved.



   With configured subscriptions, one or more publishers could be used

   to overwhelm a receiver.  Notification messages SHOULD NOT be sent to

   any receiver which does not support this specification.  Receivers

   that do not want notification messages need only terminate or refuse

   any transport sessions from the publisher.



That is about it for common stuff.  Considering the wide variety of potential transports, and ubiquity for the need of stream transports, I am simply not aware of any more common requirements.  If you need me to,  I can extract these three requirements, and put this under a separate transport requirements section.   But this seems excessive, especially as we have transport specific documents with eyes on them from the WG.  But if really do want this, I will place these into a new, separate section; and I will add your text: “bindings MAY introduce additional requirements.”



<Kent4> yes, this is what I'm thinking is needed, even if just for these 3 requirements + a statement that each transport MAY impose additional limitations (not so much a "requirement" as a "fact of life using said transport" I think)



<Eric5>  Move to a new section just before Security Considerations.   Added the last sentence:



Additional transport requirements will be dictated by the choice of transport used with a subscription. For an example of such requirements with NETCONF transport, see [I-D.draft-ietf-netconf-netconf-event-notifications].



<KENT5> This new section "Transport Considerations" seems to be a mashup of requirements, security considerations, and recommendations and, as such, is a bit confusing.  I recommend ensuring the right info is in the right sections.  It only mentions the need for one-way authentication, is that correct?  The first paragraph's use of the word "authorize" confuses me, especially in context of the 2nd paragraph, what would the "transport" authorize?  BTW, maybe this section needs to more clearly specify that it only regards the transport for dedicated notification channels (not the transport for NC or RC).