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

Martin Bjorklund <mbj@tail-f.com> Fri, 18 May 2018 15:08 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 0554E12D96C for <netconf@ietfa.amsl.com>; Fri, 18 May 2018 08:08:31 -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 d4ddeshuPDgq for <netconf@ietfa.amsl.com>; Fri, 18 May 2018 08:08:28 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id D455812D963 for <netconf@ietf.org>; Fri, 18 May 2018 08:08:27 -0700 (PDT)
Received: from localhost (unknown [173.38.220.61]) by mail.tail-f.com (Postfix) with ESMTPSA id 36D8E1AE012C; Fri, 18 May 2018 17:08:26 +0200 (CEST)
Date: Fri, 18 May 2018 17:08:23 +0200 (CEST)
Message-Id: <20180518.170823.427077888694872498.mbj@tail-f.com>
To: evoit@cisco.com
Cc: kwatsen@juniper.net, netconf@ietf.org
From: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <fbb940135ccb465eb3f5b95d1fb53721@XCH-RTP-013.cisco.com>
References: <0c1b4c46d2de4190af83488dff293181@XCH-RTP-013.cisco.com> <20180518.144414.334141005925835002.mbj@tail-f.com> <fbb940135ccb465eb3f5b95d1fb53721@XCH-RTP-013.cisco.com>
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/7NFhTcgvuncm2FDM8j9auL5-cqQ>
Subject: Re: [Netconf] IETF 101 SN Question 1: Proper designation of receiver
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: Fri, 18 May 2018 15:08:31 -0000

"Eric Voit (evoit)" <evoit@cisco.com> wrote:
> > From: Martin Bjorklund, May 18, 2018 8:44 AM
> > 
> > "Eric Voit (evoit)" <evoit@cisco.com> wrote:
> > > Hi Kent,
> > > Hi Martin,
> > >
> > > Kent's underlying desire in the thread below is to insert a transport
> > > case under /subscriptions/subscription/receivers/receiver to match
> > > design patterns used elsewhere.  If we really want to do this, the way
> > > this could be done with the current design with Kent's proposal would
> > > be something like:
> > >
> > >        +--rw subscriptions
> > >           +--rw subscription* [identifier]
> > >              +--rw identifier
> > >              +--rw transport transport {configured}?
> > >              +--rw receivers
> > >                 +--rw receiver* [name]
> > >                    +--rw name                      string
> > >                     +--rw (transport) {configured}?
> > >                            +--:(tcp)?
> > >                            |   +--rw address                  inet:host
> > >                            |    +--rw port?  inet:port-number
> > >                            +--------future transport case
> > >                            augmentations....
> > 
> > Is the idea still to configure the transport (and encoding) per
> > subscription?  If
> > this is the case, I don't think this new proposal adds anything.
> 
> The main things it adds is the ability to augment receiver specific
> transport parameters in subsequent drafts.
> 
> Honestly, I don't really like the proposal either.  I believe the
> current draft is adequate.  I was just attempting to bridge Kent's
> proposal with your earlier proposal which was adopted after IETF 100
> discussions.
>  
> > This said, I would prefer a design that more closely follows the
> > "Outbound
> > Connection" design pattern:
> > 
> >         +--rw subscriptions
> >            +--rw subscription* [identifier]
> >               +--rw identifier
> >               +--rw receivers
> >                  +--rw receiver* [name]
> >                     +--rw name                      string
> >                     +--rw (transport) {configured}?
> >                        +--:(tcp)?
> >                           +--rw tcp
> >                              +--rw address       inet:host
> >                              +--rw port?         inet:port-number
> >                              +--rw encoding
> > 
> > IMO this is a more natural and simpler design.
> >
> > The argument against this was (IIRC) that it is easier for the server
> > if the
> > transport + encoding is fixed per subscription, b/c then the server
> > can prepare
> > one payload that is sent to all subscribers.  
> >
> > But I don't really buy this argument;
> > if the operator needs different transports / encodings the current
> > (-12) design
> > forces the operator to create two subscriptions.  This means that the
> > server
> > has to filter the data twice, and then still do two different
> > encodings /
> > transports.
> 
> Yes, with (v12) design, both the encoding and transport cannot vary by
> subscription.  There were many reasons for this.  Some of these
> reasons were discussed as part of WG review of this topic in IETF 100,
> and during the following rough consensus call:
> https://www.ietf.org/mail-archive/web/netconf/current/msg13875.html 
> I am hoping this issue is not reopened as the in-room and subsequent
> email threads had no dissention.
> 
> > Also, unless there is a document that describes the "tcp" transport, I
> > strongly
> > think it should be removed.  If not, how can this be interoperable?
> 
> With "tcp" I believe Kent is attempting to find some home for receiver
> address info prior to the availability of call home specifications.

