Re: [Netconf] IETF 101 SN Question 1: Proper designation of receiver

Martin Bjorklund <mbj@tail-f.com> Fri, 29 June 2018 08:11 UTC

Return-Path: <mbj@tail-f.com>
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 C5524128BAC for <netconf@ietfa.amsl.com>; Fri, 29 Jun 2018 01:11:05 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
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 QRS1oJLZHad9 for <netconf@ietfa.amsl.com>; Fri, 29 Jun 2018 01:11:00 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id 08E06124BE5 for <netconf@ietf.org>; Fri, 29 Jun 2018 01:11:00 -0700 (PDT)
Received: from localhost (h-80-27.A165.priv.bahnhof.se [212.85.80.27]) by mail.tail-f.com (Postfix) with ESMTPSA id 63DE41AE02F0; Fri, 29 Jun 2018 10:10:58 +0200 (CEST)
Date: Fri, 29 Jun 2018 10:10:57 +0200 (CEST)
Message-Id: <20180629.101057.1590202307624767148.mbj@tail-f.com>
To: kwatsen@juniper.net
Cc: evoit@cisco.com, netconf@ietf.org
From: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <F251AA08-A5FE-4219-BCDC-FAC2F988FE10@juniper.net>
References: <BD5235E8-596A-40A8-ACDE-3AD947E6D8D9@juniper.net> <89a99290a9ff4addb3d8c537aae89dbf@XCH-RTP-013.cisco.com> <F251AA08-A5FE-4219-BCDC-FAC2F988FE10@juniper.net>
X-Mailer: Mew version 6.7 on Emacs 24.5 / Mule 6.0 (HANACHIRUSATO)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=utf-8
Content-Transfer-Encoding: base64
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/ZWakjqQ5caBBaMTB5YEQi0sNQuQ>
Subject: Re: [Netconf] IETF 101 SN Question 1: Proper designation of receiver
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.26
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: Fri, 29 Jun 2018 08:11:06 -0000

Kent Watsen <kwatsen@juniper.net> wrote:
> 
> 
> >> >> > Correct.  But your question was "can you use netconf-notif without
> >> >> > a leafref
> >> >> to...".
> >> >> > Needing both drafts is absolutely the case for dynamic subscription
> >> >> > support, and ietf-netconf-server would not be needed here.
> >> >>
> >> >> I read the above a few times, but I'm having a hard time understanding it.
> >> >> Can you say it differently or provide an example?
> >> >
> >> > Dynamic subscriptions over NETCONF requires draft-ietf-netconf-netconf-
> >> event-
> >> > notifications.
> >> 
> >> Where is the dependency?  I don't see anywhere in the 3 RPCs and associated
> >> error-info definitions that have a reference to the identity in that draft.
> >
> > The dependency is a document requirements dependency: deployment of NETCONF
> > based dynamic subscriptions requires support of both relevant requirements
> > sections 5, 7, & 8 from draft-ietf-netconf-netconf-event-notifications in
> > addition to draft-ietf-netconf-subscribed-notifications.  
> 
> Sure, I get this, but we're talking about if there is YANG-level dependency,
> for which I believe we've concluded that the answer is "no".
> 
> What this means is, for servers that only want to support NETCONF-based 
> dynamic subscriptions (no configured subscriptions), then the 
> ietf-netconf-subscribed-notifications module can be listed in yang-library
> as *not implemented*.

No, since the server must implement the rpcs, the module must be
listed as "implemented" (the feature "configured" would not be
advertised though).


/martin


