Re: [Netconf] WG Last Call for draft-ietf-netconf-call-home-04 and draft-ietf-netconf-server-model-06 WAS:FW: call-home-04 and server-model-06 available - All Open issues closed

Kent Watsen <kwatsen@juniper.net> Fri, 20 March 2015 01:26 UTC

Return-Path: <kwatsen@juniper.net>
X-Original-To: netconf@ietfa.amsl.com
Delivered-To: netconf@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 558821A8A66 for <netconf@ietfa.amsl.com>; Thu, 19 Mar 2015 18:26:40 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.902
X-Spam-Level:
X-Spam-Status: No, score=-1.902 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham
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 UaV0l2oqE8Ah for <netconf@ietfa.amsl.com>; Thu, 19 Mar 2015 18:26:37 -0700 (PDT)
Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0107.outbound.protection.outlook.com [65.55.169.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 171D71A8A54 for <netconf@ietf.org>; Thu, 19 Mar 2015 18:26:37 -0700 (PDT)
Received: from CO1PR05MB458.namprd05.prod.outlook.com (10.141.72.140) by CO1PR05MB457.namprd05.prod.outlook.com (10.141.72.141) with Microsoft SMTP Server (TLS) id 15.1.112.19; Fri, 20 Mar 2015 01:26:34 +0000
Received: from CO1PR05MB458.namprd05.prod.outlook.com ([169.254.10.152]) by CO1PR05MB458.namprd05.prod.outlook.com ([169.254.10.152]) with mapi id 15.01.0118.021; Fri, 20 Mar 2015 01:26:34 +0000
From: Kent Watsen <kwatsen@juniper.net>
To: Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de>, "netconf@ietf.org" <netconf@ietf.org>
Thread-Topic: [Netconf] WG Last Call for draft-ietf-netconf-call-home-04 and draft-ietf-netconf-server-model-06 WAS:FW: call-home-04 and server-model-06 available - All Open issues closed
Thread-Index: AQHQVf+tT/7bNpWPUkyuK74/P/SDo50i7REAgAF9rYA=
Date: Fri, 20 Mar 2015 01:26:34 +0000
Message-ID: <D1307759.9A9E6%kwatsen@juniper.net>
References: <E4DE949E6CE3E34993A2FF8AE79131F81964E27A@DEMUMBX005.nsn-intra.net> <20150318224028.GA38182@elstar.local>
In-Reply-To: <20150318224028.GA38182@elstar.local>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
user-agent: Microsoft-MacOutlook/14.4.4.140807
x-originating-ip: [66.129.239.12]
authentication-results: jacobs-university.de; dkim=none (message not signed) header.d=none;
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CO1PR05MB457;
x-forefront-antispam-report: BMV:1; SFV:NSPM; SFS:(10019020)(6009001)(76104003)(164054003)(51444003)(52314003)(51704005)(99286002)(106116001)(2950100001)(2900100001)(2501003)(107886001)(36756003)(40100003)(122556002)(2656002)(46102003)(551544002)(87936001)(102836002)(15975445007)(86362001)(76176999)(54356999)(50986999)(230783001)(66066001)(92566002)(62966003)(77156002)(83506001)(19580395003); DIR:OUT; SFP:1102; SCL:1; SRVR:CO1PR05MB457; H:CO1PR05MB458.namprd05.prod.outlook.com; FPR:; SPF:None; MLV:sfv; LANG:en;
x-microsoft-antispam-prvs: <CO1PR05MB45712E25D898BF921E2D3CFA50E0@CO1PR05MB457.namprd05.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:;
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(601004)(5002010)(5005006); SRVR:CO1PR05MB457; BCL:0; PCL:0; RULEID:; SRVR:CO1PR05MB457;
x-forefront-prvs: 05214FD68E
Content-Type: text/plain; charset="us-ascii"
Content-ID: <6A6346609E01E441B5B54A093731CA34@namprd05.prod.outlook.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: juniper.net
X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Mar 2015 01:26:34.2030 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: bea78b3c-4cdb-4130-854a-1d193232e5f4
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR05MB457
Archived-At: <http://mailarchive.ietf.org/arch/msg/netconf/HY5zL_-XSvozsGUw5UDdjTWlhbE>
Subject: Re: [Netconf] WG Last Call for draft-ietf-netconf-call-home-04 and draft-ietf-netconf-server-model-06 WAS:FW: call-home-04 and server-model-06 available - All Open issues closed
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.15
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: <http://www.ietf.org/mail-archive/web/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, 20 Mar 2015 01:26:40 -0000



>* sec 2.4: What is 'TLS _transport-level_ authentication'? Why not
>  just use 'TLS authentication' or perhaps even clearer 'TLS client
>  authentication'?

Good catch.  Will use "TLS client authentication"


>* sec 2.6: Do we really need 'northbound application' terminology? Why
>  not call it simply a NETCONF/RESTCONF client? There might also be
>  possible confusion with phrases such as "Assuming an application has
>  more than one server" - the server here seems to be the NETCONF
>  client to call home to. Anyway, if we do need new terminology, I
>  think we should properly define it to avoid any confusion.

The term "application" is coming from the YANG model, where we have:

   module: ietf-netconf-server
      +--rw netconf-server
         +--rw call-home {call-home}?
            +--rw application* [name]
               ...

My intent was to pick a term that would make sense in GUI and CLI.  But
maybe this is better:

   module: ietf-netconf-server
      +--rw netconf-server
         +--rw call-home {call-home}?
            +--rw netconf-client* [name]
               ...

What do you think?   The term used throughout the draft will fallout from
this.  If we decide to use "application", I will add a proper Terminology
section, per Martin's comment.



>* sec 3: Is it a good idea to name the top-level node netconf-server?
>  Is this name consistent with how we name other things?

What else would you have?  FWIW, RFC 6022 has "netconf-state".

In case it helps, example A.1 shows:

  <netconf-server xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server">
    <session-options>...</session-options>
    <listen>...</listen>

    <call-home>...</call-home>
    <ssh>...</ssh>
  </netconf-server>



>* sec 3: Can I have a server listening for SSH and accepting call home
>  over TLS? Would features work out in such a case or would such a
>  server make a client believe that the server is also allowing call
>  home via SSH and incoming connections via TLS?

You can certainly configure that, but the model doesn't support the
NETCONF server being able to only support those specific variations.
This is why I was trying to use the YANG 1.1 style if-feature statements
in -04.  We could use long feature names to cover these specific
variations, but I didn't think it worth the bother.  Do you?



>* sec 3: Are certificates sometimes represented as strings and
>  sometimes represented as binary?

That's an oversight, they should all be binary.



>* sec 4: Is it a good idea to name the top-level node restconf-server?
>  Is this name consistent with how we name other things? (see also above)

Let's apply the resolution to the above comment here as well.



>* sec 3.2:
>
>  - is import by revision needed?

At the time I submitted this draft, it was my understanding that import by
revision was best practice, and that prior YANG modules were in violation.
 Recent YANG 1.1 conformance discussions seem to be swinging the other
direction now, but with potential to swing back again.  I don't know what
to *right* thing to do is.   Perhaps taking it out is the way to go
because, even if it's wrong, it will at least be in the company of other
published modules  ;)


