draft-ietf-netconf-netconf-client-server-11.txt   draft-ietf-netconf-netconf-client-server-12.txt 
NETCONF Working Group K. Watsen NETCONF Working Group K. Watsen
Internet-Draft Watsen Networks Internet-Draft Watsen Networks
Intended status: Standards Track April 7, 2019 Intended status: Standards Track April 29, 2019
Expires: October 9, 2019 Expires: October 31, 2019
NETCONF Client and Server Models NETCONF Client and Server Models
draft-ietf-netconf-netconf-client-server-11 draft-ietf-netconf-netconf-client-server-12
Abstract Abstract
This document defines two YANG modules, one module to configure a This document defines two YANG modules, one module to configure a
NETCONF client and the other module to configure a NETCONF server. NETCONF client and the other module to configure a NETCONF server.
Both modules support both the SSH and TLS transport protocols, and Both modules support both the SSH and TLS transport protocols, and
support both standard NETCONF and NETCONF Call Home connections. support both standard NETCONF and NETCONF Call Home connections.
Editorial Note (To be removed by RFC Editor) Editorial Note (To be removed by RFC Editor)
skipping to change at page 2, line 11 skipping to change at page 2, line 11
o "YYYY" --> the assigned RFC value for I-D.ietf-netconf-ssh-client- o "YYYY" --> the assigned RFC value for I-D.ietf-netconf-ssh-client-
server server
o "ZZZZ" --> the assigned RFC value for I-D.ietf-netconf-tls-client- o "ZZZZ" --> the assigned RFC value for I-D.ietf-netconf-tls-client-
server server
Artwork in this document contains placeholder values for the date of Artwork in this document contains placeholder values for the date of
publication of this draft. Please apply the following replacement: publication of this draft. Please apply the following replacement:
o "2019-04-07" --> the publication date of this draft o "2019-04-29" --> the publication date of this draft
The following Appendix section is to be removed prior to publication: The following Appendix section is to be removed prior to publication:
o Appendix B. Change Log o Appendix B. Change Log
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on October 9, 2019. This Internet-Draft will expire on October 31, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. The NETCONF Client Model . . . . . . . . . . . . . . . . . . 4 3. The NETCONF Client Model . . . . . . . . . . . . . . . . . . 4
3.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 5 3.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 5
3.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 8 3.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 8
4. The NETCONF Server Model . . . . . . . . . . . . . . . . . . 18 4. The NETCONF Server Model . . . . . . . . . . . . . . . . . . 18
4.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 18 4.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 18
4.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 19 4.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 20
4.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 25 4.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 26
5. Design Considerations . . . . . . . . . . . . . . . . . . . . 36 5. Security Considerations . . . . . . . . . . . . . . . . . . . 37
5.1. Support all NETCONF transports . . . . . . . . . . . . . 36 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38
5.2. Enable each transport to select which keys to use . . . . 36 6.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 38
5.3. Support authenticating NETCONF clients certificates . . . 36 6.2. The YANG Module Names Registry . . . . . . . . . . . . . 38
5.4. Support mapping authenticated NETCONF client certificates 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 38
to usernames . . . . . . . . . . . . . . . . . . . . . . 36 7.1. Normative References . . . . . . . . . . . . . . . . . . 38
5.5. Support both listening for connections and call home . . 37 7.2. Informative References . . . . . . . . . . . . . . . . . 40
5.6. For Call Home connections . . . . . . . . . . . . . . . . 37 Appendix A. Expanded Tree Diagrams . . . . . . . . . . . . . . . 41
5.6.1. Support more than one NETCONF client . . . . . . . . 37 A.1. Expanded Tree Diagram for 'ietf-netconf-client' . . . . . 41
5.6.2. Support NETCONF clients having more than one endpoint 37 A.2. Expanded Tree Diagram for 'ietf-netconf-server' . . . . . 50
5.6.3. Support a reconnection strategy . . . . . . . . . . . 37
5.6.4. Support both persistent and periodic connections . . 38
5.6.5. Reconnection strategy for periodic connections . . . 38
5.6.6. Keep-alives for persistent connections . . . . . . . 38
5.6.7. Customizations for periodic connections . . . . . . . 38
6. Security Considerations . . . . . . . . . . . . . . . . . . . 38
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39
7.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 39
7.2. The YANG Module Names Registry . . . . . . . . . . . . . 40
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.1. Normative References . . . . . . . . . . . . . . . . . . 40
8.2. Informative References . . . . . . . . . . . . . . . . . 41
Appendix A. Expanded Tree Diagrams . . . . . . . . . . . . . . . 43
A.1. Expanded Tree Diagram for 'ietf-netconf-client' . . . . . 43
A.2. Expanded Tree Diagram for 'ietf-netconf-server' . . . . . 52
Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 61 Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 61
B.1. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 61 B.1. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 61
B.2. 01 to 02 . . . . . . . . . . . . . . . . . . . . . . . . 61 B.2. 01 to 02 . . . . . . . . . . . . . . . . . . . . . . . . 61
B.3. 02 to 03 . . . . . . . . . . . . . . . . . . . . . . . . 62 B.3. 02 to 03 . . . . . . . . . . . . . . . . . . . . . . . . 61
B.4. 03 to 04 . . . . . . . . . . . . . . . . . . . . . . . . 62 B.4. 03 to 04 . . . . . . . . . . . . . . . . . . . . . . . . 61
B.5. 04 to 05 . . . . . . . . . . . . . . . . . . . . . . . . 62 B.5. 04 to 05 . . . . . . . . . . . . . . . . . . . . . . . . 62
B.6. 05 to 06 . . . . . . . . . . . . . . . . . . . . . . . . 62 B.6. 05 to 06 . . . . . . . . . . . . . . . . . . . . . . . . 62
B.7. 06 to 07 . . . . . . . . . . . . . . . . . . . . . . . . 62 B.7. 06 to 07 . . . . . . . . . . . . . . . . . . . . . . . . 62
B.8. 07 to 08 . . . . . . . . . . . . . . . . . . . . . . . . 63 B.8. 07 to 08 . . . . . . . . . . . . . . . . . . . . . . . . 62
B.9. 08 to 09 . . . . . . . . . . . . . . . . . . . . . . . . 63 B.9. 08 to 09 . . . . . . . . . . . . . . . . . . . . . . . . 62
B.10. 09 to 10 . . . . . . . . . . . . . . . . . . . . . . . . 63 B.10. 09 to 10 . . . . . . . . . . . . . . . . . . . . . . . . 63
B.11. 10 to 11 . . . . . . . . . . . . . . . . . . . . . . . . 63 B.11. 10 to 11 . . . . . . . . . . . . . . . . . . . . . . . . 63
B.12. 11 to 12 . . . . . . . . . . . . . . . . . . . . . . . . 63
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 63 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 63
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 64 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 64
1. Introduction 1. Introduction
This document defines two YANG [RFC7950] modules, one module to This document defines two YANG [RFC7950] modules, one module to
configure a NETCONF [RFC6241] client and the other module to configure a NETCONF [RFC6241] client and the other module to
configure a NETCONF server. Both modules support both NETCONF over configure a NETCONF server. Both modules support both NETCONF over
SSH [RFC6242] and NETCONF over TLS [RFC7589] and NETCONF Call Home SSH [RFC6242] and NETCONF over TLS [RFC7589] and NETCONF Call Home
connections [RFC8071]. connections [RFC8071].
skipping to change at page 5, line 10 skipping to change at page 4, line 41
module. module.
Please see Appendix A.1 for a tree diagram that illustrates what the Please see Appendix A.1 for a tree diagram that illustrates what the
module looks like with all the "grouping" statements expanded. module looks like with all the "grouping" statements expanded.
module: ietf-netconf-client module: ietf-netconf-client
+--rw netconf-client +--rw netconf-client
+---u netconf-client-grouping +---u netconf-client-grouping
grouping netconf-client-grouping grouping netconf-client-grouping
+-- initiate! {initiate}? +-- initiate! {ssh-initiate or tls-initiate}?
| +-- netconf-server* [name] | +-- netconf-server* [name]
| +-- name? string | +-- name? string
| +-- endpoints | +-- endpoints
| | +-- endpoint* [name] | | +-- endpoint* [name]
| | +-- name? string | | +-- name? string
| | +-- (transport) | | +-- (transport)
| | +--:(ssh) {ssh-initiate}? | | +--:(ssh) {ssh-initiate}?
| | | +-- ssh | | | +-- ssh
| | | +---u netconf-client-grouping | | | +-- tcp-client-parameters
| | | | +---u netconf-client-grouping
| | | +-- ssh-client-parameters
| | | +---u netconf-client-grouping
| | +--:(tls) {tls-initiate}? | | +--:(tls) {tls-initiate}?
| | +-- tls | | +-- tls
| | +---u netconf-client-grouping | | +-- tcp-client-parameters
| | | +---u netconf-client-grouping
| | +-- tls-client-parameters
| | +---u netconf-client-grouping
| +-- connection-type | +-- connection-type
| | +-- (connection-type) | | +-- (connection-type)
| | +--:(persistent-connection) | | +--:(persistent-connection)
| | | +-- persistent! | | | +-- persistent!
| | +--:(periodic-connection) | | +--:(periodic-connection)
| | +-- periodic! | | +-- periodic!
| | +-- period? uint16 | | +-- period? uint16
| | +-- anchor-time? yang:date-and-time | | +-- anchor-time? yang:date-and-time
| | +-- idle-timeout? uint16 | | +-- idle-timeout? uint16
| +-- reconnect-strategy | +-- reconnect-strategy
| +-- start-with? enumeration | +-- start-with? enumeration
| +-- max-attempts? uint8 | +-- max-attempts? uint8
+-- listen! {listen}? +-- listen! {ssh-listen or tls-listen}?
+-- idle-timeout? uint16 +-- idle-timeout? uint16
+-- endpoint* [name] +-- endpoint* [name]
+-- name? string +-- name? string
+-- (transport) +-- (transport)
+--:(ssh) {ssh-listen}? +--:(ssh) {ssh-listen}?
| +-- ssh | +-- ssh
| +---u netconf-client-grouping | +-- tcp-server-parameters
| | +---u netconf-client-grouping
| +-- ssh-client-parameters
| +---u netconf-client-grouping
+--:(tls) {tls-listen}? +--:(tls) {tls-listen}?
+-- tls +-- tls
+---u netconf-client-grouping +-- tcp-server-parameters
| +---u netconf-client-grouping
+-- tls-client-parameters
+---u netconf-client-grouping
3.2. Example Usage 3.2. Example Usage
The following example illustrates configuring a NETCONF client to The following example illustrates configuring a NETCONF client to
initiate connections, using both the SSH and TLS transport protocols, initiate connections, using both the SSH and TLS transport protocols,
as well as listening for call-home connections, again using both the as well as listening for call-home connections, again using both the
SSH and TLS transport protocols. SSH and TLS transport protocols.
This example is consistent with the examples presented in Section 3.2 This example is consistent with the examples presented in Section 2
of [I-D.ietf-netconf-keystore]. of [I-D.ietf-netconf-trust-anchors] and Section 3.2 of
[I-D.ietf-netconf-keystore].
=========== NOTE: '\' line wrapping per BCP XX (RFC XXXX) =========== =========== NOTE: '\' line wrapping per BCP XX (RFC XXXX) ===========
<netconf-client <netconf-client
xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-client"> xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-client">
<!-- NETCONF servers to initiate connections to --> <!-- NETCONF servers to initiate connections to -->
<initiate> <initiate>
<netconf-server> <netconf-server>
<name>corp-fw1</name> <name>corp-fw1</name>
skipping to change at page 8, line 44 skipping to change at page 8, line 41
</listen> </listen>
</netconf-client> </netconf-client>
3.3. YANG Module 3.3. YANG Module
This YANG module has normative references to [RFC6242], [RFC6991], This YANG module has normative references to [RFC6242], [RFC6991],
[RFC7589], [RFC8071], [I-D.kwatsen-netconf-tcp-client-server], [RFC7589], [RFC8071], [I-D.kwatsen-netconf-tcp-client-server],
[I-D.ietf-netconf-ssh-client-server], and [I-D.ietf-netconf-ssh-client-server], and
[I-D.ietf-netconf-tls-client-server]. [I-D.ietf-netconf-tls-client-server].
<CODE BEGINS> file "ietf-netconf-client@2019-04-07.yang" <CODE BEGINS> file "ietf-netconf-client@2019-04-29.yang"
module ietf-netconf-client { module ietf-netconf-client {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-client"; namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-client";
prefix ncc; prefix ncc;
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
skipping to change at page 9, line 21 skipping to change at page 9, line 17
"RFC AAAA: YANG Groupings for TCP Clients and TCP Servers"; "RFC AAAA: YANG Groupings for TCP Clients and TCP Servers";
} }
import ietf-tcp-server { import ietf-tcp-server {
prefix tcps; prefix tcps;
reference reference
"RFC AAAA: YANG Groupings for TCP Clients and TCP Servers"; "RFC AAAA: YANG Groupings for TCP Clients and TCP Servers";
} }
import ietf-ssh-client { import ietf-ssh-client {
prefix sshc; prefix sshc;
revision-date 2019-04-07; // stable grouping definitions revision-date 2019-04-29; // stable grouping definitions
reference reference
"RFC BBBB: YANG Groupings for SSH Clients and SSH Servers"; "RFC BBBB: YANG Groupings for SSH Clients and SSH Servers";
} }
import ietf-tls-client { import ietf-tls-client {
prefix tlsc; prefix tlsc;
revision-date 2019-04-07; // stable grouping definitions revision-date 2019-04-29; // stable grouping definitions
reference reference
"RFC CCCC: YANG Groupings for TLS Clients and TLS Servers"; "RFC CCCC: YANG Groupings for TLS Clients and TLS Servers";
} }
organization organization
"IETF NETCONF (Network Configuration) Working Group"; "IETF NETCONF (Network Configuration) Working Group";
contact contact
"WG Web: <http://datatracker.ietf.org/wg/netconf/> "WG Web: <http://datatracker.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org> WG List: <mailto:netconf@ietf.org>
skipping to change at page 10, line 19 skipping to change at page 10, line 16
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC (https://www.rfc-editor.org/info/rfcXXXX); see the RFC
itself for full legal notices.; itself for full legal notices.;
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
are to be interpreted as described in BCP 14 (RFC 2119) are to be interpreted as described in BCP 14 (RFC 2119)
(RFC 8174) when, and only when, they appear in all (RFC 8174) when, and only when, they appear in all
capitals, as shown here."; capitals, as shown here.";
revision 2019-04-07 { revision 2019-04-29 {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXXX: NETCONF Client and Server Models"; "RFC XXXX: NETCONF Client and Server Models";
} }
// Features // Features
feature initiate {
description
"The 'initiate' feature indicates that the NETCONF client
supports initiating NETCONF connections to NETCONF servers
using at least one transport (e.g., SSH, TLS, etc.).";
}
feature ssh-initiate { feature ssh-initiate {
description description
"The 'ssh-initiate' feature indicates that the NETCONF client "The 'ssh-initiate' feature indicates that the NETCONF client
supports initiating SSH connections to NETCONF servers."; supports initiating SSH connections to NETCONF servers.";
reference reference
"RFC 6242: "RFC 6242:
Using the NETCONF Protocol over Secure Shell (SSH)"; Using the NETCONF Protocol over Secure Shell (SSH)";
} }
feature tls-initiate { feature tls-initiate {
description description
"The 'tls-initiate' feature indicates that the NETCONF client "The 'tls-initiate' feature indicates that the NETCONF client
supports initiating TLS connections to NETCONF servers."; supports initiating TLS connections to NETCONF servers.";
reference reference
"RFC 7589: Using the NETCONF Protocol over Transport "RFC 7589: Using the NETCONF Protocol over Transport
Layer Security (TLS) with Mutual X.509 Authentication"; Layer Security (TLS) with Mutual X.509 Authentication";
} }
feature listen {
description
"The 'listen' feature indicates that the NETCONF client
supports opening a port to accept NETCONF server call
home connections using at least one transport (e.g.,
SSH, TLS, etc.).";
}
feature ssh-listen { feature ssh-listen {
description description
"The 'ssh-listen' feature indicates that the NETCONF client "The 'ssh-listen' feature indicates that the NETCONF client
supports opening a port to listen for incoming NETCONF supports opening a port to listen for incoming NETCONF
server call-home SSH connections."; server call-home SSH connections.";
reference reference
"RFC 8071: NETCONF Call Home and RESTCONF Call Home"; "RFC 8071: NETCONF Call Home and RESTCONF Call Home";
} }
skipping to change at page 11, line 36 skipping to change at page 11, line 18
reference reference
"RFC 8071: NETCONF Call Home and RESTCONF Call Home"; "RFC 8071: NETCONF Call Home and RESTCONF Call Home";
} }
// Groupings // Groupings
grouping netconf-client-grouping { grouping netconf-client-grouping {
description description
"Top-level grouping for NETCONF client configuration."; "Top-level grouping for NETCONF client configuration.";
container initiate { container initiate {
if-feature "initiate"; if-feature "ssh-initiate or tls-initiate";
presence "Enables client to initiate TCP connections"; presence "Enables client to initiate TCP connections";
description description
"Configures client initiating underlying TCP connections."; "Configures client initiating underlying TCP connections.";
list netconf-server { list netconf-server {
key "name"; key "name";
min-elements 1; min-elements 1;
description description
"List of NETCONF servers the NETCONF client is to "List of NETCONF servers the NETCONF client is to
initiate connections to in parallel."; initiate connections to in parallel.";
leaf name { leaf name {
skipping to change at page 12, line 30 skipping to change at page 12, line 12
choice transport { choice transport {
mandatory true; mandatory true;
description description
"Selects between available transports."; "Selects between available transports.";
case ssh { case ssh {
if-feature "ssh-initiate"; if-feature "ssh-initiate";
container ssh { container ssh {
description description
"Specifies IP and SSH specific configuration "Specifies IP and SSH specific configuration
for the connection."; for the connection.";
uses tcpc:tcp-client-grouping { container tcp-client-parameters {
refine "tcp-client-parameters/remote-port" { description
default "830"; "A wrapper around the TCP client parameters
description to avoid name collisions.";
"The NETCONF client will attempt to connect uses tcpc:tcp-client-grouping {
to the IANA-assigned well-known port value refine "remote-port" {
for 'netconf-ssh' (443) if no value is default "830";
specified."; description
"The NETCONF client will attempt to connect
to the IANA-assigned well-known port value
for 'netconf-ssh' (443) if no value is
specified.";
}
} }
} }
uses sshc:ssh-client-grouping; container ssh-client-parameters {
description
"A wrapper around the SSH client parameters to
avoid name collisions.";
uses sshc:ssh-client-grouping;
}
} }
} }
case tls { case tls {
if-feature "tls-initiate"; if-feature "tls-initiate";
container tls { container tls {
description description
"Specifies IP and TLS specific configuration "Specifies IP and TLS specific configuration
for the connection."; for the connection.";
uses tcpc:tcp-client-grouping { container tcp-client-parameters {
refine "tcp-client-parameters/remote-port" { description
default "6513"; "A wrapper around the TCP client parameters
description to avoid name collisions.";
"The NETCONF client will attempt to connect uses tcpc:tcp-client-grouping {
to the IANA-assigned well-known port value refine "remote-port" {
for 'netconf-tls' (6513) if no value is default "6513";
specified."; description
"The NETCONF client will attempt to connect
to the IANA-assigned well-known port value
for 'netconf-tls' (6513) if no value is
specified.";
}
} }
} }
uses tlsc:tls-client-grouping { container tls-client-parameters {
refine "tls-client-parameters/client-identity" description
+ "/auth-type" { "A wrapper around the TLS client parameters
mandatory true; to avoid name collisions.";
description uses tlsc:tls-client-grouping {
"NETCONF/TLS clients MUST pass some refine "client-identity"
authentication credentials."; + "/auth-type" {
mandatory true;
description
"NETCONF/TLS clients MUST pass some
authentication credentials.";
}
} }
} }
} }
} }
} // choice transport } // choice transport
} // list endpoint } // list endpoint
} // container endpoints } // container endpoints
container connection-type { container connection-type {
description description
skipping to change at page 13, line 40 skipping to change at page 13, line 42
choice connection-type { choice connection-type {
mandatory true; mandatory true;
description description
"Selects between available connection types."; "Selects between available connection types.";
case persistent-connection { case persistent-connection {
container persistent { container persistent {
presence "Indicates that a persistent connection is presence "Indicates that a persistent connection is
to be maintained."; to be maintained.";
description description
"Maintain a persistent connection to the NETCONF "Maintain a persistent connection to the NETCONF
server. If the connection goes down, immediately server. If the connection goes down, immediately
start trying to reconnect to it, using the start trying to reconnect to the NETCONF server,
reconnection strategy. using the reconnection strategy.
This connection type minimizes any NETCONF server This connection type minimizes any NETCONF server
to NETCONF client data-transfer delay, albeit at to NETCONF client data-transfer delay, albeit at
the expense of holding resources longer."; the expense of holding resources longer.";
} }
} }
case periodic-connection { case periodic-connection {
container periodic { container periodic {
must 'not (../../endpoints/endpoint/ssh/'
+ 'tcp-client-parameters/keepalives '
+ 'or ../../endpoints/endpoint/ssh/'
+ 'ssh-client-parameters/keepalives '
+ 'or ../../endpoints/endpoint/tls/'
+ 'tcp-client-parameters/keepalives '
+ 'or ../../endpoints/endpoint/tls/'
+ 'tls-client-parameters/keepalives)';
presence "Indicates that a periodic connection is presence "Indicates that a periodic connection is
to be maintained."; to be maintained.";
description description
"Periodically connect to the NETCONF server. The "Periodically connect to the NETCONF server.
NETCONF server should close the connection upon
completing planned activities.
This connection type increases resource This connection type increases resource
utilization, albeit with increased delay in utilization, albeit with increased delay in
NETCONF server to NETCONF client interactions."; NETCONF server to NETCONF client interactions.
The NETCONF client should close the underlying
TCP connection upon completing planned activities.
In the case that the previous connection is still
active, establishing a new connection is NOT
RECOMMENDED.";
leaf period { leaf period {
type uint16; type uint16;
units "minutes"; units "minutes";
default "60"; default "60";
description description
"Duration of time between periodic connections."; "Duration of time between periodic connections.";
} }
leaf anchor-time { leaf anchor-time {
type yang:date-and-time { type yang:date-and-time {
// constrained to minute-level granularity // constrained to minute-level granularity
skipping to change at page 15, line 4 skipping to change at page 14, line 51
midnight everyday."; midnight everyday.";
} }
leaf idle-timeout { leaf idle-timeout {
type uint16; type uint16;
units "seconds"; units "seconds";
default 120; // two minutes default 120; // two minutes
description description
"Specifies the maximum number of seconds that "Specifies the maximum number of seconds that
a NETCONF session may remain idle. A NETCONF a NETCONF session may remain idle. A NETCONF
session will be dropped if it is idle for an session will be dropped if it is idle for an
interval longer than this number of seconds. interval longer then this number of seconds.
If set to zero, then the NETCONF client will If set to zero, then the NETCONF client will
never drop a session because it is idle."; never drop a session because it is idle.";
} }
} }
} }
} }
} }
container reconnect-strategy { container reconnect-strategy {
description description
"The reconnection strategy directs how a NETCONF client "The reconnection strategy directs how a NETCONF client
skipping to change at page 16, line 17 skipping to change at page 16, line 15
description description
"Specifies the number times the NETCONF client tries "Specifies the number times the NETCONF client tries
to connect to a specific endpoint before moving on to connect to a specific endpoint before moving on
to the next endpoint in the list (round robin)."; to the next endpoint in the list (round robin).";
} }
} }
} // netconf-server } // netconf-server
} // initiate } // initiate
container listen { container listen {
if-feature "listen"; if-feature "ssh-listen or tls-listen";
presence "Enables client to accept call-home connections"; presence "Enables client to accept call-home connections";
description description
"Configures client accepting call-home TCP connections."; "Configures client accepting call-home TCP connections.";
leaf idle-timeout { leaf idle-timeout {
type uint16; type uint16;
units "seconds"; units "seconds";
default "3600"; // one hour default "3600"; // one hour
description description
"Specifies the maximum number of seconds that a NETCONF "Specifies the maximum number of seconds that a NETCONF
session may remain idle. A NETCONF session will be session may remain idle. A NETCONF session will be
skipping to change at page 17, line 5 skipping to change at page 17, line 4
choice transport { choice transport {
mandatory true; mandatory true;
description description
"Selects between available transports."; "Selects between available transports.";
case ssh { case ssh {
if-feature "ssh-listen"; if-feature "ssh-listen";
container ssh { container ssh {
description description
"SSH-specific listening configuration for inbound "SSH-specific listening configuration for inbound
connections."; connections.";
uses tcps:tcp-server-grouping {
refine "tcp-server-parameters/local-port" { container tcp-server-parameters {
default "4334"; description
description "A wrapper around the TCP server parameters
"The NETCONF client will listen on the IANA- to avoid name collisions.";
assigned well-known port for 'netconf-ch-ssh' uses tcps:tcp-server-grouping {
(4334) if no value is specified."; refine "local-port" {
default "4334";
description
"The NETCONF client will listen on the IANA-
assigned well-known port for 'netconf-ch-ssh'
(4334) if no value is specified.";
}
} }
} }
uses sshc:ssh-client-grouping; container ssh-client-parameters {
description
"A wrapper around the SSH client parameters
to avoid name collisions.";
uses sshc:ssh-client-grouping;
}
} }
} }
case tls { case tls {
if-feature "tls-listen"; if-feature "tls-listen";
container tls { container tls {
description description
"TLS-specific listening configuration for inbound "TLS-specific listening configuration for inbound
connections."; connections.";
uses tcps:tcp-server-grouping { container tcp-server-parameters {
refine "tcp-server-parameters/local-port" { description
default "4334"; "A wrapper around the TCP server parameters
description to avoid name collisions.";
"The NETCONF client will listen on the IANA- uses tcps:tcp-server-grouping {
assigned well-known port for 'netconf-ch-ssh' refine "local-port" {
(4334) if no value is specified."; default "4334";
description
"The NETCONF client will listen on the IANA-
assigned well-known port for 'netconf-ch-ssh'
(4334) if no value is specified.";
}
} }
} }
uses tlsc:tls-client-grouping { container tls-client-parameters {
refine description
"tls-client-parameters/client-identity/auth-type" { "A wrapper around the TLS client parameters
mandatory true; to avoid name collisions.";
description uses tlsc:tls-client-grouping {
"NETCONF/TLS clients MUST pass some refine "client-identity/auth-type" {
authentication credentials."; mandatory true;
description
"NETCONF/TLS clients MUST pass some
authentication credentials.";
}
} }
} }
} }
} }
} // transport } // transport
} // endpoint } // endpoint
} // listen } // listen
} // netconf-client } // netconf-client
// Protocol accessible node, for servers that implement this // Protocol accessible node, for servers that implement this
skipping to change at page 19, line 10 skipping to change at page 19, line 8
module. module.
Please see Appendix A.2 for a tree diagram that illustrates what the Please see Appendix A.2 for a tree diagram that illustrates what the
module looks like with all the "grouping" statements expanded. module looks like with all the "grouping" statements expanded.
module: ietf-netconf-server module: ietf-netconf-server
+--rw netconf-server +--rw netconf-server
+---u netconf-server-grouping +---u netconf-server-grouping
grouping netconf-server-grouping grouping netconf-server-grouping
+-- listen! {listen}? +-- listen! {ssh-listen or tls-listen}?
| +-- idle-timeout? uint16 | +-- idle-timeout? uint16
| +-- endpoint* [name] | +-- endpoint* [name]
| +-- name? string | +-- name? string
| +-- (transport) | +-- (transport)
| +--:(ssh) {ssh-listen}? | +--:(ssh) {ssh-listen}?
| | +-- ssh | | +-- ssh
| | +---u netconf-server-grouping | | +-- tcp-server-parameters
| | | +---u netconf-server-grouping
| | +-- ssh-server-parameters
| | +---u netconf-server-grouping
| +--:(tls) {tls-listen}? | +--:(tls) {tls-listen}?
| +-- tls | +-- tls
| +---u netconf-server-grouping | +-- tcp-server-parameters
+-- call-home! {call-home}? | | +---u netconf-server-grouping
| +-- tls-server-parameters
| +---u netconf-server-grouping
+-- call-home! {ssh-call-home or tls-call-home}?
+-- netconf-client* [name] +-- netconf-client* [name]
+-- name? string +-- name? string
+-- endpoints +-- endpoints
| +-- endpoint* [name] | +-- endpoint* [name]
| +-- name? string | +-- name? string
| +-- (transport) | +-- (transport)
| +--:(ssh) {ssh-call-home}? | +--:(ssh) {ssh-call-home}?
| | +-- ssh | | +-- ssh
| | +---u netconf-server-grouping | | +-- tcp-client-parameters
| | | +---u netconf-server-grouping
| | +-- ssh-server-parameters
| | +---u netconf-server-grouping
| +--:(tls) {tls-call-home}? | +--:(tls) {tls-call-home}?
| +-- tls | +-- tls
| +---u netconf-server-grouping | +-- tcp-client-parameters
| | +---u netconf-server-grouping
| +-- tls-server-parameters
| +---u netconf-server-grouping
+-- connection-type +-- connection-type
| +-- (connection-type) | +-- (connection-type)
| +--:(persistent-connection) | +--:(persistent-connection)
| | +-- persistent! | | +-- persistent!
| +--:(periodic-connection) | +--:(periodic-connection)
| +-- periodic! | +-- periodic!
| +-- period? uint16 | +-- period? uint16
| +-- anchor-time? yang:date-and-time | +-- anchor-time? yang:date-and-time
| +-- idle-timeout? uint16 | +-- idle-timeout? uint16
+-- reconnect-strategy +-- reconnect-strategy
+-- start-with? enumeration +-- start-with? enumeration
+-- max-attempts? uint8 +-- max-attempts? uint8
4.2. Example Usage 4.2. Example Usage
The following example illustrates configuring a NETCONF server to The following example illustrates configuring a NETCONF server to
listen for NETCONF client connections using both the SSH and TLS listen for NETCONF client connections using both the SSH and TLS
transport protocols, as well as configuring call-home to two NETCONF transport protocols, as well as configuring call-home to two NETCONF
clients, one using SSH and the other using TLS. clients, one using SSH and the other using TLS.
This example is consistent with the examples presented in Section 3.2 This example is consistent with the examples presented in Section 2
of [I-D.ietf-netconf-keystore]. of [I-D.ietf-netconf-trust-anchors] and Section 3.2 of
[I-D.ietf-netconf-keystore].
=========== NOTE: '\' line wrapping per BCP XX (RFC XXXX) =========== =========== NOTE: '\' line wrapping per BCP XX (RFC XXXX) ===========
<netconf-server <netconf-server
xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server" xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-server"
xmlns:x509c2n="urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name"> xmlns:x509c2n="urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name">
<!-- endpoints to listen for NETCONF connections on --> <!-- endpoints to listen for NETCONF connections on -->
<listen> <listen>
<endpoint> <!-- listening for SSH connections --> <endpoint> <!-- listening for SSH connections -->
skipping to change at page 20, line 36 skipping to change at page 20, line 48
<public-key> <public-key>
<local-definition> <local-definition>
<algorithm xmlns:ct="urn:ietf:params:xml:ns:yang:i\ <algorithm xmlns:ct="urn:ietf:params:xml:ns:yang:i\
etf-crypto-types">ct:rsa2048</algorithm> etf-crypto-types">ct:rsa2048</algorithm>
<private-key>base64encodedvalue==</private-key> <private-key>base64encodedvalue==</private-key>
<public-key>base64encodedvalue==</public-key> <public-key>base64encodedvalue==</public-key>
</local-definition> </local-definition>
</public-key> </public-key>
</host-key> </host-key>
</server-identity> </server-identity>
<client-cert-auth> <client-authentication>
<pinned-ca-certs>explicitly-trusted-client-ca-certs</pin\ <supported-authentication-methods>
ned-ca-certs> <publickey/>
<pinned-client-certs>explicitly-trusted-client-certs</pi\ </supported-authentication-methods>
nned-client-certs> <client-auth-defined-elsewhere/>
</client-cert-auth> </client-authentication>
</ssh-server-parameters> </ssh-server-parameters>
</ssh> </ssh>
</endpoint> </endpoint>
<endpoint> <!-- listening for TLS sessions --> <endpoint> <!-- listening for TLS sessions -->
<name>netconf/tls</name> <name>netconf/tls</name>
<tls> <tls>
<tcp-server-parameters> <tcp-server-parameters>
<local-address>192.0.2.7</local-address> <local-address>192.0.2.7</local-address>
</tcp-server-parameters> </tcp-server-parameters>
<tls-server-parameters> <tls-server-parameters>
<server-identity> <server-identity>
<local-definition> <local-definition>
<algorithm xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-\ <algorithm xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-\
crypto-types">ct:rsa2048</algorithm> crypto-types">ct:rsa2048</algorithm>
<private-key>base64encodedvalue==</private-key> <private-key>base64encodedvalue==</private-key>
<public-key>base64encodedvalue==</public-key> <public-key>base64encodedvalue==</public-key>
<cert>base64encodedvalue==</cert> <cert>base64encodedvalue==</cert>
</local-definition> </local-definition>
</server-identity> </server-identity>
<client-authentication> <client-authentication>
<required/>
<pinned-ca-certs>explicitly-trusted-client-ca-certs</pin\ <pinned-ca-certs>explicitly-trusted-client-ca-certs</pin\
ned-ca-certs> ned-ca-certs>
<pinned-client-certs>explicitly-trusted-client-certs</pi\ <pinned-client-certs>explicitly-trusted-client-certs</pi\
nned-client-certs> nned-client-certs>
<cert-maps> <cert-maps>
<cert-to-name> <cert-to-name>
<id>1</id> <id>1</id>
<fingerprint>11:0A:05:11:00</fingerprint> <fingerprint>11:0A:05:11:00</fingerprint>
<map-type>x509c2n:san-any</map-type> <map-type>x509c2n:san-any</map-type>
</cert-to-name> </cert-to-name>
skipping to change at page 22, line 14 skipping to change at page 22, line 28
<public-key> <public-key>
<local-definition> <local-definition>
<algorithm xmlns:ct="urn:ietf:params:xml:ns:ya\ <algorithm xmlns:ct="urn:ietf:params:xml:ns:ya\
ng:ietf-crypto-types">ct:rsa2048</algorithm> ng:ietf-crypto-types">ct:rsa2048</algorithm>
<private-key>base64encodedvalue==</private-key> <private-key>base64encodedvalue==</private-key>
<public-key>base64encodedvalue==</public-key> <public-key>base64encodedvalue==</public-key>
</local-definition> </local-definition>
</public-key> </public-key>
</host-key> </host-key>
</server-identity> </server-identity>
<client-cert-auth> <client-authentication>
<pinned-ca-certs>explicitly-trusted-client-ca-certs<\ <supported-authentication-methods>
/pinned-ca-certs> <publickey/>
<pinned-client-certs>explicitly-trusted-client-certs\ </supported-authentication-methods>
</pinned-client-certs> <client-auth-defined-elsewhere/>
</client-cert-auth> </client-authentication>
</ssh-server-parameters> </ssh-server-parameters>
</ssh> </ssh>
</endpoint> </endpoint>
<endpoint> <endpoint>
<name>west-data-center</name> <name>west-data-center</name>
<ssh> <ssh>
<tcp-client-parameters> <tcp-client-parameters>
<remote-address>west.config-mgr.example.com</remote-ad\ <remote-address>west.config-mgr.example.com</remote-ad\
dress> dress>
</tcp-client-parameters> </tcp-client-parameters>
skipping to change at page 22, line 44 skipping to change at page 23, line 10
<public-key> <public-key>
<local-definition> <local-definition>
<algorithm xmlns:ct="urn:ietf:params:xml:ns:ya\ <algorithm xmlns:ct="urn:ietf:params:xml:ns:ya\
ng:ietf-crypto-types">ct:rsa2048</algorithm> ng:ietf-crypto-types">ct:rsa2048</algorithm>
<private-key>base64encodedvalue==</private-key> <private-key>base64encodedvalue==</private-key>
<public-key>base64encodedvalue==</public-key> <public-key>base64encodedvalue==</public-key>
</local-definition> </local-definition>
</public-key> </public-key>
</host-key> </host-key>
</server-identity> </server-identity>
<client-cert-auth> <client-authentication>
<pinned-ca-certs>explicitly-trusted-client-ca-certs<\ <supported-authentication-methods>
/pinned-ca-certs> <publickey/>
<pinned-client-certs>explicitly-trusted-client-certs\ </supported-authentication-methods>
</pinned-client-certs> <client-auth-defined-elsewhere/>
</client-cert-auth> </client-authentication>
</ssh-server-parameters> </ssh-server-parameters>
</ssh> </ssh>
</endpoint> </endpoint>
</endpoints> </endpoints>
<connection-type> <connection-type>
<periodic> <periodic>
<idle-timeout>300</idle-timeout> <idle-timeout>300</idle-timeout>
<period>60</period> <period>60</period>
</periodic> </periodic>
</connection-type> </connection-type>
<reconnect-strategy> <reconnect-strategy>
<start-with>last-connected</start-with> <start-with>last-connected</start-with>
skipping to change at page 23, line 44 skipping to change at page 24, line 9
<server-identity> <server-identity>
<local-definition> <local-definition>
<algorithm xmlns:ct="urn:ietf:params:xml:ns:yang:i\ <algorithm xmlns:ct="urn:ietf:params:xml:ns:yang:i\
etf-crypto-types">ct:rsa2048</algorithm> etf-crypto-types">ct:rsa2048</algorithm>
<private-key>base64encodedvalue==</private-key> <private-key>base64encodedvalue==</private-key>
<public-key>base64encodedvalue==</public-key> <public-key>base64encodedvalue==</public-key>
<cert>base64encodedvalue==</cert> <cert>base64encodedvalue==</cert>
</local-definition> </local-definition>
</server-identity> </server-identity>
<client-authentication> <client-authentication>
<required/>
<pinned-ca-certs>explicitly-trusted-client-ca-certs<\ <pinned-ca-certs>explicitly-trusted-client-ca-certs<\
/pinned-ca-certs> /pinned-ca-certs>
<pinned-client-certs>explicitly-trusted-client-certs\ <pinned-client-certs>explicitly-trusted-client-certs\
</pinned-client-certs> </pinned-client-certs>
<cert-maps> <cert-maps>
<cert-to-name> <cert-to-name>
<id>1</id> <id>1</id>
<fingerprint>11:0A:05:11:00</fingerprint> <fingerprint>11:0A:05:11:00</fingerprint>
<map-type>x509c2n:san-any</map-type> <map-type>x509c2n:san-any</map-type>
</cert-to-name> </cert-to-name>
<cert-to-name> <cert-to-name>
<id>2</id> <id>2</id>
<fingerprint>B3:4F:A1:8C:54</fingerprint> <fingerprint>B3:4F:A1:8C:54</fingerprint>
<map-type>x509c2n:specified</map-type> <map-type>x509c2n:specified</map-type>
<name>scooby-doo</name> <name>scooby-doo</name>
</cert-to-name> </cert-to-name>
</cert-maps> </cert-maps>
</client-authentication> </client-authentication>
<keepalives> <keepalives>
skipping to change at page 24, line 44 skipping to change at page 25, line 10
<server-identity> <server-identity>
<local-definition> <local-definition>
<algorithm xmlns:ct="urn:ietf:params:xml:ns:yang:i\ <algorithm xmlns:ct="urn:ietf:params:xml:ns:yang:i\
etf-crypto-types">ct:rsa2048</algorithm> etf-crypto-types">ct:rsa2048</algorithm>
<private-key>base64encodedvalue==</private-key> <private-key>base64encodedvalue==</private-key>
<public-key>base64encodedvalue==</public-key> <public-key>base64encodedvalue==</public-key>
<cert>base64encodedvalue==</cert> <cert>base64encodedvalue==</cert>
</local-definition> </local-definition>
</server-identity> </server-identity>
<client-authentication> <client-authentication>
<required/>
<pinned-ca-certs>explicitly-trusted-client-ca-certs<\ <pinned-ca-certs>explicitly-trusted-client-ca-certs<\
/pinned-ca-certs> /pinned-ca-certs>
<pinned-client-certs>explicitly-trusted-client-certs\ <pinned-client-certs>explicitly-trusted-client-certs\
</pinned-client-certs> </pinned-client-certs>
<cert-maps> <cert-maps>
<cert-to-name> <cert-to-name>
<id>1</id> <id>1</id>
<fingerprint>11:0A:05:11:00</fingerprint> <fingerprint>11:0A:05:11:00</fingerprint>
<map-type>x509c2n:san-any</map-type> <map-type>x509c2n:san-any</map-type>
</cert-to-name> </cert-to-name>
<cert-to-name> <cert-to-name>
<id>2</id> <id>2</id>
<fingerprint>B3:4F:A1:8C:54</fingerprint> <fingerprint>B3:4F:A1:8C:54</fingerprint>
<map-type>x509c2n:specified</map-type> <map-type>x509c2n:specified</map-type>
<name>scooby-doo</name> <name>scooby-doo</name>
</cert-to-name> </cert-to-name>
</cert-maps> </cert-maps>
</client-authentication> </client-authentication>
<keepalives> <keepalives>
skipping to change at page 25, line 41 skipping to change at page 26, line 13
</netconf-server> </netconf-server>
4.3. YANG Module 4.3. YANG Module
This YANG module has normative references to [RFC6242], [RFC6991], This YANG module has normative references to [RFC6242], [RFC6991],
[RFC7407], [RFC7589], [RFC8071], [RFC7407], [RFC7589], [RFC8071],
[I-D.kwatsen-netconf-tcp-client-server], [I-D.kwatsen-netconf-tcp-client-server],
[I-D.ietf-netconf-ssh-client-server], and [I-D.ietf-netconf-ssh-client-server], and
[I-D.ietf-netconf-tls-client-server]. [I-D.ietf-netconf-tls-client-server].
<CODE BEGINS> file "ietf-netconf-server@2019-04-07.yang" <CODE BEGINS> file "ietf-netconf-server@2019-04-29.yang"
module ietf-netconf-server { module ietf-netconf-server {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-server"; namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-server";
prefix ncs; prefix ncs;
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
skipping to change at page 26, line 24 skipping to change at page 26, line 45
} }
import ietf-tcp-server { import ietf-tcp-server {
prefix tcps; prefix tcps;
reference reference
"RFC AAAA: YANG Groupings for TCP Clients and TCP Servers"; "RFC AAAA: YANG Groupings for TCP Clients and TCP Servers";
} }
import ietf-ssh-server { import ietf-ssh-server {
prefix sshs; prefix sshs;
revision-date 2019-04-07; // stable grouping definitions revision-date 2019-04-29; // stable grouping definitions
reference reference
"RFC BBBB: YANG Groupings for SSH Clients and SSH Servers"; "RFC BBBB: YANG Groupings for SSH Clients and SSH Servers";
} }
import ietf-tls-server { import ietf-tls-server {
prefix tlss; prefix tlss;
revision-date 2019-04-07; // stable grouping definitions revision-date 2019-04-29; // stable grouping definitions
reference reference
"RFC CCCC: YANG Groupings for TLS Clients and TLS Servers"; "RFC CCCC: YANG Groupings for TLS Clients and TLS Servers";
} }
organization organization
"IETF NETCONF (Network Configuration) Working Group"; "IETF NETCONF (Network Configuration) Working Group";
contact contact
"WG Web: <http://datatracker.ietf.org/wg/netconf/> "WG Web: <http://datatracker.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org> WG List: <mailto:netconf@ietf.org>
skipping to change at page 27, line 23 skipping to change at page 27, line 43
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC (https://www.rfc-editor.org/info/rfcXXXX); see the RFC
itself for full legal notices.; itself for full legal notices.;
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
are to be interpreted as described in BCP 14 (RFC 2119) are to be interpreted as described in BCP 14 (RFC 2119)
(RFC 8174) when, and only when, they appear in all (RFC 8174) when, and only when, they appear in all
capitals, as shown here."; capitals, as shown here.";
revision 2019-04-07 { revision 2019-04-29 {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXXX: NETCONF Client and Server Models"; "RFC XXXX: NETCONF Client and Server Models";
} }
// Features // Features
feature listen {
description
"The 'listen' feature indicates that the NETCONF server
supports opening a port to accept NETCONF client connections
using at least one transport (e.g., SSH, TLS, etc.).";
}
feature ssh-listen { feature ssh-listen {
description description
"The 'ssh-listen' feature indicates that the NETCONF server "The 'ssh-listen' feature indicates that the NETCONF server
supports opening a port to accept NETCONF over SSH supports opening a port to accept NETCONF over SSH
client connections."; client connections.";
reference reference
"RFC 6242: "RFC 6242:
Using the NETCONF Protocol over Secure Shell (SSH)"; Using the NETCONF Protocol over Secure Shell (SSH)";
} }
skipping to change at page 28, line 11 skipping to change at page 28, line 25
description description
"The 'tls-listen' feature indicates that the NETCONF server "The 'tls-listen' feature indicates that the NETCONF server
supports opening a port to accept NETCONF over TLS supports opening a port to accept NETCONF over TLS
client connections."; client connections.";
reference reference
"RFC 7589: Using the NETCONF Protocol over Transport "RFC 7589: Using the NETCONF Protocol over Transport
Layer Security (TLS) with Mutual X.509 Layer Security (TLS) with Mutual X.509
Authentication"; Authentication";
} }
feature call-home {
description
"The 'call-home' feature indicates that the NETCONF server
supports initiating NETCONF call home connections to
NETCONF clients using at least one transport (e.g., SSH,
TLS, etc.).";
reference
"RFC 8071: NETCONF Call Home and RESTCONF Call Home";
}
feature ssh-call-home { feature ssh-call-home {
description description
"The 'ssh-call-home' feature indicates that the NETCONF "The 'ssh-call-home' feature indicates that the NETCONF
server supports initiating a NETCONF over SSH call server supports initiating a NETCONF over SSH call
home connection to NETCONF clients."; home connection to NETCONF clients.";
reference reference
"RFC 8071: NETCONF Call Home and RESTCONF Call Home"; "RFC 8071: NETCONF Call Home and RESTCONF Call Home";
} }
feature tls-call-home { feature tls-call-home {
skipping to change at page 28, line 45 skipping to change at page 28, line 49
reference reference
"RFC 8071: NETCONF Call Home and RESTCONF Call Home"; "RFC 8071: NETCONF Call Home and RESTCONF Call Home";
} }
// Groupings // Groupings
grouping netconf-server-grouping { grouping netconf-server-grouping {
description description
"Top-level grouping for NETCONF server configuration."; "Top-level grouping for NETCONF server configuration.";
container listen { container listen {
if-feature "listen"; if-feature "ssh-listen or tls-listen";
presence "Enables server to listen for TCP connections"; presence
"Enables server to listen for NETCONF client connections.";
description description
"Configures listen behavior"; "Configures listen behavior";
leaf idle-timeout { leaf idle-timeout {
type uint16; type uint16;
units "seconds"; units "seconds";
default 3600; // one hour default 3600; // one hour
description description
"Specifies the maximum number of seconds that a NETCONF "Specifies the maximum number of seconds that a NETCONF
session may remain idle. A NETCONF session will be session may remain idle. A NETCONF session will be
dropped if it is idle for an interval longer than this dropped if it is idle for an interval longer than this
skipping to change at page 29, line 34 skipping to change at page 29, line 40
choice transport { choice transport {
mandatory true; mandatory true;
description description
"Selects between available transports."; "Selects between available transports.";
case ssh { case ssh {
if-feature "ssh-listen"; if-feature "ssh-listen";
container ssh { container ssh {
description description
"SSH-specific listening configuration for inbound "SSH-specific listening configuration for inbound
connections."; connections.";
uses tcps:tcp-server-grouping { container tcp-server-parameters {
refine "tcp-server-parameters/local-port" { description
default "830"; "A wrapper around the TCP client parameters
description to avoid name collisions.";
"The NETCONF server will listen on the IANA- uses tcps:tcp-server-grouping {
assigned well-known port value for 'netconf-ssh' refine "local-port" {
(830) if no value is specified."; default "830";
description
"The NETCONF server will listen on the
IANA-assigned well-known port value
for 'netconf-ssh' (830) if no value
is specified.";
}
} }
} }
uses sshs:ssh-server-grouping; container ssh-server-parameters {
description
"A wrapper around the SSH server parameters
to avoid name collisions.";
uses sshs:ssh-server-grouping;
}
} }
} }
case tls { case tls {
if-feature "tls-listen"; if-feature "tls-listen";
container tls { container tls {
description description
"TLS-specific listening configuration for inbound "TLS-specific listening configuration for inbound
connections."; connections.";
container tcp-server-parameters {
uses tcps:tcp-server-grouping { description
refine "tcp-server-parameters/local-port" { "A wrapper around the TCP client parameters
default "6513"; to avoid name collisions.";
description uses tcps:tcp-server-grouping {
"The NETCONF server will listen on the IANA- refine "local-port" {
assigned well-known port value for 'netconf-tls' default "6513";
(6513) if no value is specified."; description
"The NETCONF server will listen on the
IANA-assigned well-known port value
for 'netconf-tls' (6513) if no value
is specified.";
}
} }
} }
uses tlss:tls-server-grouping { container tls-server-parameters {
refine description
"tls-server-parameters/client-authentication" { "A wrapper around the TLS server parameters to
must 'pinned-ca-certs or pinned-client-certs'; avoid name collisions.";
description uses tlss:tls-server-grouping {
"NETCONF/TLS servers MUST validate client refine "client-authentication" {
certiticates."; //must 'pinned-ca-certs or pinned-client-certs';
}
augment
"tls-server-parameters/client-authentication" {
description
"Augments in the cert-to-name structure.";
container cert-maps {
uses x509c2n:cert-to-name;
description description
"The cert-maps container is used by a TLS- "NETCONF/TLS servers MUST validate client
based NETCONF server to map the NETCONF certificates.";
client's presented X.509 certificate to a }
NETCONF username. If no matching and valid augment "client-authentication" {
cert-to-name list entry can be found, then description
the NETCONF server MUST close the connection, "Augments in the cert-to-name structure.";
and MUST NOT accept NETCONF messages over container cert-maps {
it."; uses x509c2n:cert-to-name;
reference description
"RFC WWWW: NETCONF over TLS, Section 7"; "The cert-maps container is used by a TLS-
based NETCONF server to map the NETCONF
client's presented X.509 certificate to
a NETCONF username. If no matching and
valid cert-to-name list entry can be found,
then the NETCONF server MUST close the
connection, and MUST NOT accept NETCONF
messages over it.";
reference
"RFC WWWW: NETCONF over TLS, Section 7";
}
} }
} }
} }
} }
} }
} }
} }
} }
container call-home { container call-home {
if-feature "call-home"; if-feature "ssh-call-home or tls-call-home";
presence "Enables server to initiate TCP connections"; presence
description "Configures call-home behavior"; "Enables the NETCONF server to initiate the underlying
transport connection to NETCONF clients.";
description "Configures call home behavior.";
list netconf-client { list netconf-client {
key "name"; key "name";
min-elements 1; min-elements 1;
description description
"List of NETCONF clients the NETCONF server is to "List of NETCONF clients the NETCONF server is to
initiate call-home connections to in parallel."; initiate call-home connections to in parallel.";
leaf name { leaf name {
type string; type string;
description description
"An arbitrary name for the remote NETCONF client."; "An arbitrary name for the remote NETCONF client.";
skipping to change at page 31, line 39 skipping to change at page 32, line 18
choice transport { choice transport {
mandatory true; mandatory true;
description description
"Selects between available transports."; "Selects between available transports.";
case ssh { case ssh {
if-feature "ssh-call-home"; if-feature "ssh-call-home";
container ssh { container ssh {
description description
"Specifies SSH-specific call-home transport "Specifies SSH-specific call-home transport
configuration."; configuration.";
uses tcpc:tcp-client-grouping { container tcp-client-parameters {
refine "tcp-client-parameters/remote-port" { description
default "4334"; "A wrapper around the TCP client parameters
description to avoid name collisions.";
"The NETCONF server will attempt to connect uses tcpc:tcp-client-grouping {
to the IANA-assigned well-known port for refine "remote-port" {
'netconf-ch-tls' (4334) if no value is default "4334";
specified."; description
"The NETCONF server will attempt to connect
to the IANA-assigned well-known port for
'netconf-ch-tls' (4334) if no value is
specified.";
}
} }
} }
uses sshs:ssh-server-grouping; container ssh-server-parameters {
description
"A wrapper around the SSH server parameters
to avoid name collisions.";
uses sshs:ssh-server-grouping;
}
} }
} }
case tls { case tls {
if-feature "tls-call-home"; if-feature "tls-call-home";
container tls { container tls {
description description
"Specifies TLS-specific call-home transport "Specifies TLS-specific call-home transport
configuration."; configuration.";
uses tcpc:tcp-client-grouping { container tcp-client-parameters {
refine "tcp-client-parameters/remote-port" { description
default "4335"; "A wrapper around the TCP client parameters
description to avoid name collisions.";
"The NETCONF server will attempt to connect uses tcpc:tcp-client-grouping {
to the IANA-assigned well-known port for refine "remote-port" {
'netconf-ch-tls' (4335) if no value is default "4335";
specified."; description
"The NETCONF server will attempt to connect
to the IANA-assigned well-known port for
'netconf-ch-tls' (4335) if no value is
specified.";
}
} }
} }
uses tlss:tls-server-grouping { container tls-server-parameters {
refine description
"tls-server-parameters/client-authentication" { "A wrapper around the TLS server parameters
to avoid name collisions.";
uses tlss:tls-server-grouping {
refine "client-authentication" {
/* commented out since auth could be external
must 'pinned-ca-certs or pinned-client-certs'; must 'pinned-ca-certs or pinned-client-certs';
description */
"NETCONF/TLS servers MUST validate client
certiticates.";
}
augment
"tls-server-parameters/client-authentication" {
description
"Augments in the cert-to-name structure.";
container cert-maps {
uses x509c2n:cert-to-name;
description description
"The cert-maps container is used by a "NETCONF/TLS servers MUST validate client
TLS-based NETCONF server to map the certificates.";
NETCONF client's presented X.509 }
certificate to a NETCONF username. If augment "client-authentication" {
no matching and valid cert-to-name list description
entry can be found, then the NETCONF "Augments in the cert-to-name structure.";
server MUST close the connection, and container cert-maps {
MUST NOT accept NETCONF messages over uses x509c2n:cert-to-name;
it."; description
reference "The cert-maps container is used by a
"RFC WWWW: NETCONF over TLS, Section 7"; TLS-based NETCONF server to map the
NETCONF client's presented X.509
certificate to a NETCONF username. If
no matching and valid cert-to-name list
entry can be found, then the NETCONF
server MUST close the connection, and
MUST NOT accept NETCONF messages over
it.";
reference
"RFC WWWW: NETCONF over TLS, Section 7";
}
} }
} }
} }
} }
} // tls } // tls
} // choice } // choice
} // endpoint } // endpoint
} // endpoints } // endpoints
container connection-type { container connection-type {
description description
"Indicates the NETCONF server's preference for how the "Indicates the NETCONF server's preference for how the
NETCONF connection is maintained."; NETCONF connection is maintained.";
choice connection-type { choice connection-type {
mandatory true; mandatory true;
description description
"Selects between available connection types."; "Selects between available connection types.";
case persistent-connection { case persistent-connection {
skipping to change at page 33, line 22 skipping to change at page 34, line 21
mandatory true; mandatory true;
description description
"Selects between available connection types."; "Selects between available connection types.";
case persistent-connection { case persistent-connection {
container persistent { container persistent {
presence "Indicates that a persistent connection is presence "Indicates that a persistent connection is
to be maintained."; to be maintained.";
description description
"Maintain a persistent connection to the NETCONF "Maintain a persistent connection to the NETCONF
client. If the connection goes down, immediately client. If the connection goes down, immediately
start trying to reconnect to it, using the start trying to reconnect to the NETCONF client,
reconnection strategy. using the reconnection strategy.
This connection type minimizes any NETCONF client This connection type minimizes any NETCONF client
to NETCONF server data-transfer delay, albeit at to NETCONF server data-transfer delay, albeit at
the expense of holding resources longer."; the expense of holding resources longer.";
} // container persistent } // container persistent
} // case persistent-connection } // case persistent-connection
case periodic-connection { case periodic-connection {
container periodic { container periodic {
must 'not (../../endpoints/endpoint/ssh/'
+ 'tcp-client-parameters/keepalives '
+ 'or ../../endpoints/endpoint/ssh/'
+ 'ssh-server-parameters/keepalives '
+ 'or ../../endpoints/endpoint/tls/'
+ 'tcp-client-parameters/keepalives '
+ 'or ../../endpoints/endpoint/tls/'
+ 'tls-server-parameters/keepalives)';
presence "Indicates that a periodic connection is presence "Indicates that a periodic connection is
to be maintained."; to be maintained.";
description description
"Periodically connect to the NETCONF client. The "Periodically connect to the NETCONF client.
NETCONF client should close the underlying TLS
connection upon completing planned activities.
This connection type increases resource This connection type increases resource
utilization, albeit with increased delay in utilization, albeit with increased delay in
NETCONF client to NETCONF client interactions."; NETCONF client to NETCONF client interactions.
The NETCONF client SHOULD gracefully close the
connection using <close-session> upon completing
planned activities. If the NETCONF session is
not closed gracefully, the NETCONF server MUST
immediately attempt to reestablish the connection.
In the case that the previous connection is still
active (i.e., the NETCONF client has not closed
it yet), establishing a new connection is NOT
RECOMMENDED.";
leaf period { leaf period {
type uint16; type uint16;
units "minutes"; units "minutes";
default "60"; default "60";
description description
"Duration of time between periodic connections."; "Duration of time between periodic connections.";
} }
leaf anchor-time { leaf anchor-time {
type yang:date-and-time { type yang:date-and-time {
// constrained to minute-level granularity // constrained to minute-level granularity
skipping to change at page 36, line 8 skipping to change at page 37, line 8
container netconf-server { container netconf-server {
uses netconf-server-grouping; uses netconf-server-grouping;
description description
"Top-level container for NETCONF server configuration."; "Top-level container for NETCONF server configuration.";
} }
} }
<CODE ENDS> <CODE ENDS>
5. Design Considerations 5. Security Considerations
Editorial: this section is a hold over from before, previously called
"Objectives". It was only written two support the "server" (not the
"client"). The question is if it's better to add the missing
"client" parts, or remove this section altogether.
The primary purpose of the YANG modules defined herein is to enable
the configuration of the NETCONF client and servers. This scope
includes the following objectives:
5.1. Support all NETCONF transports
The YANG module should support all current NETCONF transports, namely
NETCONF over SSH [RFC6242], NETCONF over TLS [RFC7589], and to be
extensible to support future transports as necessary.
Because implementations may not support all transports, the modules
should use YANG "feature" statements so that implementations can
accurately advertise which transports are supported.
5.2. Enable each transport to select which keys to use
Servers may have a multiplicity of host-keys or server-certificates
from which subsets may be selected for specific uses. For instance,
a NETCONF server may want to use one set of SSH host-keys when
listening on port 830, and a different set of SSH host-keys when
calling home. The data models provided herein should enable
configuration of which keys to use on a per-use basis.
5.3. Support authenticating NETCONF clients certificates
When a certificate is used to authenticate a NETCONF client, there is
a need to configure the server to know how to authenticate the
certificates. The server should be able to authenticate the client's
certificate either by using path-validation to a configured trust
anchor or by matching the client-certificate to one previously
configured.
5.4. Support mapping authenticated NETCONF client certificates to
usernames
When a client certificate is used for TLS client authentication, the
NETCONF server must be able to derive a username from the
authenticated certificate. Thus the modules defined herein should
enable this mapping to be configured.
5.5. Support both listening for connections and call home
The NETCONF protocols were originally defined as having the server
opening a port to listen for client connections. More recently the
NETCONF working group defined support for call-home ([RFC8071]),
enabling the server to initiate the connection to the client. Thus
the modules defined herein should enable configuration for both
listening for connections and calling home. Because implementations
may not support both listening for connections and calling home, YANG
"feature" statements should be used so that implementation can
accurately advertise the connection types it supports.
5.6. For Call Home connections
The following objectives only pertain to call home connections.
5.6.1. Support more than one NETCONF client
A NETCONF server may be managed by more than one NETCONF client. For
instance, a deployment may have one client for provisioning and
another for fault monitoring. Therefore, when it is desired for a
server to initiate call home connections, it should be able to do so
to more than one client.
5.6.2. Support NETCONF clients having more than one endpoint
A NETCONF client managing a NETCONF server may implement a high-
availability strategy employing a multiplicity of active and/or
passive endpoint. Therefore, when it is desired for a server to
initiate call home connections, it should be able to connect to any
of the client's endpoints.
5.6.3. Support a reconnection strategy
Assuming a NETCONF client has more than one endpoint, then it becomes
necessary to configure how a NETCONF server should reconnect to the
client should it lose its connection to one the client's endpoints.
For instance, the NETCONF server may start with first endpoint
defined in a user-ordered list of endpoints or with the last
endpoints it was connected to.
5.6.4. Support both persistent and periodic connections
NETCONF clients may vary greatly on how frequently they need to
interact with a NETCONF server, how responsive interactions need to
be, and how many simultaneous connections they can support. Some
clients may need a persistent connection to servers to optimize real-
time interactions, while others prefer periodic interactions in order
to minimize resource requirements. Therefore, when it is necessary
for server to initiate connections, it should be configurable if the
connection is persistent or periodic.
5.6.5. Reconnection strategy for periodic connections
The reconnection strategy should apply to both persistent and
periodic connections. How it applies to periodic connections becomes
clear when considering that a periodic "connection" is a logical
connection to a single server. That is, the periods of
unconnectedness are intentional as opposed to due to external
reasons. A periodic "connection" should always reconnect to the same
server until it is no longer able to, at which time the reconnection
strategy guides how to connect to another server.
5.6.6. Keep-alives for persistent connections
If a persistent connection is desired, it is the responsibility of
the connection initiator to actively test the "aliveness" of the
connection. The connection initiator must immediately work to
reestablish a persistent connection as soon as the connection is
lost. How often the connection should be tested is driven by NETCONF
client requirements, and therefore keep-alive settings should be
configurable on a per-client basis.
5.6.7. Customizations for periodic connections
If a periodic connection is desired, it is necessary for the NETCONF
server to know how often it should connect. This frequency
determines the maximum amount of time a NETCONF client may have to
wait to send data to a server. A server may connect to a client
before this interval expires if desired (e.g., to send data to a
client).
6. Security Considerations
The YANG module defined in this document uses groupings defined in The YANG module defined in this document uses groupings defined in
[I-D.kwatsen-netconf-tcp-client-server], [I-D.kwatsen-netconf-tcp-client-server],
[I-D.ietf-netconf-ssh-client-server], and [I-D.ietf-netconf-ssh-client-server], and
[I-D.ietf-netconf-tls-client-server]. Please see the Security [I-D.ietf-netconf-tls-client-server]. Please see the Security
Considerations section in those documents for concerns related those Considerations section in those documents for concerns related those
groupings. groupings.
The YANG modules defined in this document are designed to be accessed The YANG modules defined in this document are designed to be accessed
via YANG based management protocols, such as NETCONF [RFC6241] and via YANG based management protocols, such as NETCONF [RFC6241] and
skipping to change at page 39, line 45 skipping to change at page 38, line 8
document need to be protected from read operations. document need to be protected from read operations.
Some of the RPC operations in the YANG modules may be considered Some of the RPC operations in the YANG modules may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. These are the important to control access to these operations. These are the
operations and their sensitivity/vulnerability: operations and their sensitivity/vulnerability:
The modules defined in this document do not define any 'RPC' or The modules defined in this document do not define any 'RPC' or
'action' statements. 'action' statements.
7. IANA Considerations 6. IANA Considerations
7.1. The IETF XML Registry 6.1. The IETF XML Registry
This document registers two URIs in the "ns" subregistry of the IETF This document registers two URIs in the "ns" subregistry of the IETF
XML Registry [RFC3688]. Following the format in [RFC3688], the XML Registry [RFC3688]. Following the format in [RFC3688], the
following registrations are requested: following registrations are requested:
URI: urn:ietf:params:xml:ns:yang:ietf-netconf-client URI: urn:ietf:params:xml:ns:yang:ietf-netconf-client
Registrant Contact: The NETCONF WG of the IETF. Registrant Contact: The NETCONF WG of the IETF.
XML: N/A, the requested URI is an XML namespace. XML: N/A, the requested URI is an XML namespace.
URI: urn:ietf:params:xml:ns:yang:ietf-netconf-server URI: urn:ietf:params:xml:ns:yang:ietf-netconf-server
Registrant Contact: The NETCONF WG of the IETF. Registrant Contact: The NETCONF WG of the IETF.
XML: N/A, the requested URI is an XML namespace. XML: N/A, the requested URI is an XML namespace.
7.2. The YANG Module Names Registry 6.2. The YANG Module Names Registry
This document registers two YANG modules in the YANG Module Names This document registers two YANG modules in the YANG Module Names
registry [RFC6020]. Following the format in [RFC6020], the the registry [RFC6020]. Following the format in [RFC6020], the the
following registrations are requested: following registrations are requested:
name: ietf-netconf-client name: ietf-netconf-client
namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-client namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-client
prefix: ncc prefix: ncc
reference: RFC XXXX reference: RFC XXXX
name: ietf-netconf-server name: ietf-netconf-server
namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-server namespace: urn:ietf:params:xml:ns:yang:ietf-netconf-server
prefix: ncs prefix: ncs
reference: RFC XXXX reference: RFC XXXX
8. References 7. References
8.1. Normative References 7.1. Normative References
[I-D.ietf-netconf-keystore] [I-D.ietf-netconf-keystore]
Watsen, K., "YANG Data Model for a Centralized Keystore Watsen, K., "YANG Data Model for a Centralized Keystore
Mechanism", draft-ietf-netconf-keystore-08 (work in Mechanism", draft-ietf-netconf-keystore-08 (work in
progress), March 2019. progress), March 2019.
[I-D.ietf-netconf-ssh-client-server] [I-D.ietf-netconf-ssh-client-server]
Watsen, K., Wu, G., and L. Xia, "YANG Groupings for SSH Watsen, K., Wu, G., and L. Xia, "YANG Groupings for SSH
Clients and SSH Servers", draft-ietf-netconf-ssh-client- Clients and SSH Servers", draft-ietf-netconf-ssh-client-
server-11 (work in progress), March 2019. server-12 (work in progress), April 2019.
[I-D.ietf-netconf-tls-client-server] [I-D.ietf-netconf-tls-client-server]
Watsen, K., Wu, G., and L. Xia, "YANG Groupings for TLS Watsen, K., Wu, G., and L. Xia, "YANG Groupings for TLS
Clients and TLS Servers", draft-ietf-netconf-tls-client- Clients and TLS Servers", draft-ietf-netconf-tls-client-
server-10 (work in progress), March 2019. server-11 (work in progress), April 2019.
[I-D.kwatsen-netconf-tcp-client-server] [I-D.kwatsen-netconf-tcp-client-server]
Watsen, K., "YANG Groupings for TCP Clients and TCP Watsen, K., "YANG Groupings for TCP Clients and TCP
Servers", draft-kwatsen-netconf-tcp-client-server-00 (work Servers", draft-kwatsen-netconf-tcp-client-server-01 (work
in progress), March 2019. in progress), April 2019.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020, the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010, DOI 10.17487/RFC6020, October 2010,
<https://www.rfc-editor.org/info/rfc6020>. <https://www.rfc-editor.org/info/rfc6020>.
skipping to change at page 41, line 46 skipping to change at page 40, line 9
<https://www.rfc-editor.org/info/rfc7589>. <https://www.rfc-editor.org/info/rfc7589>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016, RFC 7950, DOI 10.17487/RFC7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>. <https://www.rfc-editor.org/info/rfc7950>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>. May 2017, <https://www.rfc-editor.org/info/rfc8174>.
8.2. Informative References 7.2. Informative References
[I-D.ietf-netconf-trust-anchors]
Watsen, K., "YANG Data Model for Global Trust Anchors",
draft-ietf-netconf-trust-anchors-03 (work in progress),
March 2019.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004, DOI 10.17487/RFC3688, January 2004,
<https://www.rfc-editor.org/info/rfc3688>. <https://www.rfc-editor.org/info/rfc3688>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<https://www.rfc-editor.org/info/rfc8040>. <https://www.rfc-editor.org/info/rfc8040>.
[RFC8071] Watsen, K., "NETCONF Call Home and RESTCONF Call Home", [RFC8071] Watsen, K., "NETCONF Call Home and RESTCONF Call Home",
skipping to change at page 43, line 22 skipping to change at page 41, line 22
This tree diagram shows all the nodes defined in this module, This tree diagram shows all the nodes defined in this module,
including those defined by "grouping" statements used by this module. including those defined by "grouping" statements used by this module.
Please see Section 3.1 for a tree diagram that illustrates what the Please see Section 3.1 for a tree diagram that illustrates what the
module looks like without all the "grouping" statements expanded. module looks like without all the "grouping" statements expanded.
=========== NOTE: '\' line wrapping per BCP XX (RFC XXXX) =========== =========== NOTE: '\' line wrapping per BCP XX (RFC XXXX) ===========
module: ietf-netconf-client module: ietf-netconf-client
+--rw netconf-client +--rw netconf-client
+--rw initiate! {initiate}? +--rw initiate! {ssh-initiate or tls-initiate}?
| +--rw netconf-server* [name] | +--rw netconf-server* [name]
| +--rw name string | +--rw name string
| +--rw endpoints | +--rw endpoints
| | +--rw endpoint* [name] | | +--rw endpoint* [name]
| | +--rw name string | | +--rw name string
| | +--rw (transport) | | +--rw (transport)
| | +--:(ssh) {ssh-initiate}? | | +--:(ssh) {ssh-initiate}?
| | | +--rw ssh | | | +--rw ssh
| | | +--rw tcp-client-parameters | | | +--rw tcp-client-parameters
| | | | +--rw remote-address inet:host | | | | +--rw remote-address inet:host
| | | | +--rw remote-port? inet:port-number | | | | +--rw remote-port? inet:port-number
| | | | +--rw local-address? inet:ip-address | | | | +--rw local-address? inet:ip-address
| | | | +--rw local-port? inet:port-number | | | | +--rw local-port? inet:port-number
| | | | +--rw keepalives! | | | | +--rw keepalives!
| | | | {tcp-client-keepalives}?
| | | | +--rw idle-time uint16 | | | | +--rw idle-time uint16
| | | | +--rw max-probes? uint16 | | | | +--rw max-probes uint16
| | | | +--rw probe-interval? uint16 | | | | +--rw probe-interval uint16
| | | +--rw ssh-client-parameters | | | +--rw ssh-client-parameters
| | | +--rw client-identity | | | +--rw client-identity
| | | | +--rw username? string | | | | +--rw username? string
| | | | +--rw (auth-type) | | | | +--rw (auth-type)
| | | | +--:(password) | | | | +--:(password)
| | | | | +--rw password? string | | | | | +--rw password? string
| | | | +--:(public-key) | | | | +--:(public-key)
| | | | | +--rw public-key | | | | | +--rw public-key
| | | | | +--rw (local-or-keystore) | | | | | +--rw (local-or-keystore)
| | | | | +--:(local) | | | | | +--:(local)
skipping to change at page 46, line 36 skipping to change at page 44, line 35
| | | +--rw max-wait? uint16 | | | +--rw max-wait? uint16
| | | +--rw max-attempts? uint8 | | | +--rw max-attempts? uint8
| | +--:(tls) {tls-initiate}? | | +--:(tls) {tls-initiate}?
| | +--rw tls | | +--rw tls
| | +--rw tcp-client-parameters | | +--rw tcp-client-parameters
| | | +--rw remote-address inet:host | | | +--rw remote-address inet:host
| | | +--rw remote-port? inet:port-number | | | +--rw remote-port? inet:port-number
| | | +--rw local-address? inet:ip-address | | | +--rw local-address? inet:ip-address
| | | +--rw local-port? inet:port-number | | | +--rw local-port? inet:port-number
| | | +--rw keepalives! | | | +--rw keepalives!
| | | {tcp-client-keepalives}?
| | | +--rw idle-time uint16 | | | +--rw idle-time uint16
| | | +--rw max-probes? uint16 | | | +--rw max-probes uint16
| | | +--rw probe-interval? uint16 | | | +--rw probe-interval uint16
| | +--rw tls-client-parameters | | +--rw tls-client-parameters
| | +--rw client-identity | | +--rw client-identity
| | | +--rw (auth-type) | | | +--rw (auth-type)
| | | +--:(certificate) | | | +--:(certificate)
| | | +--rw certificate | | | +--rw certificate
| | | +--rw (local-or-keystore) | | | +--rw (local-or-keystore)
| | | +--:(local) | | | +--:(local)
| | | | {local-keys-sup\ | | | | {local-keys-sup\
ported}? ported}?
| | | | +--rw local-definition | | | | +--rw local-definition
skipping to change at page 48, line 29 skipping to change at page 46, line 27
| | +--:(persistent-connection) | | +--:(persistent-connection)
| | | +--rw persistent! | | | +--rw persistent!
| | +--:(periodic-connection) | | +--:(periodic-connection)
| | +--rw periodic! | | +--rw periodic!
| | +--rw period? uint16 | | +--rw period? uint16
| | +--rw anchor-time? yang:date-and-time | | +--rw anchor-time? yang:date-and-time
| | +--rw idle-timeout? uint16 | | +--rw idle-timeout? uint16
| +--rw reconnect-strategy | +--rw reconnect-strategy
| +--rw start-with? enumeration | +--rw start-with? enumeration
| +--rw max-attempts? uint8 | +--rw max-attempts? uint8
+--rw listen! {listen}? +--rw listen! {ssh-listen or tls-listen}?
+--rw idle-timeout? uint16 +--rw idle-timeout? uint16
+--rw endpoint* [name] +--rw endpoint* [name]
+--rw name string +--rw name string
+--rw (transport) +--rw (transport)
+--:(ssh) {ssh-listen}? +--:(ssh) {ssh-listen}?
| +--rw ssh | +--rw ssh
| +--rw tcp-server-parameters | +--rw tcp-server-parameters
| | +--rw local-address inet:ip-address | | +--rw local-address inet:ip-address
| | +--rw local-port? inet:port-number | | +--rw local-port? inet:port-number
| | +--rw keepalives! {tcp-server-keepalives}? | | +--rw keepalives!
| | +--rw idle-time uint16 | | +--rw idle-time uint16
| | +--rw max-probes? uint16 | | +--rw max-probes uint16
| | +--rw probe-interval? uint16 | | +--rw probe-interval uint16
| +--rw ssh-client-parameters | +--rw ssh-client-parameters
| +--rw client-identity | +--rw client-identity
| | +--rw username? string | | +--rw username? string
| | +--rw (auth-type) | | +--rw (auth-type)
| | +--:(password) | | +--:(password)
| | | +--rw password? string | | | +--rw password? string
| | +--:(public-key) | | +--:(public-key)
| | | +--rw public-key | | | +--rw public-key
| | | +--rw (local-or-keystore) | | | +--rw (local-or-keystore)
| | | +--:(local) | | | +--:(local)
skipping to change at page 51, line 10 skipping to change at page 49, line 8
| | +--rw mac | | +--rw mac
| | +--rw mac-alg* identityref | | +--rw mac-alg* identityref
| +--rw keepalives! {ssh-client-keepalives}? | +--rw keepalives! {ssh-client-keepalives}?
| +--rw max-wait? uint16 | +--rw max-wait? uint16
| +--rw max-attempts? uint8 | +--rw max-attempts? uint8
+--:(tls) {tls-listen}? +--:(tls) {tls-listen}?
+--rw tls +--rw tls
+--rw tcp-server-parameters +--rw tcp-server-parameters
| +--rw local-address inet:ip-address | +--rw local-address inet:ip-address
| +--rw local-port? inet:port-number | +--rw local-port? inet:port-number
| +--rw keepalives! {tcp-server-keepalives}? | +--rw keepalives!
| +--rw idle-time uint16 | +--rw idle-time uint16
| +--rw max-probes? uint16 | +--rw max-probes uint16
| +--rw probe-interval? uint16 | +--rw probe-interval uint16
+--rw tls-client-parameters +--rw tls-client-parameters
+--rw client-identity +--rw client-identity
| +--rw (auth-type) | +--rw (auth-type)
| +--:(certificate) | +--:(certificate)
| +--rw certificate | +--rw certificate
| +--rw (local-or-keystore) | +--rw (local-or-keystore)
| +--:(local) | +--:(local)
| | {local-keys-supported\ | | {local-keys-supported\
}? }?
| | +--rw local-definition | | +--rw local-definition
skipping to change at page 52, line 43 skipping to change at page 50, line 40
This tree diagram shows all the nodes defined in this module, This tree diagram shows all the nodes defined in this module,
including those defined by "grouping" statements used by this module. including those defined by "grouping" statements used by this module.
Please see Section 4.1 for a tree diagram that illustrates what the Please see Section 4.1 for a tree diagram that illustrates what the
module looks like without all the "grouping" statements expanded. module looks like without all the "grouping" statements expanded.
=========== NOTE: '\' line wrapping per BCP XX (RFC XXXX) =========== =========== NOTE: '\' line wrapping per BCP XX (RFC XXXX) ===========
module: ietf-netconf-server module: ietf-netconf-server
+--rw netconf-server +--rw netconf-server
+--rw listen! {listen}? +--rw listen! {ssh-listen or tls-listen}?
| +--rw idle-timeout? uint16 | +--rw idle-timeout? uint16
| +--rw endpoint* [name] | +--rw endpoint* [name]
| +--rw name string | +--rw name string
| +--rw (transport) | +--rw (transport)
| +--:(ssh) {ssh-listen}? | +--:(ssh) {ssh-listen}?
| | +--rw ssh | | +--rw ssh
| | +--rw tcp-server-parameters | | +--rw tcp-server-parameters
| | | +--rw local-address inet:ip-address | | | +--rw local-address inet:ip-address
| | | +--rw local-port? inet:port-number | | | +--rw local-port? inet:port-number
| | | +--rw keepalives! {tcp-server-keepalives}? | | | +--rw keepalives!
| | | +--rw idle-time uint16 | | | +--rw idle-time uint16
| | | +--rw max-probes? uint16 | | | +--rw max-probes uint16
| | | +--rw probe-interval? uint16 | | | +--rw probe-interval uint16
| | +--rw ssh-server-parameters | | +--rw ssh-server-parameters
| | +--rw server-identity | | +--rw server-identity
| | | +--rw host-key* [name] | | | +--rw host-key* [name]
| | | +--rw name string | | | +--rw name string
| | | +--rw (host-key-type) | | | +--rw (host-key-type)
| | | +--:(public-key) | | | +--:(public-key)
| | | | +--rw public-key | | | | +--rw public-key
| | | | +--rw (local-or-keystore) | | | | +--rw (local-or-keystore)
| | | | +--:(local) | | | | +--:(local)
| | | | | {local-keys-suppor\ | | | | | {local-keys-suppor\
skipping to change at page 54, line 50 skipping to change at page 52, line 48
iration iration
| | | | +-- expiration-date | | | | +-- expiration-date
| | | | yang:date-\ | | | | yang:date-\
and-time and-time
| | | +--:(keystore) | | | +--:(keystore)
| | | {keystore-supporte\ | | | {keystore-supporte\
d}? d}?
| | | +--rw keystore-reference? | | | +--rw keystore-reference?
| | | ks:asymmetric-ke\ | | | ks:asymmetric-ke\
y-certificate-ref y-certificate-ref
| | +--rw client-cert-auth | | +--rw client-authentication
| | | {sshcmn:ssh-x509-certs}? | | | +--rw supported-authentication-methods
| | | +--rw pinned-ca-certs? | | | | +--rw publickey? empty
| | | | ta:pinned-certificates-ref | | | | +--rw passsword? empty
| | | | {ta:x509-certificates}? | | | | +--rw hostbased? empty
| | | +--rw pinned-client-certs? | | | | +--rw none? empty
| | | ta:pinned-certificates-ref | | | | +--rw other* string
| | | {ta:x509-certificates}? | | | +--rw (local-or-external)
| | | +--:(local)
| | | | {local-client-auth-supported}?
| | | | +--rw users
| | | | +--rw user* [name]
| | | | +--rw name string
| | | | +--rw password?
| | | | | ianach:crypt-hash
| | | | +--rw authorized-key* [name]
| | | | +--rw name string
| | | | +--rw algorithm string
| | | | +--rw key-data binary
| | | +--:(external)
| | | {external-client-auth-supporte\
d}?
| | | +--rw client-auth-defined-elsewhere?
| | | empty
| | +--rw transport-params | | +--rw transport-params
| | | {ssh-server-transport-params-config}? | | | {ssh-server-transport-params-config}?
| | | +--rw host-key | | | +--rw host-key
| | | | +--rw host-key-alg* identityref | | | | +--rw host-key-alg* identityref
| | | +--rw key-exchange | | | +--rw key-exchange
| | | | +--rw key-exchange-alg* identityref | | | | +--rw key-exchange-alg* identityref
| | | +--rw encryption | | | +--rw encryption
| | | | +--rw encryption-alg* identityref | | | | +--rw encryption-alg* identityref
| | | +--rw mac | | | +--rw mac
| | | +--rw mac-alg* identityref | | | +--rw mac-alg* identityref
| | +--rw keepalives! {ssh-server-keepalives}? | | +--rw keepalives! {ssh-server-keepalives}?
| | +--rw max-wait? uint16 | | +--rw max-wait? uint16
| | +--rw max-attempts? uint8 | | +--rw max-attempts? uint8
| +--:(tls) {tls-listen}? | +--:(tls) {tls-listen}?
| +--rw tls | +--rw tls
| +--rw tcp-server-parameters | +--rw tcp-server-parameters
| | +--rw local-address inet:ip-address | | +--rw local-address inet:ip-address
| | +--rw local-port? inet:port-number | | +--rw local-port? inet:port-number
| | +--rw keepalives! {tcp-server-keepalives}? | | +--rw keepalives!
| | +--rw idle-time uint16 | | +--rw idle-time uint16
| | +--rw max-probes? uint16 | | +--rw max-probes uint16
| | +--rw probe-interval? uint16 | | +--rw probe-interval uint16
| +--rw tls-server-parameters | +--rw tls-server-parameters
| +--rw server-identity | +--rw server-identity
| | +--rw (local-or-keystore) | | +--rw (local-or-keystore)
| | +--:(local) {local-keys-supported}? | | +--:(local) {local-keys-supported}?
| | | +--rw local-definition | | | +--rw local-definition
| | | +--rw algorithm? | | | +--rw algorithm?
| | | | asymmetric-key-algorithm-\ | | | | asymmetric-key-algorithm-\
ref ref
| | | +--rw public-key? | | | +--rw public-key?
| | | | binary | | | | binary
skipping to change at page 56, line 17 skipping to change at page 54, line 31
| | | | +---w private-key? binary | | | | +---w private-key? binary
| | | +--rw cert? | | | +--rw cert?
| | | | end-entity-cert-cms | | | | end-entity-cert-cms
| | | +---n certificate-expiration | | | +---n certificate-expiration
| | | +-- expiration-date | | | +-- expiration-date
| | | yang:date-and-time | | | yang:date-and-time
| | +--:(keystore) {keystore-supported}? | | +--:(keystore) {keystore-supported}?
| | +--rw keystore-reference? | | +--rw keystore-reference?
| | ks:asymmetric-key-certificat\ | | ks:asymmetric-key-certificat\
e-ref e-ref
| +--rw client-authentication | +--rw client-authentication!
| | +--rw pinned-ca-certs? | | +--rw (required-or-optional)
| | | ta:pinned-certificates-ref | | | +--:(required)
| | | {ta:x509-certificates}? | | | | +--rw required?
| | +--rw pinned-client-certs? | | | | empty
| | | ta:pinned-certificates-ref | | | +--:(optional)
| | | {ta:x509-certificates}? | | | +--rw optional?
| | | empty
| | +--rw (local-or-external)
| | | +--:(local)
| | | | {local-client-auth-supported}?
| | | | +--rw pinned-ca-certs?
| | | | | ta:pinned-certificates-ref
| | | | | {ta:x509-certificates}?
| | | | +--rw pinned-client-certs?
| | | | ta:pinned-certificates-ref
| | | | {ta:x509-certificates}?
| | | +--:(external)
| | | {external-client-auth-supporte\
d}?
| | | +--rw client-auth-defined-elsewhere?
| | | empty
| | +--rw cert-maps | | +--rw cert-maps
| | +--rw cert-to-name* [id] | | +--rw cert-to-name* [id]
| | +--rw id uint32 | | +--rw id uint32
| | +--rw fingerprint | | +--rw fingerprint
| | | x509c2n:tls-fingerprint | | | x509c2n:tls-fingerprint
| | +--rw map-type identityref | | +--rw map-type identityref
| | +--rw name string | | +--rw name string
| +--rw hello-params | +--rw hello-params
| | {tls-server-hello-params-config}? | | {tls-server-hello-params-config}?
| | +--rw tls-versions | | +--rw tls-versions
| | | +--rw tls-version* identityref | | | +--rw tls-version* identityref
| | +--rw cipher-suites | | +--rw cipher-suites
| | +--rw cipher-suite* identityref | | +--rw cipher-suite* identityref
| +--rw keepalives! {tls-server-keepalives}? | +--rw keepalives! {tls-server-keepalives}?
| +--rw max-wait? uint16 | +--rw max-wait? uint16
| +--rw max-attempts? uint8 | +--rw max-attempts? uint8
+--rw call-home! {call-home}? +--rw call-home! {ssh-call-home or tls-call-home}?
+--rw netconf-client* [name] +--rw netconf-client* [name]
+--rw name string +--rw name string
+--rw endpoints +--rw endpoints
| +--rw endpoint* [name] | +--rw endpoint* [name]
| +--rw name string | +--rw name string
| +--rw (transport) | +--rw (transport)
| +--:(ssh) {ssh-call-home}? | +--:(ssh) {ssh-call-home}?
| | +--rw ssh | | +--rw ssh
| | +--rw tcp-client-parameters | | +--rw tcp-client-parameters
| | | +--rw remote-address inet:host | | | +--rw remote-address inet:host
| | | +--rw remote-port? inet:port-number | | | +--rw remote-port? inet:port-number
| | | +--rw local-address? inet:ip-address | | | +--rw local-address? inet:ip-address
| | | +--rw local-port? inet:port-number | | | +--rw local-port? inet:port-number
| | | +--rw keepalives! | | | +--rw keepalives!
| | | {tcp-client-keepalives}?
| | | +--rw idle-time uint16 | | | +--rw idle-time uint16
| | | +--rw max-probes? uint16 | | | +--rw max-probes uint16
| | | +--rw probe-interval? uint16 | | | +--rw probe-interval uint16
| | +--rw ssh-server-parameters | | +--rw ssh-server-parameters
| | +--rw server-identity | | +--rw server-identity
| | | +--rw host-key* [name] | | | +--rw host-key* [name]
| | | +--rw name string | | | +--rw name string
| | | +--rw (host-key-type) | | | +--rw (host-key-type)
| | | +--:(public-key) | | | +--:(public-key)
| | | | +--rw public-key | | | | +--rw public-key
| | | | +--rw (local-or-keystore) | | | | +--rw (local-or-keystore)
| | | | +--:(local) | | | | +--:(local)
| | | | | {local-keys-\ | | | | | {local-keys-\
skipping to change at page 59, line 24 skipping to change at page 57, line 51
on-date on-date
| | | | yang\ | | | | yang\
:date-and-time :date-and-time
| | | +--:(keystore) | | | +--:(keystore)
| | | {keystore-su\ | | | {keystore-su\
pported}? pported}?
| | | +--rw keystore-ref\ | | | +--rw keystore-ref\
erence? erence?
| | | ks:asymmet\ | | | ks:asymmet\
ric-key-certificate-ref ric-key-certificate-ref
| | +--rw client-cert-auth | | +--rw client-authentication
| | | {sshcmn:ssh-x509-certs}? | | | +--rw supported-authentication-metho\
| | | +--rw pinned-ca-certs? ds
| | | | ta:pinned-certificates-ref | | | | +--rw publickey? empty
| | | | {ta:x509-certificates}? | | | | +--rw passsword? empty
| | | +--rw pinned-client-certs? | | | | +--rw hostbased? empty
| | | ta:pinned-certificates-ref | | | | +--rw none? empty
| | | {ta:x509-certificates}? | | | | +--rw other* string
| | | +--rw (local-or-external)
| | | +--:(local)
| | | | {local-client-auth-suppo\
rted}?
| | | | +--rw users
| | | | +--rw user* [name]
| | | | +--rw name
| | | | | string
| | | | +--rw password?
| | | | | ianach:crypt-hash
| | | | +--rw authorized-key*
| | | | [name]
| | | | +--rw name
| | | | | string
| | | | +--rw algorithm
| | | | | string
| | | | +--rw key-data
| | | | binary
| | | +--:(external)
| | | {external-client-auth-su\
pported}?
| | | +--rw client-auth-defined-else\
where?
| | | empty
| | +--rw transport-params | | +--rw transport-params
| | | {ssh-server-transport-params-co\ | | | {ssh-server-transport-params-co\
nfig}? nfig}?
| | | +--rw host-key | | | +--rw host-key
| | | | +--rw host-key-alg* identityref | | | | +--rw host-key-alg* identityref
| | | +--rw key-exchange | | | +--rw key-exchange
| | | | +--rw key-exchange-alg* | | | | +--rw key-exchange-alg*
| | | | identityref | | | | identityref
| | | +--rw encryption | | | +--rw encryption
| | | | +--rw encryption-alg* | | | | +--rw encryption-alg*
skipping to change at page 60, line 8 skipping to change at page 59, line 12
| | +--rw max-wait? uint16 | | +--rw max-wait? uint16
| | +--rw max-attempts? uint8 | | +--rw max-attempts? uint8
| +--:(tls) {tls-call-home}? | +--:(tls) {tls-call-home}?
| +--rw tls | +--rw tls
| +--rw tcp-client-parameters | +--rw tcp-client-parameters
| | +--rw remote-address inet:host | | +--rw remote-address inet:host
| | +--rw remote-port? inet:port-number | | +--rw remote-port? inet:port-number
| | +--rw local-address? inet:ip-address | | +--rw local-address? inet:ip-address
| | +--rw local-port? inet:port-number | | +--rw local-port? inet:port-number
| | +--rw keepalives! | | +--rw keepalives!
| | {tcp-client-keepalives}?
| | +--rw idle-time uint16 | | +--rw idle-time uint16
| | +--rw max-probes? uint16 | | +--rw max-probes uint16
| | +--rw probe-interval? uint16 | | +--rw probe-interval uint16
| +--rw tls-server-parameters | +--rw tls-server-parameters
| +--rw server-identity | +--rw server-identity
| | +--rw (local-or-keystore) | | +--rw (local-or-keystore)
| | +--:(local) | | +--:(local)
| | | {local-keys-supported}? | | | {local-keys-supported}?
| | | +--rw local-definition | | | +--rw local-definition
| | | +--rw algorithm? | | | +--rw algorithm?
| | | | asymmetric-key-algo\ | | | | asymmetric-key-algo\
rithm-ref rithm-ref
| | | +--rw public-key? | | | +--rw public-key?
skipping to change at page 60, line 49 skipping to change at page 60, line 4
| | | +--rw cert? | | | +--rw cert?
| | | | end-entity-cert-cms | | | | end-entity-cert-cms
| | | +---n certificate-expiration | | | +---n certificate-expiration
| | | +-- expiration-date | | | +-- expiration-date
| | | yang:date-and-ti\ | | | yang:date-and-ti\
me me
| | +--:(keystore) | | +--:(keystore)
| | {keystore-supported}? | | {keystore-supported}?
| | +--rw keystore-reference? | | +--rw keystore-reference?
| | ks:asymmetric-key-cert\ | | ks:asymmetric-key-cert\
ificate-ref ificate-ref
| +--rw client-authentication | +--rw client-authentication!
| | +--rw pinned-ca-certs? | | +--rw (required-or-optional)
| | | ta:pinned-certificates-ref | | | +--:(required)
| | | {ta:x509-certificates}? | | | | +--rw required?
| | +--rw pinned-client-certs? | | | | empty
| | | ta:pinned-certificates-ref | | | +--:(optional)
| | | {ta:x509-certificates}? | | | +--rw optional?
| | | empty
| | +--rw (local-or-external)
| | | +--:(local)
| | | | {local-client-auth-suppo\
rted}?
| | | | +--rw pinned-ca-certs?
| | | | | ta:pinned-certificates\
-ref
| | | | | {ta:x509-certificates}?
| | | | +--rw pinned-client-certs?
| | | | ta:pinned-certificates\
-ref
| | | | {ta:x509-certificates}?
| | | +--:(external)
| | | {external-client-auth-su\
pported}?
| | | +--rw client-auth-defined-else\
where?
| | | empty
| | +--rw cert-maps | | +--rw cert-maps
| | +--rw cert-to-name* [id] | | +--rw cert-to-name* [id]
| | +--rw id uint32 | | +--rw id uint32
| | +--rw fingerprint | | +--rw fingerprint
| | | x509c2n:tls-fingerprint | | | x509c2n:tls-fingerprint
| | +--rw map-type | | +--rw map-type
| | | identityref | | | identityref
| | +--rw name string | | +--rw name string
| +--rw hello-params | +--rw hello-params
| | {tls-server-hello-params-config\ | | {tls-server-hello-params-config\
skipping to change at page 63, line 46 skipping to change at page 63, line 22
imported from other modules. imported from other modules.
o Added "must" expressions to ensure that keepalives are not o Added "must" expressions to ensure that keepalives are not
configured for "periodic" connections. configured for "periodic" connections.
o Updated the boilerplate text in module-level "description" o Updated the boilerplate text in module-level "description"
statement to match copyeditor convention. statement to match copyeditor convention.
o Moved "expanded" tree diagrams to the Appendix. o Moved "expanded" tree diagrams to the Appendix.
B.12. 11 to 12
o Removed the "Design Considerations" section.
o Removed the 'must' statement limiting keepalives in periodic
connections.
o Updated models and examples to reflect removal of the "demux"
containers in the imported models.
o Updated the "periodic-connnection" description statements to be
more like the RESTCONF draft, especially where it described
dropping the underlying TCP connection.
o Updated text to better reference where certain examples come from
(e.g., which Section in which draft).
o In the server model, commented out the "must 'pinned-ca-certs or
pinned-client-certs'" statement to reflect change made in the TLS
draft whereby the trust anchors MAY be defined externally.
o Replaced the 'listen', 'initiate', and 'call-home' features with
boolean expressions.
Acknowledgements Acknowledgements
The authors would like to thank for following for lively discussions The authors would like to thank for following for lively discussions
on list and in the halls (ordered by last name): Andy Bierman, Martin on list and in the halls (ordered by last name): Andy Bierman, Martin
Bjorklund, Benoit Claise, Ramkumar Dhanapal, Mehmet Ersue, Balazs Bjorklund, Benoit Claise, Ramkumar Dhanapal, Mehmet Ersue, Balazs
Kovacs, David Lamparter, Alan Luchuk, Ladislav Lhotka, Radek Krejci, Kovacs, David Lamparter, Alan Luchuk, Ladislav Lhotka, Radek Krejci,
Tom Petch, Juergen Schoenwaelder, Phil Shafer, Sean Turner, and Bert Tom Petch, Juergen Schoenwaelder, Phil Shafer, Sean Turner, and Bert
Wijnen. Wijnen.
Author's Address Author's Address
 End of changes. 113 change blocks. 
477 lines changed or deleted 511 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/