If we keep the -12 design, this is not an issue at all...

> Kent's thinking is not unreasonable as per point (1) below,
> OC-telemetry.yang and ietf-syslog.yang seem to have no issue with this
> simple design pattern.

... so I will not comment this for now, assuming we'll keep the -12
design.



/martin


> 
> Eric
> 
> > /martin
> > 
> > 
> > > Benefits of this approach:
> > >
> > > (1) The tcp case provides an initial option for of an easy equivalence
> > > to the capability of "destination-address" and "destination-port"
> > > which appears in OC-telemetry.yang.  And it follows the design pattern
> > > as it appears in the UDP case leaf "address" and "port" of
> > > ietf-syslog.yang.  Just placing an address and port into these models
> > > has proven simple and effective.
> > >
> > > (2) While we await ietf-netconf-server.yang, linkage to receiver
> > > details such security credentials that are held elsewhere on the
> > > publisher *can* initially be done using "address" within the tcp case.
> > > (I.e., I don't see any issue with having as undefined how the
> > > authentication association is done in the transport independent
> > > draft.)  Note: per the thread below, it is important not have security
> > > credentials in this part of the subscription model as could be dozens
> > > of configured subscriptions aimed at the same receiver, and it would
> > > be confusing to the other users of these credentials to look them up
> > > within this configured subscriptions model.
> > >
> > > (3) From this starting point, future case augmentations would allow us
> > > to augment cases to "(transport)" for the placement of call-home
> > > leafrefs to modules like ietf-netconf-server.yang.  This would allow
> > > model users and applications the ability to shift to using the
> > > leafref.
> > >
> > > More in-line.  In the end, I will gladly salute whatever the WG
> > > decides.  It would be great to find a way complete this discussion.
> > >
> > > > From: Eric Voit, May 14, 2018 5:26 PM
> > > >
> > > > From: Kent Watsen, May 14, 2018 4:19 PM
> > > >
> > > > On 5/9/18, 4:17 PM, "Eric Voit (evoit)" <mailto:evoit@cisco.com>
> > > > wrote:
> > > >
> > > > >> From: Kent Watsen, May 9, 2018 1:49 PM
> > > > >>
> > > > >> Listening to the audio from 101, it seemed that Martin's
> > > > >> objection was primarily that the current draft didn't follow the
> > > > >> pattern that other drafts are using [1].
> > > > >
> > > > > Martin's point in and post IETF 101 was that address and port was
> > > > > not a good key for a receiver. Plus, where we have address, that
> > > > > we shouldn't use port because that connection information
> > > > > shouldn't be
> > > > repeated (possibly with errors) across independent subscriptions.
> > > >
> > > > Yes, he mentioned issues related to keys, but he also mentioned the
> > > > pattern [1] used by other drafts, which is what I'm more focused on
> > > > now…
> > > >
> > > >
> > > > > In the end, the final proposal embodied in the draft was one made
> > > > >by Martin.  This proposal does  allow for a very clean match to
> > > > >your client-server drafts as both the endpoints and receivers are
> > > > >keyed by name.  I.e.,
> > > > >    +--rw endpoint* [name]          +--rw receiver* [name]
> > > > >       +--rw name    string            +--rw name    string
> > > >
> > > > My focus is not on the name so much as the lack of a 'choice'
> > > > statement.  Please see Section 3 in [1].
> > > >
> > > >
> > > > >> Without actually understanding the proposal below, I'll only
> > > > >> state that my thought is not to push this work towards [2] today,
> > > > >> but more to ensure it follows the pattern.
> > > > >>
> > > > >> FWIW, in the syslog draft, we used to have a "tcp" transport
> > > > >> type, which was really just an address/port pair, so maybe something
> > like:
> > > > >>
> > > > >>        +--rw subscriptions
> > > > >>           +--rw subscription* [id]
> > > > >>                +--rw id
> > > > >>                +--rw receivers
> > > > >>                   +--rw receiver* [name]
> > > > >>                        +--rw name    string
> > > > >>                        +--rw (transport)
> > > > >>                          +--:(tcp) {tcp-call-home}?
> > > > >>                              +--rw tcp
> > > > >
> > > > > Per IETF 100, transport is no longer under receivers.  It is under
> > > > > the subscription.  This is the current tree, with transport high up...
> > > > >
> > > > >      +--rw subscriptions
> > > > >         +--rw subscription* [identifier]
> > > > >            +--rw identifier                       subscription-id
> > > > >            +--rw transport                        transport
> > > > >{configured}?
> > > > >            +--rw receivers
> > > > >               +--rw receiver* [name]
> > > > >                  +--rw name                      string
> > > > >                  +--rw address?                  inet:host
> > > >
> > > > I see "transport" under subscription, but it is using an identity
> > > > (not a choice).   Also, back to "receiver", it's the configurable
> > > > "address"
> > > > leaf that I'm
> > > > thinking needs to be under a 'choice'.   I see you have an
> > > > interesting 'when'
> > > > expression referencing the "inline-address" identity, which appears
> > > > to address some of the "what if the transport doesn't support IP"
> > > > issue…
> > >
> > > Yes, this was one of Martin's proposals to cover the "what if.."
> > >
> > > > >> Wait, now I'm confused, how is only specifying an "address"
> > > > >> sufficient for configuration.  I thought the receiver needed to
> > > > authenticated.  -12 says:
> > > > >
> > > > > Receivers need to be authenticated.  But this draft does not
> > > > > attempt configure the keys and mechanisms to perform that step.
> > > > > Other sources of
> > > > data are needed.
> > > >
> > > > I don't like publishing a data model that hand-waves over parts of
> > > > the configuration, and it was this line of thinking that caused
> > > > update to the syslog draft.
> > >
> > > This draft does not attempt to configure call home, and it shouldn't
> > > considering that:
> > >
> > > (a) specific call home technologies need to be associated with
> > > specific transport
> > > (b) there is already adopted call home with this objective of
> > > configuring this info
> > > (c) when the call home drafts are ready, we can augment a leafref
> > > under /subscriptions/subscription/receivers/receiver.
> > >
> > >
> > > > Also, I don't recall seeing anywhere in this document a statement
> > > > that the configuration model is incomplete - did I miss it?
> > >
> > > As configuration can vary transport, such a statement on configuration
> > > if needed wouldn't be here.  If you look at
> > > draft-ietf-netconf-netconf-event-notifications Section 6.2, the
> > > description of the call home process is described there.  If you think
> > > it helpful, I can put in an informative reference to
> > > draft-ietf-netconf-netconf-client-server there.
> > >
> > > > > There are two ways to do this:
> > > > > (1) The "address" is of type inet:host which when used with the
> > > > > configured subscription's transport
> > > > > *CAN* provide the requisite information needed to look up the
> > > > > remote host authentication and proper call home information for
> > > > > that receiver.   (Note: address is one simplistic option to get to
> > > > > this information today without integrating useful but complex
> > > > > structures.)
> > > >
> > > > An address by itself may not a sufficient lookup key, as the server
> > > > may have different services running on different ports and, of
> > > > course, all sorts of security parameters can vary.
> > >
> > > I liked having port as well.  Martin requested its removal as it could
> > > be populated with something which contradicts what is in the call home
> > > configuration.
> > >
> > > With the tree proposal at the top, I think we could have "port" be
> > > optional.  And we would say in the description that it is only
> > > populated only if it is different than a call home value if it exists,
> > > or a default port number for the transport protocol.  This should
> > > provide clarity on when it would or wouldn't be populated.
> > >
> > > > > (2) When the client-server drafts are ready, a leafref can be
> > > > >augmented into:
> > > > >      +--rw netconf-client
> > > > >         +--rw initiate {initiate}?
> > > > >            +--rw netconf-server* [name]
> > > > >               +--rw name                  string
> > > > >               +--rw endpoints
> > > > >                  +--rw endpoint* [name]
> > > > >                     +--rw name    string
> > > >
> > > > yes, this is what I'm thinking about.  The pattern described in [1]
> > > > was designed to allow for such augmentations, but I don't understand
> > > > how it would work here.   Can this draft follow the pattern now
> > > > with, perhaps, only a "tcp"
> > > > transport?  But even then, I don't see how the receiver can be
> > > > authenticated (per requirement), maybe that requirement should be
> > > > removed so that an unauthenticated "tcp" transport can be fully
> > > > configured?
> > >
> > > I see no issue with requiring authentication for the transport,
> > > without explicitly storing the keys in this model, or pointing to the
> > > keys in a different model.
> > >
> > > > > All the transport specific complexities/variations here emphasize
> > > > > the need for separate the subscription model as all the details
> > > > > for such authentication and transport configuration.  This
> > > > > complexity need not be
> > > > replicated and repeated under each and every subscription.
> > > >
> > > > I'm not sure exactly what this means (maybe a tree diagram or
> > > > example would help), but note that each instance of ietf-tcp-client
> > > > fully specifies its security parameters, though a *lot* of the
> > > > really redundant stuff is factored out via leafrefs to
> > > > ietf-trust-anchors and ietf-keystore (assuming that draft comes
> > > > back).
> > >
> > > I believe the proposal at the top of this email helps avoid
> > > configuration redundancy.
> > >
> > > > >>    For both configured and dynamic subscriptions the publisher
> > > > >>MUST
> > > > >>    authenticate and authorize a receiver via some transport level
> > > > >>    mechanism before sending any updates.
> > > > >>
> > > > >> How is the crypto and auth configured?
> > > > >
> > > > > Yes this is absolutely a need.  But not specific to subscriptions.
> > > > >  In the end, a
> > > > lot of protocols need
> > > > > these specifics.   I am certainly looking to your keystore related
> > > > > drafts to
> > > > standardize such mechanisms.
> > > >
> > > > True, and I do think that this document (or the transport-binding
> > > > documents)
> > > > will ultimately depend
> > > > on the various client/server drafts the WG has been working on.
> > > > There is no other game in town, so to speak.  Though the question
> > > > remains if this is now or later thing.
> > >
> > > The structures are proposed here to allow for growth into a later
> > > solution.
> > >
> > > > >> Maybe this draft should leave the "transport" choice node empty,
> > > > >
> > > > > There isn't any transport choice node.  Just the identity.
> > > >
> > > > True, but then how is just an identity sufficient?   Let's say we
> > > > finally get the netconf-client-server draft to RFC, and so someone
> > > > creates an identity for "netconf", but where would the "uses"
> > > > grouping statement go?
> > >
> > > A place now exists in the proposal above.
> > >
> > > > >> and let the netconf-notif and restconf-notif modules augment in
> > > > >> their respective transport-specific config into the "transport"
> > > > >> choice node here?
> > > > >
> > > > > While it could be augmented, I believe “out of scope” awaiting the
> > > > > client-
> > > > server drafts is a cleaner path.
> > > > > Especially as we shouldn’t repeat this info for each and every
> > > > >subscription.
> > > >
> > > > I'm okay with us coming up with an unauthenticated "tcp" transport
> > > > now, leaving the crypto stuff out for now, so long as we have a
> > > > pattern that we can follow to augment in what we need later.
> > > > That said, note that the IESG made RFC 6587 HISTORIC and may not
> > > > have much appetite for an unauthenticated transport again…
> > >
> > > Per above, I believe we can identify the tcp address and port, with an
> > > expectation that leafrefs are later augmentable to elements that are
> > > not currently modeled.
> > >
> > > > BTW, restconf-notif defines bindings for RESTCONF, HTTP2, and
> > > > HTTP1.1, but the restconf-client-server draft only defines a binding
> > > > for RESTCONF, have you put thought to how
> > > > HTTP2 and HTTP1.1 can be
> > > > supported?  for all intents and purposes, I think that it's the same
> > > > config, but I haven't looked into the details either.
> > >
> > > Configured subscriptions only use HTTP2.  The working plan is for the
> > > other identities to be used for operational datastore exposure.
> > >
> > > Eric
> > >
> > > > Kent  // contributor
> > > >
> > > >
> > > >
> > > >
> > > >
> > >