>  - Are groupings useful that are only used once? Are they really
>    improving readability?

Guess not.  I tried twice, but it doesn't seem popular.  I will remove all
groupings that are used only once.


>  - is there any motivation for the upper bounds of hello-timeout and
>    idle-timeout?

This came from a YANG snippet Andy provided.  I'm sure that it's along the
lines of "if more than an hour, it might as well use infinity".
Personally, I don't see a reason to limit it, but I do think that only
having "seconds" units can become unwieldy and thus might suggest a
2-tuple whereby one value is a numeric and the other an enum like
{seconds, minutes, hours, days}.  What do you think?


>  - is there a motivation for the upper bound of max-sessions?

This YANG snippet also came from Andy, but I don't see a reason to limit
it here.   Andy?


>  - why is max-sessions part of the listen subtree? do call home
>    sessions count in here as well? it seems that max-session may be
>    another global session parameter

Yes, this makes sense to me as well, though what happens if we get into
the pathological case of the number of call-home sessions configured is
greater than the configured max-sessions count?  Is there a way to write
a validation expression to test for this?


>  - neither address nor port are mandatory for a listening endpoint;
>    since the port has a default, should address be mandatory?

Sounds reasonable.  An alternative might be to have a default to represent
"all configured interfaces" - what do you think?