> And for servers that want to support NETCONF-based 
> configured subscriptions, then ietf-netconf-subscribed-notifications can
> be listed in yang-library as *implemented*.
> 
> Looking at the thread that led up to this point, this means that it would
> be okay for ietf-netconf-subscribed-notifications to have a leafref to a
> global /netconf-server/call-home/netconf-client, while not forcing the
> implementation of the ietf-netconf-server module, for servers that only
> want to support dynamic subscriptions.
> 
> And, to the question that started this fork in the thread "is it possible
> that a device wants to use SN but doesn't *implement* ietf-netconf-server",
> the answer is "yes".
> 
> 
> 
> 
>  
> >> >> >> (b) this seems like a possibility, but then I think this make the
> >> >> >> case for why a leafref to the global *conf servers definitions won't always
> >> >> work.
> >> >> >
> >> >> > Agree that nothing here will always work.  Deployments commonly will
> >> >> > have a heterogeneous mixture of model ecosystem models.
> >> >> >
> >> >> > This actually makes a *very* strong case for why the leafref should be
> >> >> > added as an augmentation from the *conf-server models.  That way
> >> >> > leafref augmentations are explicitly tied to the actual implementation of
> >> the
> >> >> model against which they refer.
> >> >>
> >> >> Not in the *conf-server models, the augments go into the *conf-notif
> >> models, I
> >> >> assume that is what you meant.
> >> >
> >> > My assertion is a good solution would be updating ietf-netconf-server.yang
> >> > per what is below.  Note that an answer even further below regarding the
> >> > sharing of a single NETCONF session across multiple subscriptions and typical
> >> > RFC6241 protocol interactions is assumed.  But we could also insert your
> >> > ietf-netconf-server.yang grouping just as effectively where the leafref is seen.
> >> >
> >> > Anyway here are the following changes which would be made to ietf-
> >> netconf-server.yang
> >> >
> >> >  import ietf-subscribed-notifications { prefix sn; }
> >> >  import ietf-netconf-subscribed-notifications { prefix nsn; }
> >> >
> >> >  feature subscription-support {
> >> >    description
> >> >        "The 'subscription-support' feature indicates that the NETCONF server
> >> >         supports configured subscriptions over call-home connections.";
> >> >       reference
> >> >        "RFC xxxx: Customized Subscriptions to a Publisher's Event Streams";
> >> >     }
> >> >
> >> > augment "/sn:subscriptions/sn:subscription/sn:receivers/sn:receiver" {
> >> >   if-feature "subscription-support";
> >> >   when 'derived-from(../../../transport, "nsn:netconf")';
> >> >   description
> >> >      "This augmentation allows NETCONF specific parameters to be exposed for
> >> a receiver.";
> >> >    leaf netconf-endpoint {
> >> >      type leafref {
> >> >        path "/ncs:netconf-server/ncs:call-home/ncs:netconf-client/ncs:name";
> >> >      }
> >> >      description
> >> >        "Remote client which need to initiate the NETCONF transport if an
> >> existing
> >> > NETCONF session from that client is not available.";
> >> >    }
> >> >  }
> >> >
> >> > With such a construct, it is impossible to add a leafref (or grouping) within
> >> > ietf-subscribed-notifications unless ietf-netconf-server.yang exists.
> >> 
> >> True, and thanks for providing a concreate example.  Though I thought we
> >> concluded
> >> before that there might be cases where the global netconf-server isn't
> >> implemented?
> >> Now you're okay making that a requirement?  (I'm okay with that, if it works)
> >
> > I am ok with making it a requirement for drafts
> 
> Okay, assuming we resolve the "I'm not entirely sure if I understand if
> what is planned is legal" issue discussed below.
> 
> 
> > ...subsequent to the current draft-ietf-netconf-netconf-event-notifications.
> 
> This is TBD, per the discussion below, but we can try...
> 
> 
> >   Either a revision to draft-ietf-netconf-netconf-event-notifications, or
> > an update to the ietf-netconf-server.yang.
> 
> Right.   But if the dependency only goes one way, then I think the choice
> is made for us already. 
> 
> 
> >> FWIW, I think that an import statement can also assert that a dependent
> >> module is
> >> implemented.  For instance, in the below case, the xpath in the leafref forces
> >> that the module is implemented:
> >> 
> >>   module ietf-netconf-subscribed-notifications {
> >>     prefix nsn;
> >>     import ietf-netconf-server { prefix ncs; }
> >>     import ietf-subscribed-notifications { prefix sn; }
> >> 
> >>     augment "/sn:subscriptions/sn:subscription/sn:receivers/sn:receiver" {
> >>       if-feature "subscription-support";
> >>       when 'derived-from(../../../transport, "nsn:netconf")';
> >>       description
> >>         "This augmentation allows NETCONF specific parameters to be
> >>          exposed for a receiver.";
> >>       leaf netconf-endpoint {
> >>         type leafref {
> >>           path "/ncs:netconf-server/ncs:call-home/ncs:netconf-client/ncs:name";
> >>         }
> >>         description
> >>           "Remote client which need to initiate the NETCONF transport if
> >>            an existing NETCONF session from that client is not available.";
> >>       }
> >>     }
> >>     ...
> >>   }
> >> 
> >> I prefer this arrangement because it gives tangible meaning for what it means
> >> to *implement* the netconf-subscribed-notifications module.
> >
> > I understand.  As long as we make the choice as to where to land this future
> > leafref after the current draft-ietf-netconf-subscribed-notifications completes,
> > I am good.
> 
> Pending the discussion below...
> 
> 
> 
> >> >> >> This is why I
> >> >> >> was thinking before that your modules might themselves *use* the
> >> >> >> *conf- server-groupings (while pruning out unneeded parts, e.g., the
> >> >> >> "listen" subtree), so that it's independent of what the system has
> >> >> >> implemented at the global level.
> >> >> >
> >> >> > If you have 500 subscriptions, you then have to populate 500 identical
> >> >> groupings.
> >> >>
> >> >> No, you have one grouping, with 500 /netconf-server/call-home/netconf-
> >> client
> >> >> instances.
> >> >
> >> > Yes.    But I don't know why someone would voluntarily do add 500 repeated
> >> > elements to a configuration datastore.
> >> 
> >> At first I was going to point out that, even if using to global netconf server
> >> container, there would still be 500 /netconf-server/call-home/netconf-client
> >> instances, but in looking ahead, I'm wondering if I misunderstand the intended
> >> relationship between transports, subscriptions, and receivers.
> >> 
> >> If it turns out that receivers from different subscriptions can leafref the
> >> same /netconf-server/call-home/netconf-client, then the 500 becomes 1, and
> >> the duplicate data-entry concern goes away.
> >
> > Exactly.  This has always been the objective.
> 
> Okay.  Sorry for being slow to get this.  Please take a close look at SN draft
> to ensure this is super clear there.
> 
> 
> 
> >> >> >  And yes this is possible.  But it makes the part of me which likes
> >> >> > Normalized  data quite uncomfortable.
> >> >> >
> >> >> > But as I said before, it the WG wants such redundancy, fine.  Either
> >> >> > choice need not impact decisions as part of LC.
> >> >>
> >> >> I don't believe that is a WG-preference thing, so much as an outcome of the
> >> >> current design, which is that each receiver for each subscription has its own
> >> >> state-machine and protocol messages.  There is no sharing; no two receivers
> >> can
> >> >> use the same RFC 6241 NETCONF session, which effectively translates to
> >> each
> >> >> receiver having its own /netconf-server/call-home/netconf-client instance,
> >> >> right?
> >> >
> >> > This is incorrect.    Protocol and state-machine messages have been
> >> decoupled
> >> > from the transport session.
> >> 
> >> As mentioned above, I'm wondering if I misunderstand the intended
> >> relationship
> >> between transports, subscriptions, receivers, and maybe publishers too.  Can
> >> you put together a diagram that describes these relationships?
> >
> > A configured subscription on a publisher can have many receivers.
> >
> > A configured subscription on a publisher may only use one type of transport (and one type of encoding).
> >
> > A configured receiver can receive information from multiple configured subscriptions on a single transport session from a publisher.
> 
> I'd like to have statements like these in the SN draft.  Maybe as part 
> of the term definitions, but that might be too much information (busy)
> for terms. The info could be sprinkled throughout the doc, but I wonder
> if that might not already be the case and, if so, then it didn't work
> out too well before (witness my confusion here), so perhaps some other 
> section would be better?
> 
> 
> 
> >> > I am not sure why you think that subscriptions are unable to use a common
> >> > NETCONF session?   Implementations of dynamic NETCONF subscriptions
> >> have
> >> > been doing this for years.    Subscription multiplexing of configured and
> >> > dynamic subscriptions over a common transport is a pre-requisite for
> >> > solution scalability.
> >> 
> >> I think because its underspecified in the SN draft, and there was confusion
> >> with the address and port leafs, and ietf-netconf-subscribed-notifications
> >> only defines an identity (no configuration data model).
> >
> > In a parallel thread to Martin, I have added a sentence aimed here.   Beyond
> > that, configuration data model forces choice of the identity for the configured
> > subscription.
> 
> In that thread, you wrote:
> 
> """
> I have added the following to the NETCONF-Notif document section on configured subscriptions:
> 
> "It is possible to have multiple configured subscriptions sharing a common transport to a single receiver.  The method of identifying that a receiver happens to be the same as used with another subscription is left up to implementers of this specification."
> """
> 
> This is a good sentence (assuming the discussion regarding *why* this is simpler pans out),
> but shouldn't it be in the SN document (not netconf-notif)?
> 
> 
> 
> >> Okay, the answer is that its considered "simpler" to use a single kind
> >> (not instance) of transport.  So, the outcome is, if one receiver of a
> >> subscription is using a NETCONF-based transport, then all the other
> >> receivers of that subscription MUST also be using a NETCONF-based
> >> transport, albeit a different instance of a NETCONF-based transport
> >> (as it would be redundant otherwise).  Correct?
> >
> > Yes
> > 
> >
> >> Assuming this is the case, my question is, why is this "simpler"?  I mean,
> >> assuming an event occurs that a subscription matches, the publisher will
> >> encode a notification message to send, and then iterate over its list of
> >> receivers, sending the same encoded-message to each.  But why is it less
> >> simple if different transports (netconf, restconf, etc.) are used?
> >
> > As can be heard in the recording, and seen on dozens of WG emails, these
> > issues were deeply debated.  As can been seen my slight preference actually
> > was different transports.  And that is how earlier versions of the model
> > covered the issue.  However the WG chose a single transport for rational
> > reasons at and after IETF 100.  The issue was closed and the drafts
> > updated accordingly.  
>  
> Eric, I'm asking for a technical answer.  In a nutshell, what are
> the "rational reasons"?   Yes, I recall your having a preference for
> heterogeneous transports...
> 
> 
> >> BTW, separately, I kind of but not really understand why there is a desire
> >> for the fixed encoding for all the receivers in a subscription.  I understand
> >> the efficiency angle (see prev paragraph), but I get stuck on the idea that,
> >> if there is a *need* to send a different encoding (e.g., "encode-json"),
> >> another encoded message structure is going to have to be created anyway; it
> >> seems like the same number of instructions from that perspective.  Then it
> >> goes to looping over one-subscription-tree or one-tree-per-encoding.  Okay,
> >> then, what makes it better? 
> >
> > Some implementations have claimed it is easy to bind the subscription with
> > the encoding, and difficult to perform filtering before the encoding.  So
> > it is better to force this separation.
> 
> Okay.  (but see next paragraph).
> 
> 
> >> The only thing I can come up with is that it
> >> might be difficult otherwise to express in YANG what encoding is being used
> >> for that receiver.  For instances, if there is a leafref to /restconf-server\
> >> /call-home/restconf-client, nowhere is there an "encoding" field.  Hmmm,
> >> maybe the encodings a restconf server supports could be specified at a
> >> higher level (e.g., /restconf-server/encodings/...), and then it would be
> >> known, on a per-receiver basis, what encoding is used (netconf is always
> >> xml, restconf is per configuration).  Anyway, I'm just wondering if this
> >> is why the encoding for all the receivers in a subscription must be the
> >> same, or is it something else?
> 
> I just sent a question to the WG regarding if ietf-restconf-server should
> have a way configure which encodings it supports.  If this pans out, the
> impact here is that we might want a "must" statement to ensure that the
> selected encoding is supported by the leafref-ed /rcs:restconf-server/
> instance.
> 
> 
> 
> >> In this particular fork in the thread, I think that we're discussing the merits
> >> if leafref-ing vs using a grouping.  If it is the case that the same transport
> >> can be used across subscriptions, then 1) it swings things back to leafref
> >> approach being needed and 2) this fork in the thread is done.  [Assuming that
> >> it’s a leafref, we still need to finalize if it's a leafref to the global
> >> server instance or some SN-specific instance.]
> >
> > I believe leafref is good.  And as long as the leafref is inserted after
> > the current drafts in WGLC complete, I am good.
> 
> Yes, leafref seems needed.  Whether the leafref is global vs. local, and to what
> the leafref points to, are still TBD.
> 
> 
> 
> >> >> >> There is a difference between a server not *implementing* a ietf-*conf-
> >> >> >> server module and the *conf-notif not *using* the *conf-server-grouping
> >> >> >> statements.  My suggestion has been, that the *conf-notif drafts should
> >> >> >> have their own lists of netconf-servers (via "uses" statements), and
> >> >> >> thereby not be dependent on the existence of a global ietf-*conf-server
> >> >> >> instance (which may not exist).
> >> >> >
> >> >> > While technically correct, there are several reasons why this is problematic.
> >> >> > (1) redundancy (see the 500 above)
> >> >>
> >> >> This is a non-issue (see above)
> >> >
> >> > This is still an issue, as the drafts in WGLC support a single NETCONF session
> >> > for all subscriptions and normal protocol operations.
> >> 
> >> As said before, sharing the same transport across subscriptions wasn't clear
> >> to me before.  Still, even as 500 becomes 1, there remains the discussion if
> >> the one is the global server instance or some SN-specific server instance.
> >
> >Same comment as above.
> 
> Which is that you're okay with the *conf-notif drafts necessitating the existence
> of /*conf-server/ instances (i.e., the ietf-*conf-server module is implemented)
> and, of course, you're hoping that this dependency can be introduced in some
> future bis version of the *conf-notif drafts.
> 
> 
> 
> >> >> > (2) availability of the group means that a platform will have exposed
> >> >> > *conf-server.  Explaining that a model is only available for its
> >> >> > grouping would be quite a confusing deviation.
> >> >>
> >> >> No, it's easy, this is the difference between a module being *implemented*
> >> >> or not.  The implementation status of each module is yang-library.
> >> >
> >> > Yes, what you say is possible.  It is also more complex.
> >> 
> >> Not just possible, it is actually how it happens.  The client-server modules
> >> are highly sensitive to implementation status.  FWIW, I never expect the
> >> ietf-*conf-client modules to ever be implemented, and the ietf-*conf-server
> >> modules to be implemented "sometimes".  FWIW, the global server instances
> >> we keep talking about only happen *if* the ietf-*conf-server modules are
> >> implemented.
> >
> > I have seen implementations of YANG models without having a yang-library.
> > I prefer a yang-library of course.
> 
> From a SDO perspective, yang-library is expected to be implemented (it's a
> MUST in RFC 8040 and in nmda-restconf).  We should fully assume that the
> server implements yang-library.  That said, if I were the implementer of
> a receiver that does a dynamic subscription, I would probably write the
> code to just send the establish-subscription request and check to see 
> if the server returned an <rpc-error>, without first checking if the
> module is listed in yang-library...
> 
> 
> >> > So can we take out address and finally be done?   That would be a good
> >> thing.
> >> 
> >> Yes, take out the address leaf but I think that, if we want to progress the
> >> SN draft along with a transport binding definition that doesn't depend on
> >> the ietf-*conf-server modules, then we might define something else like:
> >> 
> >>   module ietf-netconf-no-crypto-subscribed-notifications {
> >>     prefix nncsn;
> >>     import ietf-subscribed-notifications { prefix sn; }
> >> 
> >>     container implicit-netconf-receivers {
> >>       list implicit-netconf-receiver {
> >>         key name;
> >>         leaf name { ... }
> >>         leaf address { ... }
> >>         leaf port { ... }
> >>       }
> >>     }
> >>     augment "/sn:subscriptions/sn:subscription/sn:receivers/sn:receiver" {
> >>       if-feature "subscription-support";
> >>       when 'derived-from(../../../transport, "nsn:netconf")';
> >>       leaf netconf-endpoint {
> >>         type leafref {
> >>           path "/nncsn:implicit-netconf-receivers/nnccs:implicit-netconf-"
> >>                + "receiver/nnccs:name";
> >>         }
> >>       }
> >>     }
> >>     ...
> >>   }
> >
> > **Martin, are you ok with this.   If you are and there are no other 
> > objections, I will add this and we can be done with this thread.  Which
> > would be progress.   Otherwise, let's just leave things as they are.
> >
> > BTW: adding back address and port also solves the "how do we have a
> > common transport across multiple configured receivers".
> 
> Look at the YANG again, it first defines protocol accessible nodes for
> "receivers" (i.e., distinct transports), and then it augments in a
> leafref to an instance in that list.  I think this is more explicit
> than rules around matching address and port values.
> 
> 
> 
> >> I don't quite understand how the server is supposed to know how to
> >> configure the call-home parameters or the transport parameters, but
> >> at least this would be on par with what you had before.
> >
> > Yes.
> 
> If we do it, the *conf-notif draft would have to explain such details
> in text, since they'd be missing from the YANG module...
> 
> 
> 
> >> > The NETCONF-Notif draft needs to be implemented now for dynamic
> >> subscriptions.
> >> 
> >> From above, and I can't ascertain why this is, when dynamic subscriptions
> >> don't appear to utilize the "netconf" identity in any way...
> >
> > No, but non-YANG Sections 5, 7, & 8 is needed.  Plus many of the examples.
> 
> From above, it seems that we can key everything off if the *conf-notif 
> module listing in yang-library is implemented.
> 
> For servers that only support NETCONF-based dynamic subscriptions (no 
> configured subscriptions), then the ietf-netconf-subscribed-notifications
> module can be listed in yang-library as *not implemented*.  
> 
> For servers that only support NETCONF-based configured subscriptions, 
> then ietf-netconf-subscribed-notifications can be listed in yang-library
> as *implemented*.
> 
> Good?
> 
> 
> 
> >> > An update to NETCONF-notif for configured subscriptions is possible to insert
> >> > the call-home leafref (or insert new grouping).   But this update becomes
> >> > unnecessary if ietf-netconf-server.yang is augmented as described above.
> >> 
> >> Perhaps, but it seems unnatural to do it this way.  What makes sense to me is
> >> for the module that claims to be the transport-binding module to provide the
> >> configuration for binding the transport.
> >
> > At this point we do have a relatively minor difference of option which need
> > not impact the closing the current draft-ietf-netconf-netconf-event-notifications.
> 
> I assume you meant "opinion", and I agree that it's relatively minor, but I think
> that you meant that it doesn't impact the closing of the SN draft, as it certainly
> impacts the closing of the notif drafts, right?
> 
> 
> 
> >>> >> >> That said, I have to say that I'm not entirely sure if I understand
> >>> >> >> if what is planned is legal.  For instance, in a normal NETCONF call
> >>> >> >> -home situation, the NETCONF session begins with both sides sending
> >>> >> >> <hello> messages and then the server waiting for the client to send
> >>> >> >> RPCs, which might include a 5277 <create-subscription>, after which
> >>> >> >> the <notifications> begin to flow.  Is this the same here, or are 
> >>> >> >> you expecting the <notification> messages to start flowing 
> >>> >> >> immediately?
> >> >> >
> >> >> > A subscription-started notification will be sent after the hellos are
> >> >> > successful.  Can you point to something in RFC 6241 which says a 
> >> >> > <notification> can't be sent until an RPC is sent from the client?
> >> >>
> >> >> It's not a very good reference, but I found this (emphasis added):
> >> >>
> >> >>    o  client: Invokes protocol operations on a server.  In addition, a
> >> >>       client can *subscribe* to receive notifications from a server.
> >> >>
> >> >> We should ask the WG.  All I know is that it's always been that the
> >> >> client does something to initiate server behavior.  Admittedly, this
> >> >> is kind of a new thing, and it might be okay, but I think it warrants
> >> >> review by others.
> >> >
> >> > You are welcome to make the request.
> >> 
> >> Eric, you are the Editor.  But beware, this could blow up and we decide to
> >> drop the netconf and restconf protocols bindings entirely and only focus
> >> on transport bindings for things like gRPC and udp-pub-channel.  If NC/RC
> >> are needed, then the server could configure a standard call-home connection
> >> (via the ietf-*conf-server modules) on which the client can start a dynamic
> >> subscription.  Just thinking this might be a better win.
> >
> > Things are far easier with HTTP based transports, because you must get an
> > explicit OK from a subscription-started before sending any <notification>.
> > See RESTCONF-notif for configured subscriptions which used no RESTCONF at
> > all for this function.
> 
> I'm unsure if I understand this.  Can you explain how/why this is so?
> 
> Also, going forwards, please try call out sections when you can.  It took
> me awhile (too long) to see that you meant (I think) section 4.2.
> 
> BTW, in one possible outcome of the current discussions in play, is that
> there may be a multiplicity of "notif" modules, such as:
> 
>   ieft-netconf-notif
>   ieft-netconf-wo-crypto-notif  // better name needed
>   ieft-restconf-notif
>   ieft-restconf-wo-crypto-notif // better name needed
>   ietf-https-notif              // unsure about this one
>   ietf-grpc-notif
>   ietf-udp-notif
>   etc.
> 
> 
> > Eric
> 
> Kent // contributor
> 
> 
> 
>