>  - is it useful to reference the RFC itself in a reference clause of
>    a specific leaf (e.g., 'keep-alives' given that there is a
>    'global' reference to the RFC? Probably it is useful since it
>    references a specific section but then the section references
>    does not make much sense...

Maybe only mildly useful, but definitely inconsistent to other YANG
modules.  Take it out?



>  - The description of 'application' talks about NETCONF clients, so
>    application == NETCONF clients?

Yes.  This is related to comment above as well.



>  - is there a motivation for the 15 seconds default for the call home
>    keep alive timer?
>  - is there a motivation for 30 seconds default linger time and 5
>    minutes default reconnect time?

For all of these, I just figured they were sensible choices.  Do they
seem OK to you?


>  - What is the meaning of "NETCONF servers SHOULD support this flag
>    across reboots."? Perhaps it is clearer if the text said "NETCONF
>    servers SHOULD be able to remember the last endpoint connected to
>    across reboots".

Martin had a similar comment - will clarify in the text


>  - how do interval-secs and count-max work for reconnect-strategy if
>    an endpoint resolves to multiple IP addresses? Does the
>    interval-secs apply every address of an endpoint or to all
>    addresses of an endpoint? Does count-max increment for each
>    address of an endpoint or just once for a given endpoint?

Interesting point, that a hostname may expand into a list of IPs.  What
makes sense to me is that the list of IPs would be treated as if they were
specified explicitly.  For example, let's say a configured application
(netconf client?) has 3 endpoints (EP1, EP2, and EP3), but they're all
hostnames that expand into two IP addresses, then the netconf server
behavior would be as if it had them configured explicitly: EP1.1, EP1.2,
EP2.1, EP2.2, EP3.1, EP3.2.  That is, with would try EP1.1 count-max times
before trying EP1.2 count-max times, and so on. Does this also make sense
to you?  If so, then I think that it's just a matter of writing it up so
the text spells it out.





>  - would it make sense to introduce a typedef for the X509
>    certificates?

Maybe, but I wonder if you're saying this after seeing this:

      leaf-list certificate {
        type string;
        min-elements 1;
        description
          "An unordered list of certificates the TLS server can pick
           from when sending its Server Certificate message.  The value
           of the string is the unique identifier for a certificate
           configured on the system.  How valid values are discovered
           is outside the scope of this module, but they are envisioned
           to be the keys for a list of certificates provided
           by another YANG module";
        reference
          "RFC 5246: The TLS Protocol, Section 7.4.2";
      }


Or this?

      leaf-list trusted-ca-cert {
        type binary;
        ordered-by system;
        nacm:default-deny-write;
        description
          "The binary certificate structure as specified by RFC
           5246, Section 7.4.6, i.e.,: opaque ASN.1Cert<1..2^24>;
          ";


The former was by yours truly later was lifted from another draft.  My
plan from Martin's review was to make the former look like the later, but
you think a typedef would be better?



>  - for certs, we copy binary certs into the config but for ssh host
>    keys, we reference them using some strings that act as unique
>    identifiers into an undefined pool of host keys. This is somewhat
>    asymmetric and how do I configure a host-key without knowing which
>    host keys the box has available? The problem likely is that we
>    lack a generic infrastructure for managing SSH and TLS
>    credentials. But would the approach to model pools of keys not be
>    the more practical solution?


The binary certs we're copying into the configuration are being used for
client-cert authentication.  Here I'm referring to
/netconf-server/[ssh|tls]/x509/trusted-ca-certs and
/netconf-server/[ssh|tls]/x509/trusted-client-certs.  There is no SSH
equivalent for authenticating clients when the clients use password or key
based authentication, because ietf-system.yang module from 7317 does it
already.  So, yes, there is an asymmetry here, but what can we do?

Separately, there is configuration for what host-keys the SSH-server
presents and what server-certificates the TLS-server presents.  Here I'm
referring to 
/netconf-server/listen/endpoint/[ssh/host-keys|tls/certificates] and
/netconf-server/call-home/application/[ssh/host-keys|tls/certificates].
Currently these are as you say, a named reference to a value presumed to
be configured elsewhere.  The good news is that how this is done is
symmetric for both SSH and TLS.  As for modeling pools of keys, I think
that this is what sever-model-04 had - read-only lists of SSH host-keys
and certificates just so they could be referenced here.  This was
discussed at IETF 91 meeting with the resolution to remove them from this
draft.  This issue was tracked here as well:
https://github.com/netconf-wg/server-model/issues/20.



>  - would it not make sense to factor out some common groupings so
>    that things can be reused instead of being defined multiple times?

Do you mean between the ietf-netconf-server and ietf-restconf-server
modules?


>  - what is "RFC ZZZZ: Client Authentication over New TLS Connection"?
>    the editor instructions refer to draft-thomson-httpbis-cant but
>    this one does not exist anymore?

It is here, but expired:
https://tools.ietf.org/html/draft-thomson-httpbis-cant-01

I've been discussing with Martin Thomson about it.  I'll probably work
with him in the httpbis WG to resurrect it and get it done.


>  - several of the comments for the netconf server module also apply
>    to the restconf server module - I am not repeating them here,
>    assuming that any changes will be applied consistently anyway

Yes, understood, symmetric changes would be made to both


>* sec 5.2: is this document the right place to require (MUST) that
>  call home servers advertise "peer_allowed_to_send" per [RFC6520]?
>  If this is a general requirement, should it not be in the call home
>  document?

Er, yes, I think that you're right


>* sec A: please use IP addresses reserved for documentation in the
>  examples.

I didn't know there was such a thing - can you provide a pointer to the
RFC for this?


Thanks,
Kent