draft-ietf-netconf-server-model-05.txt   draft-ietf-netconf-server-model-06.txt 
NETCONF Working Group K. Watsen NETCONF Working Group K. Watsen
Internet-Draft Juniper Networks Internet-Draft Juniper Networks
Intended status: Standards Track J. Schoenwaelder Intended status: Standards Track J. Schoenwaelder
Expires: June 14, 2015 Jacobs University Bremen Expires: August 6, 2015 Jacobs University Bremen
December 11, 2014 February 2, 2015
NETCONF Server and RESTCONF Server Configuration Models NETCONF Server and RESTCONF Server Configuration Models
draft-ietf-netconf-server-model-05 draft-ietf-netconf-server-model-06
Abstract Abstract
This draft defines a NETCONF server configuration data model and a This draft defines a NETCONF server configuration data model and a
RESTCONF server configuration data model. These data models enable RESTCONF server configuration data model. These data models enable
configuration of the NETCONF and RESTCONF services themselves, configuration of the NETCONF and RESTCONF services themselves,
including which transports are supported, what ports the servers including which transports are supported, what ports the servers
listens on, whether call-home is supported, and associated listens on, whether call-home is supported, and associated
parameters. parameters.
skipping to change at page 1, line 40 skipping to change at page 1, line 40
in the Normative References section, as well as in body text in the Normative References section, as well as in body text
throughout. Please update the following references to reflect their throughout. Please update the following references to reflect their
final RFC assignments: final RFC assignments:
o draft-ietf-netconf-rfc5539bis o draft-ietf-netconf-rfc5539bis
o draft-ietf-netconf-restconf o draft-ietf-netconf-restconf
o draft-ietf-netconf-call-home o draft-ietf-netconf-call-home
o draft-ietf-netmod-snmp-cfg
Artwork in this document contains shorthand references to drafts in Artwork in this document contains shorthand references to drafts in
progress. Please apply the following replacements: progress. Please apply the following replacements:
o "VVVV" --> the assigned RFC value for this draft o "VVVV" --> the assigned RFC value for this draft
o "WWWW" --> the assigned RFC value for draft-ietf-netconf- o "WWWW" --> the assigned RFC value for draft-ietf-netconf-
rfc5539bis rfc5539bis
o "XXXX" --> the assigned RFC value for draft-ietf-netconf-restconf o "XXXX" --> the assigned RFC value for draft-ietf-netconf-restconf
o "YYYY" --> the assigned RFC value for draft-ietf-netconf-call-home o "YYYY" --> the assigned RFC value for draft-ietf-netconf-call-home
o "ZZZZ" --> the assigned RFC value for draft-ietf-netmod-snmp-cfg o "ZZZZ" --> the assigned RFC value for draft-thomson-httpbis-cant
Artwork in this document contains placeholder values for ports Artwork in this document contains placeholder values for ports
pending IANA assignment from "draft-ietf-netconf-call-home". Please pending IANA assignment from "draft-ietf-netconf-call-home". Please
apply the following replacements: apply the following replacements:
o "7777" --> the assigned port value for "netconf-ch-ssh" o "7777" --> the assigned port value for "netconf-ch-ssh"
o "8888" --> the assigned port value for "netconf-ch-tls" o "8888" --> the assigned port value for "netconf-ch-tls"
o "9999" --> the assigned port value for "restconf-ch-tls" o "9999" --> the assigned port value for "restconf-ch-tls"
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 "2014-12-11" --> the publication date of this draft o "2015-02-02" --> the publication date of this draft
The following two Appendix sections are to be removed prior to The following two Appendix sections are to be removed prior to
publication: publication:
o Appendix B. Change Log o Appendix B. Change Log
o Appendix C. Open Issues o Appendix C. Open Issues
Status of This Memo Status of This Memo
skipping to change at page 2, line 48 skipping to change at page 2, line 45
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 http://datatracker.ietf.org/drafts/current/. Drafts is at http://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 June 14, 2015. This Internet-Draft will expire on August 6, 2015.
Copyright Notice Copyright Notice
Copyright (c) 2014 IETF Trust and the persons identified as the Copyright (c) 2015 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
(http://trustee.ietf.org/license-info) in effect on the date of (http://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 . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4
2. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1. Support all NETCONF and RESTCONF transports . . . . . . . 5 2.1. Support all NETCONF and RESTCONF transports . . . . . . . 5
2.2. Enable each transport to select which keys to use . . . . 5 2.2. Enable each transport to select which keys to use . . . . 5
2.3. Support authenticating NETCONF clients certificates . . . 5 2.3. Support authenticating NETCONF/RESTCONF clients
2.4. Support mapping authenticated NETCONF client-certificates certificates . . . . . . . . . . . . . . . . . . . . . . 5
to usernames . . . . . . . . . . . . . . . . . . . . . . 6 2.4. Support mapping authenticated NETCONF/RESTCONF client
certificates to usernames . . . . . . . . . . . . . . . . 6
2.5. Support both Listening for connections and Call Home . . 6 2.5. Support both Listening for connections and Call Home . . 6
2.6. For Call Home connections . . . . . . . . . . . . . . . . 6 2.6. For Call Home connections . . . . . . . . . . . . . . . . 6
2.6.1. Support more than one northbound application . . . . 6 2.6.1. Support more than one northbound application . . . . 6
2.6.2. Support applications having more than one server . . 6 2.6.2. Support applications having more than one server . . 6
2.6.3. Support a reconnection strategy . . . . . . . . . . . 6 2.6.3. Support a reconnection strategy . . . . . . . . . . . 6
2.6.4. Support both persistent and periodic connections . . 7 2.6.4. Support both persistent and periodic connections . . 7
2.6.5. Reconnection strategy for periodic connections . . . 7 2.6.5. Reconnection strategy for periodic connections . . . 7
2.6.6. Keep-alives for persistent connections . . . . . . . 7 2.6.6. Keep-alives for persistent connections . . . . . . . 7
2.6.7. Customizations for periodic connections . . . . . . . 7 2.6.7. Customizations for periodic connections . . . . . . . 7
3. The NETCONF Server Configuration Model . . . . . . . . . . . 8 3. The NETCONF Server Configuration Model . . . . . . . . . . . 8
skipping to change at page 3, line 52 skipping to change at page 3, line 48
3.1.1. The "session-options" subtree . . . . . . . . . . . . 8 3.1.1. The "session-options" subtree . . . . . . . . . . . . 8
3.1.2. The "listen" subtree . . . . . . . . . . . . . . . . 8 3.1.2. The "listen" subtree . . . . . . . . . . . . . . . . 8
3.1.3. The "call-home" subtree . . . . . . . . . . . . . . . 9 3.1.3. The "call-home" subtree . . . . . . . . . . . . . . . 9
3.1.4. The "ssh" subtree . . . . . . . . . . . . . . . . . . 11 3.1.4. The "ssh" subtree . . . . . . . . . . . . . . . . . . 11
3.1.5. The "tls" subtree . . . . . . . . . . . . . . . . . . 11 3.1.5. The "tls" subtree . . . . . . . . . . . . . . . . . . 11
3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 12 3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 12
4. The RESTCONF Server Configuration Model . . . . . . . . . . . 25 4. The RESTCONF Server Configuration Model . . . . . . . . . . . 25
4.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 25 4.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.1. The "listen" subtree . . . . . . . . . . . . . . . . 25 4.1.1. The "listen" subtree . . . . . . . . . . . . . . . . 25
4.1.2. The "call-home" subtree . . . . . . . . . . . . . . . 26 4.1.2. The "call-home" subtree . . . . . . . . . . . . . . . 26
4.1.3. The "client-cert-auth" subtree . . . . . . . . . . . 28
4.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 28 4.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 28
5. Implementation strategy for keep-alives . . . . . . . . . . . 39
5.1. Keep-alives for SSH . . . . . . . . . . . . . . . . . . . 39
5.2. Keep-alives for TLS . . . . . . . . . . . . . . . . . . . 40
5. Implementation strategy for keep-alives . . . . . . . . . . . 36 6. Security Considerations . . . . . . . . . . . . . . . . . . . 40
5.1. Keep-alives for SSH . . . . . . . . . . . . . . . . . . . 37 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41
5.2. Keep-alives for TLS . . . . . . . . . . . . . . . . . . . 37 8. Other Considerations . . . . . . . . . . . . . . . . . . . . 41
6. Security Considerations . . . . . . . . . . . . . . . . . . . 37 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 42
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 42
8. Other Considerations . . . . . . . . . . . . . . . . . . . . 39 10.1. Normative References . . . . . . . . . . . . . . . . . . 42
9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 39 10.2. Informative References . . . . . . . . . . . . . . . . . 43
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 39 Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 44
10.1. Normative References . . . . . . . . . . . . . . . . . . 39 A.1. NETCONF Configuration using SSH Transport . . . . . . . . 44
10.2. Informative References . . . . . . . . . . . . . . . . . 40 A.2. NETCONF Configuration using TLS Transport . . . . . . . . 45
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 41 A.3. RESTCONF Configuration using TLS Transport . . . . . . . 47
A.1. NETCONF Configuration using SSH Transport . . . . . . . . 41 Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 47
A.2. NETCONF Configuration using TLS Transport . . . . . . . . 42 B.1. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 47
A.3. RESTCONF Configuration using TLS Transport . . . . . . . 44 B.2. 01 to 02 . . . . . . . . . . . . . . . . . . . . . . . . 48
Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 44 B.3. 02 to 03 . . . . . . . . . . . . . . . . . . . . . . . . 48
B.1. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 44 B.4. 03 to 04 . . . . . . . . . . . . . . . . . . . . . . . . 48
B.2. 01 to 02 . . . . . . . . . . . . . . . . . . . . . . . . 45 B.5. 04 to 05 . . . . . . . . . . . . . . . . . . . . . . . . 48
B.3. 02 to 03 . . . . . . . . . . . . . . . . . . . . . . . . 45 B.6. 05 to 06 . . . . . . . . . . . . . . . . . . . . . . . . 49
B.4. 03 to 04 . . . . . . . . . . . . . . . . . . . . . . . . 45 Appendix C. Open Issues . . . . . . . . . . . . . . . . . . . . 49
B.5. 04 to 05 . . . . . . . . . . . . . . . . . . . . . . . . 45
Appendix C. Open Issues . . . . . . . . . . . . . . . . . . . . 46
1. Introduction 1. Introduction
This draft defines a NETCONF [RFC6241] server configuration data This draft defines a NETCONF [RFC6241] server configuration data
model and a RESTCONF [draft-ietf-netconf-restconf] server model and a RESTCONF [draft-ietf-netconf-restconf] server
configuration data model. These data models enable configuration of configuration data model. These data models enable configuration of
the NETCONF and RESTCONF services themselves, including which the NETCONF and RESTCONF services themselves, including which
transports are supported, what ports the servers listens on, whether transports are supported, what ports the servers listens on, whether
call-home is supported, and associated parameters. call-home is supported, and associated parameters.
skipping to change at page 4, line 50 skipping to change at page 4, line 48
document are to be interpreted as described in RFC 2119 [RFC2119]. document are to be interpreted as described in RFC 2119 [RFC2119].
1.2. Tree Diagrams 1.2. Tree Diagrams
A simplified graphical representation of the data models is used in A simplified graphical representation of the data models is used in
this document. The meaning of the symbols in these diagrams is as this document. The meaning of the symbols in these diagrams is as
follows: follows:
o Brackets "[" and "]" enclose list keys. o Brackets "[" and "]" enclose list keys.
o Braces "{" and "}" enclose feature names, and indicate that the
named feature must be present for the subtree to be present.
o Abbreviations before data node names: "rw" means configuration o Abbreviations before data node names: "rw" means configuration
(read-write) and "ro" state data (read-only). (read-write) and "ro" state data (read-only).
o Symbols after data node names: "?" means an optional node, "!" o Symbols after data node names: "?" means an optional node, "!"
means a presence container, and "*" denotes a list and leaf-list. means a presence container, and "*" denotes a list and leaf-list.
o Parentheses enclose choice and case nodes, and case nodes are also o Parentheses enclose choice and case nodes, and case nodes are also
marked with a colon (":"). marked with a colon (":").
o Ellipsis ("...") stands for contents of subtrees that are not o Ellipsis ("...") stands for contents of subtrees that are not
skipping to change at page 5, line 41 skipping to change at page 5, line 41
2.2. Enable each transport to select which keys to use 2.2. Enable each transport to select which keys to use
Servers may have a multiplicity of host-keys or server-certificates Servers may have a multiplicity of host-keys or server-certificates
from which subsets may be selected for specific uses. For instance, 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 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 listening on port 830, and a different set of SSH host-keys when
calling home. The data models provided herein should enable calling home. The data models provided herein should enable
configuration of which keys to use on a per-use basis. configuration of which keys to use on a per-use basis.
2.3. Support authenticating NETCONF clients certificates 2.3. Support authenticating NETCONF/RESTCONF clients certificates
When a certificate is used to authenticate a NETCONF client, either When a certificate is used to authenticate a NETCONF or RESTCONF
when using the TLS transport or the SSH transport with X.509 client, there is a need to configure the server to know how to
certificates [RFC6187], there is a need to configure the server to authenticate the certificates. The server should be able to
know how to authenticate the certificates. The server should be able authenticate the client's certificate either by using path-validation
to do this either by using path-validation to a configured trust to a configured trust anchor or by matching the client-certificate to
anchor or by matching the client-certificate to one previously one previously configured.
configured.
2.4. Support mapping authenticated NETCONF client-certificates to 2.4. Support mapping authenticated NETCONF/RESTCONF client certificates
usernames to usernames
Some NETCONF transports (e.g., TLS) need additional support to map When a client certifcate is used for TLS transport-level
authenticated transport-level sessions to a NETCONF username. The authentication, the NETCONF/RESTCONF server must be able to derive a
NETCONF server model defined herein should define an ability for this username from the authenticated certifcate. Thus the modules defined
mapping to be configured." herein should enable this mapping to be configured.
2.5. Support both Listening for connections and Call Home 2.5. Support both Listening for connections and Call Home
The NETCONF and RESTCONF protocols were originally defined as having The NETCONF and RESTCONF protocols were originally defined as having
the server opening a port to listen for client connections. More the server opening a port to listen for client connections. More
recently the NETCONF working group defined support for call-home recently the NETCONF working group defined support for call-home
([draft-ietf-netconf-call-home]), enabling the server to initiate the ([draft-ietf-netconf-call-home]), enabling the server to initiate the
connection to the client, for both the NETCONF and RESTCONF connection to the client, for both the NETCONF and RESTCONF
protocols. Thus the modules defined herein should enable protocols. Thus the modules defined herein should enable
configuration for both listening for connections and calling home. configuration for both listening for connections and calling home.
skipping to change at page 7, line 34 skipping to change at page 7, line 34
clear when considering that a periodic "connection" is a logical clear when considering that a periodic "connection" is a logical
connection to a single server. That is, the periods of connection to a single server. That is, the periods of
unconnectedness are intentional as opposed to due to external unconnectedness are intentional as opposed to due to external
reasons. A periodic "connection" should always reconnect to the same reasons. A periodic "connection" should always reconnect to the same
server until it is no longer able to, at which time the reconnection server until it is no longer able to, at which time the reconnection
strategy guides how to connect to another server. strategy guides how to connect to another server.
2.6.6. Keep-alives for persistent connections 2.6.6. Keep-alives for persistent connections
If a persistent connection is desired, it is the responsibility of If a persistent connection is desired, it is the responsibility of
the connection-initiator to actively test the "aliveness" of the the connection initiator to actively test the "aliveness" of the
connection. The connection initiator must immediately work to connection. The connection initiator must immediately work to
reestablish a persistent connection as soon as the connection is reestablish a persistent connection as soon as the connection is
lost. How often the connection should be tested is driven by lost. How often the connection should be tested is driven by
application requirements, and therefore keep-alive settings should be application requirements, and therefore keep-alive settings should be
configurable on a per-application basis. configurable on a per-application basis.
2.6.7. Customizations for periodic connections 2.6.7. Customizations for periodic connections
If a periodic connection is desired, it is necessary for the device If a periodic connection is desired, it is necessary for the device
to know how often it should connect. This delay essentially to know how often it should connect. This delay essentially
skipping to change at page 8, line 21 skipping to change at page 8, line 21
time of no data being transmitted as transpired. time of no data being transmitted as transpired.
3. The NETCONF Server Configuration Model 3. The NETCONF Server Configuration Model
3.1. Overview 3.1. Overview
3.1.1. The "session-options" subtree 3.1.1. The "session-options" subtree
module: ietf-netconf-server module: ietf-netconf-server
+--rw netconf-server +--rw netconf-server
+--rw session-options {session-options}? +--rw session-options
+--rw hello-timeout? uint32 +--rw hello-timeout? uint32
+--rw idle-timeout? uint32 +--rw idle-timeout? uint32
The above subtree illustrates how the ietf-netconf-server YANG module The above subtree illustrates how the ietf-netconf-server YANG module
enables configuration of NETCONF session options, independent of any enables configuration of NETCONF session options, independent of any
transport or connection strategy. A feature statement is used for transport or connection strategy. Please see the YANG module
the server to advertise support for configuring these NETCONF server (Section 3.2) for a complete description of these configuration
options. Please see the YANG module (Section 3.2) for a complete knobs.
description of these configuration knobs.
3.1.2. The "listen" subtree 3.1.2. The "listen" subtree
module: ietf-netconf-server module: ietf-netconf-server
+--rw netconf-server +--rw netconf-server
+--rw listen {listen}? +--rw listen {listen}?
+--rw max-sessions? uint16 +--rw max-sessions? uint16
+--rw endpoint* [name] +--rw endpoint* [name]
+--rw name string +--rw name string
+--rw (transport) +--rw (transport)
| +--:(ssh) {ssh}? | +--:(ssh) {ssh}?
skipping to change at page 9, line 29 skipping to change at page 9, line 29
| +--rw address? inet:ip-address | +--rw address? inet:ip-address
| +--rw port? inet:port-number | +--rw port? inet:port-number
| +--rw certificates | +--rw certificates
| +--rw certificate* string | +--rw certificate* string
+--rw keep-alives +--rw keep-alives
+--rw interval-secs? uint8 +--rw interval-secs? uint8
+--rw count-max? uint8 +--rw count-max? uint8
The above subtree illustrates how the ietf-netconf-server YANG module The above subtree illustrates how the ietf-netconf-server YANG module
enables configuration for listening for remote connections, as enables configuration for listening for remote connections, as
described in [RFC6242] and [draft-ietf-netconf-call-home]. Feature described in [RFC6242]. Feature statements are used to limit both if
statements are used to limit both if listening is supported at all as listening is supported at all as well as for which transports. If
well as for which transports. If listening for connections is listening for connections is supported, then the model enables
supported, then the model enables configuring a list of listening configuring a list of listening endpoints, each configured with a
endpoints, each configured with a user-specified name (the key user-specified name (the key field), the transport to use (i.e. SSH,
field), the transport to use (i.e. SSH, TLS), and the IP address and TLS), and the IP address and port to listen on. The port field is
port to listen on. The port field is optional, defaulting to the optional, defaulting to the transport-specific port when not
transport-specific port when not configured. Please see the YANG configured. Please see the YANG module (Section 3.2) for a complete
module (Section 3.2) for a complete description of these description of these configuration knobs.
configuration knobs.
3.1.3. The "call-home" subtree 3.1.3. The "call-home" subtree
module: ietf-netconf-server module: ietf-netconf-server
+--rw netconf-server +--rw netconf-server
+--rw call-home {call-home}? +--rw call-home {call-home}?
+--rw application* [name] +--rw application* [name]
+--rw name string +--rw name string
+--rw (transport) +--rw (transport)
| +--:(ssh) {ssh}? | +--:(ssh) {ssh}?
| | +--rw ssh | | +--rw ssh
skipping to change at page 11, line 16 skipping to change at page 11, line 16
the connection-type (persistent vs. periodic) and associated the connection-type (persistent vs. periodic) and associated
parameters, as well as the reconnection strategy to use. Please see parameters, as well as the reconnection strategy to use. Please see
the YANG module (Section 3.2) for a complete description of these the YANG module (Section 3.2) for a complete description of these
configuration knobs. configuration knobs.
3.1.4. The "ssh" subtree 3.1.4. The "ssh" subtree
module: ietf-netconf-server module: ietf-netconf-server
+--rw netconf-server +--rw netconf-server
+--rw ssh {ssh}? +--rw ssh {ssh}?
+--rw x509 {rfc6187}? +--rw x509 {ssh-x509-certs}?
+--rw trusted-ca-certs +--rw trusted-ca-certs
| +--rw trusted-ca-cert* binary | +--rw trusted-ca-cert* binary
+--rw trusted-client-certs +--rw trusted-client-certs
+--rw trusted-client-cert* binary +--rw trusted-client-cert* binary
The above subtree illustrates how the ietf-netconf-server YANG module The above subtree illustrates how the ietf-netconf-server YANG module
enables some SSH configuration independent of if the NETCONF server enables some SSH configuration independent of if the NETCONF server
is listening or calling home. Specifically, when RFC 6187 is is listening or calling home. Specifically, when RFC 6187 is
supported, this data model provides an ability to configure how supported, this data model provides an ability to configure how
client-certificates are authenticated. Please see the YANG module client-certificates are authenticated. Please see the YANG module
skipping to change at page 12, line 9 skipping to change at page 12, line 9
The above subtree illustrates how the ietf-netconf-server YANG module The above subtree illustrates how the ietf-netconf-server YANG module
enables TLS configuration independent of if the NETCONF server is enables TLS configuration independent of if the NETCONF server is
listening or calling home. Specifically, this data-model provides 1) listening or calling home. Specifically, this data-model provides 1)
an ability to configure how client-certificates are authenticated and an ability to configure how client-certificates are authenticated and
2) how authenticated client-certificates are mapped to NETCONF user 2) how authenticated client-certificates are mapped to NETCONF user
names. Please see the YANG module (Section 3.2) for a complete names. Please see the YANG module (Section 3.2) for a complete
description of these configuration knobs. description of these configuration knobs.
3.2. YANG Module 3.2. YANG Module
This YANG module imports YANG types from [RFC6991], and This YANG module imports YANG types from [RFC6991] and [RFC7407].
[draft-ietf-netmod-snmp-cfg].
<CODE BEGINS> file "ietf-netconf-server@2014-12-11.yang" <CODE BEGINS> file "ietf-netconf-server@2015-02-02.yang"
module ietf-netconf-server { module ietf-netconf-server {
namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-server"; namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-server";
prefix "ncserver"; prefix "ncserver";
import ietf-netconf-acm {
prefix nacm; // RFC 6536
revision-date 2012-02-22;
}
import ietf-inet-types { // RFC 6991 import ietf-inet-types { // RFC 6991
prefix inet; prefix inet;
revision-date 2013-07-15; revision-date 2013-07-15;
} }
import ietf-x509-cert-to-name { // RFC ZZZZ import ietf-x509-cert-to-name { // RFC 7407
prefix x509c2n; prefix x509c2n;
revision-date 2014-05-06; revision-date 2014-12-10;
} }
organization organization
"IETF NETCONF (Network Configuration) Working Group"; "IETF NETCONF (Network Configuration) Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/netconf/> "WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org> WG List: <mailto:netconf@ietf.org>
WG Chair: Mehmet Ersue WG Chair: Mehmet Ersue
skipping to change at page 13, line 15 skipping to change at page 13, line 18
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD to the license terms contained in, the Simplified BSD
License set forth in Section 4.c of the IETF Trust's License set forth in Section 4.c of the IETF Trust's
Legal Provisions Relating to IETF Documents Legal Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC VVVV; see This version of this YANG module is part of RFC VVVV; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision "2014-12-11" { revision "2015-02-02" {
description description
"Initial version"; "Initial version";
reference reference
"RFC VVVV: NETCONF Server and RESTCONF Server Configuration Models"; "RFC VVVV: NETCONF Server and RESTCONF Server Configuration Models";
} }
// Features // Features
feature session-options {
description
"The session-options feature indicates that the NETCONF server
supports the session-options container.";
}
feature ssh { feature ssh {
description description
"The ssh feature indicates that the server supports the "The ssh feature indicates that the server supports the
SSH transport protocol."; SSH transport protocol.";
reference reference
"RFC 6242: Using the NETCONF Protocol over Secure Shell (SSH)"; "RFC 6242: Using the NETCONF Protocol over Secure Shell (SSH)";
} }
feature tls { feature tls {
description description
skipping to change at page 14, line 6 skipping to change at page 14, line 4
} }
feature listen { feature listen {
description description
"The listen feature indicates that the server supports "The listen feature indicates that the server supports
opening a port to listen for incoming client connections."; opening a port to listen for incoming client connections.";
reference reference
"RFC 6242: Using the NETCONF Protocol over Secure Shell (SSH) "RFC 6242: Using the NETCONF Protocol over Secure Shell (SSH)
RFC 5539: NETCONF over Transport Layer Security (TLS)"; RFC 5539: NETCONF over Transport Layer Security (TLS)";
} }
feature call-home { feature call-home {
description description
"The call-home feature indicates that the server supports "The call-home feature indicates that the server supports
connecting to the client"; connecting to the client";
reference reference
"RFC YYYY: NETCONF Call Home and RESTCONF Call Home"; "RFC YYYY: NETCONF Call Home and RESTCONF Call Home";
} }
feature rfc6187 { feature ssh-x509-certs {
description description
"The rfc6187 feature indicates that the NETCONF server supports "The ssh-x509-certs feature indicates that the NETCONF server
RFC 6187"; supports RFC 6187";
reference reference
"RFC 6187: X.509v3 Certificates for Secure Shell Authentication"; "RFC 6187: X.509v3 Certificates for Secure Shell Authentication";
} }
// top-level container (groupings below) // top-level container (groupings below)
container netconf-server { container netconf-server {
description description
"Top-level container for NETCONF server configuration."; "Top-level container for NETCONF server configuration.";
uses session-options-container; uses session-options-container;
uses listen-container; uses listen-container;
uses call-home-container; uses call-home-container;
uses ssh-container; uses ssh-container;
uses tls-container; uses tls-container;
} }
grouping session-options-container { grouping session-options-container {
description description
""; "This grouping is used only to help improve readability
of the YANG module.";
container session-options { container session-options {
description description
"NETCONF session options, independent of transport or "NETCONF session options, independent of transport
connection strategy."; or connection strategy.";
if-feature session-options;
leaf hello-timeout { leaf hello-timeout {
type uint32 { type uint32 {
range "0 | 10 .. 3600"; range "0 | 10 .. 3600";
} }
units "seconds"; units "seconds";
default '600'; default '600';
description description
"Specifies the number of seconds that a session may exist "Specifies the number of seconds that a session may exist
before the hello PDU is received. A session will be before the hello PDU is received. A session will be
dropped if no hello PDU is received before this number dropped if no hello PDU is received before this number
skipping to change at page 15, line 43 skipping to change at page 15, line 40
This mechanism is independent of keep-alives, as it regards This mechanism is independent of keep-alives, as it regards
activity occurring at the NETCONF protocol layer, whereas activity occurring at the NETCONF protocol layer, whereas
the keep-alive mechanism regards transport-level activity."; the keep-alive mechanism regards transport-level activity.";
} }
} }
} }
grouping listen-container { grouping listen-container {
description description
""; "This grouping is used only to help improve readability
of the YANG module.";
container listen { container listen {
description description
"Configures listen behavior"; "Configures listen behavior";
if-feature listen; if-feature listen;
leaf max-sessions { leaf max-sessions {
type uint16 { type uint16 {
range "0 .. 1024"; range "0 .. 1024";
} }
default '0'; default '0';
description description
"Specifies the maximum number of concurrent sessions "Specifies the maximum number of concurrent sessions
that can be active at one time. The value 0 indicates that can be active at one time. The value 0 indicates
that no artificial session limit should be used."; that no artificial session limit should be used.";
} }
list endpoint { list endpoint {
key name; key name;
description description
"List of endpoints to listen for connections on."; "List of endpoints to listen for NETCONF connections on.";
leaf name { leaf name {
type string; type string;
description description
"An arbitrary name for the listen endpoint."; "An arbitrary name for the NETCONF listen endpoint.";
} }
choice transport { choice transport {
mandatory true; mandatory true;
description description
"Selects between SSH and TLS transports."; "Selects between SSH and TLS transports.";
case ssh { case ssh {
if-feature ssh; if-feature ssh;
container ssh { container ssh {
description description
"SSH-specific listening configuration for inbound "SSH-specific listening configuration for inbound
skipping to change at page 17, line 15 skipping to change at page 17, line 13
refine keep-alives/interval-secs { refine keep-alives/interval-secs {
default 0; // disabled by default for listen connections default 0; // disabled by default for listen connections
} }
} }
} }
} }
} }
grouping call-home-container { grouping call-home-container {
description description
""; "This grouping is used only to help improve readability
of the YANG module.";
container call-home { container call-home {
if-feature call-home; if-feature call-home;
description description
"Configures call-home behavior"; "Configures call-home behavior";
list application { list application {
key name; key name;
description description
"List of NETCONF clients the NETCONF server is to initiate "List of NETCONF clients the NETCONF server is to initiate
call-home connections to."; call-home connections to.";
leaf name { leaf name {
skipping to change at page 18, line 17 skipping to change at page 18, line 16
refine endpoints/endpoint/port { refine endpoints/endpoint/port {
default 8888; default 8888;
} }
} }
uses certificates-container; uses certificates-container;
} }
} }
} }
container connection-type { container connection-type {
description description
"Indicates the kind of connection to be maintained."; "Indicates the kind of connection to use.";
choice connection-type { choice connection-type {
default persistent-connection; default persistent-connection;
description description
"Selects between persistent and periodic connections."; "Selects between persistent and periodic connections.";
case persistent-connection { case persistent-connection {
container persistent { container persistent {
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 it, using the
skipping to change at page 20, line 39 skipping to change at page 20, line 38
connect to a specific endpoint before moving on to the connect to a specific endpoint before moving on to the
next endpoint in the list (round robin)."; next endpoint in the list (round robin).";
} }
} }
} }
} }
} }
grouping ssh-container { grouping ssh-container {
description description
""; "This grouping is used only to help improve readability
of the YANG module.";
container ssh { container ssh {
description description
"Configures SSH properties not specific to the listen "Configures SSH properties not specific to the listen
or call-home use-cases"; or call-home use-cases";
if-feature ssh; if-feature ssh;
container x509 { container x509 {
if-feature rfc6187; if-feature ssh-x509-certs;
uses trusted-certs-grouping; uses trusted-certs-grouping;
} }
} }
} }
grouping tls-container { grouping tls-container {
description description
""; "This grouping is used only to help improve readability
of the YANG module.";
container tls { container tls {
description description
"Configures TLS properties not specific to the listen "Configures TLS properties for authenticating clients.";
or call-home use-cases";
if-feature tls; if-feature tls;
container client-auth { container client-auth {
description description
"Container for TLS client authentication configuration."; "Container for TLS client authentication configuration.";
uses trusted-certs-grouping; uses trusted-certs-grouping;
container cert-maps { container cert-maps {
uses x509c2n:cert-to-name; uses x509c2n:cert-to-name;
description description
"The cert-maps container is used by a NETCONF server to "The cert-maps container is used by a NETCONF server to
map the NETCONF client's presented X.509 certificate to a map the NETCONF client's presented X.509 certificate to a
skipping to change at page 21, line 32 skipping to change at page 21, line 32
list entry can be found, then the NETCONF server MUST list entry can be found, then the NETCONF server MUST
close the connection, and MUST NOT accept NETCONF close the connection, and MUST NOT accept NETCONF
messages over it."; messages over it.";
} }
} }
} }
} }
grouping trusted-certs-grouping { grouping trusted-certs-grouping {
description description
""; "This grouping is used by both the ssh and tls containers.";
container trusted-ca-certs { container trusted-ca-certs {
description description
"A list of Certificate Authority (CA) certificates that "A list of Certificate Authority (CA) certificates that
a NETCONF server can use to authenticate NETCONF client a NETCONF server can use to authenticate NETCONF client
certificates. A client's certificate is authenticated certificates. A client's certificate is authenticated
if there is a chain of trust to a configured trusted CA if there is a chain of trust to a configured trusted CA
certificate. The client certificate MAY be accompanied certificate. The client certificate MAY be accompanied
with additional certificates forming a chain of trust. with additional certificates forming a chain of trust.
The client's certificate is authenticated if there is The client's certificate is authenticated if there is
path-validation from any of the certificates it presents path-validation from any of the certificates it presents
to a configured trust anchor."; to a configured trust anchor.";
leaf-list trusted-ca-cert { leaf-list trusted-ca-cert {
type binary; type binary;
ordered-by system; ordered-by system;
nacm:default-deny-write;
description description
"The binary certificate structure as specified by RFC "The binary certificate structure as specified by RFC
5246, Section 7.4.6, i.e.,: opaque ASN.1Cert<1..2^24>; 5246, Section 7.4.6, i.e.,: opaque ASN.1Cert<1..2^24>;
"; ";
reference reference
"RFC 5246: The Transport Layer Security (TLS) "RFC 5246: The Transport Layer Security (TLS)
Protocol Version 1.2"; Protocol Version 1.2";
} }
} }
container trusted-client-certs { container trusted-client-certs {
description description
"A list of client certificates that a NETCONF server can "A list of client certificates that a NETCONF server can
use to authenticate a NETCONF client's certificate. A use to authenticate a NETCONF client's certificate. A
client's certificate is authenticated if it is an exact client's certificate is authenticated if it is an exact
skipping to change at page 22, line 17 skipping to change at page 22, line 19
} }
container trusted-client-certs { container trusted-client-certs {
description description
"A list of client certificates that a NETCONF server can "A list of client certificates that a NETCONF server can
use to authenticate a NETCONF client's certificate. A use to authenticate a NETCONF client's certificate. A
client's certificate is authenticated if it is an exact client's certificate is authenticated if it is an exact
match to a configured trusted client certificates."; match to a configured trusted client certificates.";
leaf-list trusted-client-cert { leaf-list trusted-client-cert {
type binary; type binary;
ordered-by system; ordered-by system;
nacm:default-deny-write;
description description
"The binary certificate structure, as "The binary certificate structure, as
specified by RFC 5246, Section 7.4.6, i.e.,: specified by RFC 5246, Section 7.4.6, i.e.,:
opaque ASN.1Cert<1..2^24>; opaque ASN.1Cert<1..2^24>;
"; ";
reference reference
"RFC 5246: The Transport Layer Security (TLS) "RFC 5246: The Transport Layer Security (TLS)
Protocol Version 1.2"; Protocol Version 1.2";
} }
} }
} }
grouping host-keys-container { grouping host-keys-container {
description description
""; "This grouping is used by both the listen and
call-home containers";
container host-keys { container host-keys {
description description
"Parent container for the list of host-keys."; "Parent container for the list of host-keys.";
leaf-list host-key { leaf-list host-key {
type string; type string;
min-elements 1; min-elements 1;
ordered-by user; ordered-by user;
description description
"A user-ordered list of host-keys the SSH server "A user-ordered list of host-keys the SSH server
considers when composing the list of server host considers when composing the list of server host
skipping to change at page 23, line 11 skipping to change at page 23, line 14
envisioned to be the keys for a list of host-keys envisioned to be the keys for a list of host-keys
provided by another YANG module"; provided by another YANG module";
reference reference
"RFC 4253: The SSH Transport Layer Protocol, Section 7"; "RFC 4253: The SSH Transport Layer Protocol, Section 7";
} }
} }
} }
grouping certificates-container { grouping certificates-container {
description description
""; "This grouping is used by both the listen and
call-home containers";
container certificates { container certificates {
description description
"Parent container for the list of certificates."; "Parent container for the list of certificates.";
leaf-list certificate { leaf-list certificate {
type string; type string;
min-elements 1; min-elements 1;
description description
"An unordered list of certificates the TLS server can pick "An unordered list of certificates the TLS server can pick
from when sending its Server Certificate message. The value from when sending its Server Certificate message. The value
of the string is the unique identifier for a certificate of the string is the unique identifier for a certificate
skipping to change at page 23, line 34 skipping to change at page 23, line 38
to be the keys for a list of certificates provided to be the keys for a list of certificates provided
by another YANG module"; by another YANG module";
reference reference
"RFC 5246: The TLS Protocol, Section 7.4.2"; "RFC 5246: The TLS Protocol, Section 7.4.2";
} }
} }
} }
grouping address-and-port-grouping { grouping address-and-port-grouping {
description description
"a common grouping"; "This grouping is usd by both the ssh and tls containers
for listen configuration.";
leaf address { leaf address {
type inet:ip-address; type inet:ip-address;
description description
"The IP address of the interface to listen on."; "The IP address of the interface to listen on.";
} }
leaf port { leaf port {
type inet:port-number; type inet:port-number;
description description
"The local port number on this interface the NETCONF server "The local port number on this interface the NETCONF server
listens on."; listens on.";
skipping to change at page 23, line 47 skipping to change at page 24, line 4
description description
"The IP address of the interface to listen on."; "The IP address of the interface to listen on.";
} }
leaf port { leaf port {
type inet:port-number; type inet:port-number;
description description
"The local port number on this interface the NETCONF server "The local port number on this interface the NETCONF server
listens on."; listens on.";
} }
} }
grouping endpoints-container { grouping endpoints-container {
description description
"Grouping for transport-specific configuration for "This grouping is used by both the ssh and tls containers
call-home connections."; for call-home configurations.";
container endpoints { container endpoints {
description description
"Container for the list of endpoints."; "Container for the list of endpoints.";
list endpoint { list endpoint {
key name; key name;
min-elements 1; min-elements 1;
ordered-by user; ordered-by user;
description description
"User-ordered list of endpoints for this NETCONF client. "User-ordered list of endpoints for this NETCONF client.
Defining more than one enables high-availability."; Defining more than one enables high-availability.";
skipping to change at page 24, line 42 skipping to change at page 24, line 45
description description
"The IP port for this endpoint. The NETCONF server will "The IP port for this endpoint. The NETCONF server will
use the IANA-assigned well-known port if not specified."; use the IANA-assigned well-known port if not specified.";
} }
} }
} }
} }
grouping keep-alives-container { grouping keep-alives-container {
description description
""; "This grouping is use by both listen and call-home configurations.";
container keep-alives { container keep-alives {
description description
"Configures the keep-alive policy, to proactively test the "Configures the keep-alive policy, to proactively test the
aliveness of the NETCONF client, in order to know when a aliveness of the NETCONF client.";
new call home connection should be established.";
reference reference
"RFC VVVV: NETCONF Server and RESTCONF Server Configuration "RFC VVVV: NETCONF Server and RESTCONF Server Configuration
Models, Section 4"; Models, Section 4";
leaf interval-secs { leaf interval-secs {
type uint8; type uint8;
units seconds; units seconds;
description description
"Sets a timeout interval in seconds after which if no data "Sets a timeout interval in seconds after which if no data
has been received from the NETCONF client, a message will has been received from the NETCONF client, a message will
be sent to request a response from the NETCONF client. A be sent to request a response from the NETCONF client. A
skipping to change at page 25, line 24 skipping to change at page 25, line 26
type uint8; type uint8;
default 3; default 3;
description description
"Sets the number of keep-alive messages that may be sent "Sets the number of keep-alive messages that may be sent
without receiving any data from the NETCONF client before without receiving any data from the NETCONF client before
assuming the NETCONF client is no longer alive. If this assuming the NETCONF client is no longer alive. If this
threshold is reached, the transport-level connection will threshold is reached, the transport-level connection will
be disconnected, which will trigger the reconnection be disconnected, which will trigger the reconnection
strategy). The interval timer is reset after each strategy). The interval timer is reset after each
transmission, thus an unresponsive NETCONF client will transmission, thus an unresponsive NETCONF client will
be dropped after ~count-max * interval-secs seconds."; be dropped after approximately (count-max * interval-secs)
seconds.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4. The RESTCONF Server Configuration Model 4. The RESTCONF Server Configuration Model
4.1. Overview 4.1. Overview
skipping to change at page 26, line 23 skipping to change at page 26, line 23
| +--rw address? inet:ip-address | +--rw address? inet:ip-address
| +--rw port? inet:port-number | +--rw port? inet:port-number
| +--rw certificates | +--rw certificates
| +--rw certificate* string | +--rw certificate* string
+--rw keep-alives +--rw keep-alives
+--rw interval-secs? uint8 +--rw interval-secs? uint8
+--rw count-max? uint8 +--rw count-max? uint8
The above subtree illustrates how the ietf-restconf-server YANG The above subtree illustrates how the ietf-restconf-server YANG
module enables configuration for listening for remote connections, as module enables configuration for listening for remote connections, as
described in [draft-ietf-netconf-restconf] and described in [draft-ietf-netconf-restconf]. Feature statements are
[draft-ietf-netconf-call-home]. Feature statements are used to limit used to limit both if listening is supported at all as well as for
both if listening is supported at all as well as for which which transports. If listening for connections is supported, then
transports. If listening for connections is supported, then the the model enables configuring a list of listening endpoints, each
model enables configuring a list of listening endpoints, each
configured with a user-specified name (the key field), the transport configured with a user-specified name (the key field), the transport
to use (i.e. SSH, TLS), and the IP address and port to listen on. to use (i.e. TLS), and the IP address and port to listen on. The
The port field is optional, defaulting to the transport-specific port port field is optional, defaulting to the transport-specific port
when not configured. Please see the YANG module (Section 4.2) for a when not configured. Please see the YANG module (Section 4.2) for a
complete description of these configuration knobs. complete description of these configuration knobs.
4.1.2. The "call-home" subtree 4.1.2. The "call-home" subtree
module: ietf-restconf-server module: ietf-restconf-server
+--rw restconf-server +--rw restconf-server
+--rw call-home {call-home}? +--rw call-home {call-home}?
+--rw application* [name] +--rw application* [name]
+--rw name string +--rw name string
+--rw (transport) +--rw (transport)
skipping to change at page 27, line 42 skipping to change at page 27, line 42
+--rw interval-secs? uint8 +--rw interval-secs? uint8
+--rw count-max? uint8 +--rw count-max? uint8
The above subtree illustrates how the ietf-restconf-server YANG The above subtree illustrates how the ietf-restconf-server YANG
module enables configuration for call home, as described in module enables configuration for call home, as described in
[draft-ietf-netconf-call-home]. Feature statements are used to limit [draft-ietf-netconf-call-home]. Feature statements are used to limit
both if call-home is supported at all as well as for which both if call-home is supported at all as well as for which
transports, if it is. If call-home is supported, then the model transports, if it is. If call-home is supported, then the model
supports configuring a list of applications to connect to. Each supports configuring a list of applications to connect to. Each
application is configured with a user-specified name (the key field), application is configured with a user-specified name (the key field),
the transport to be used (i.e. SSH, TLS), and a list of remote the transport to be used (i.e. TLS), and a list of remote endpoints,
endpoints, each having a name, an IP address, and an optional port. each having a name, an IP address, and an optional port.
Additionally, the configuration for each remote application indicates Additionally, the configuration for each remote application indicates
the connection-type (persistent vs. periodic) and associated the connection-type (persistent vs. periodic) and associated
parameters, as well as the reconnection strategy to use. Please see parameters, as well as the reconnection strategy to use. Please see
the YANG module (Section 4.2) for a complete description of these the YANG module (Section 4.2) for a complete description of these
configuration knobs. configuration knobs.
4.1.3. The "client-cert-auth" subtree
module: ietf-restconf-server
+--rw restconf-server
+--rw client-cert-auth {client-cert-auth}?
+--rw trusted-ca-certs
| +--rw trusted-ca-cert* binary
+--rw trusted-client-certs
| +--rw trusted-client-cert* binary
+--rw cert-maps
+--rw cert-to-name* [id]
+--rw id uint32
+--rw fingerprint x509c2n:tls-fingerprint
+--rw map-type identityref
+--rw name string
The above subtree illustrates how the ietf-restconf-server YANG
module enables configuration of client-certificate authentication.
Specifically, this data-model provides 1) an ability to configure how
client-certificates are authenticated and 2) how authenticated
client-certificates are mapped to RESTCONF user names. Please see
the YANG module (Section 4.2) for a complete description of these
configuration knobs.
4.2. YANG Module 4.2. YANG Module
This YANG module imports YANG types from [RFC6991]. This YANG module imports YANG types from [RFC6991] and [RFC7407].
<CODE BEGINS> file "ietf-restconf-server@2014-12-11.yang" <CODE BEGINS> file "ietf-restconf-server@2015-02-02.yang"
module ietf-restconf-server { module ietf-restconf-server {
namespace "urn:ietf:params:xml:ns:yang:ietf-restconf-server"; namespace "urn:ietf:params:xml:ns:yang:ietf-restconf-server";
prefix "rcserver"; prefix "rcserver";
import ietf-netconf-acm {
prefix nacm; // RFC 6536
revision-date 2012-02-22;
}
import ietf-inet-types { // RFC 6991 import ietf-inet-types { // RFC 6991
prefix inet; prefix inet;
revision-date 2013-07-15; revision-date 2013-07-15;
} }
import ietf-x509-cert-to-name { // RFC 7407
prefix x509c2n;
revision-date 2014-12-10;
}
organization organization
"IETF NETCONF (Network Configuration) Working Group"; "IETF NETCONF (Network Configuration) Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/netconf/> "WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org> WG List: <mailto:netconf@ietf.org>
WG Chair: Mehmet Ersue WG Chair: Mehmet Ersue
<mailto:mehmet.ersue@nsn.com> <mailto:mehmet.ersue@nsn.com>
skipping to change at page 29, line 6 skipping to change at page 29, line 37
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD to the license terms contained in, the Simplified BSD
License set forth in Section 4.c of the IETF Trust's License set forth in Section 4.c of the IETF Trust's
Legal Provisions Relating to IETF Documents Legal Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC VVVV; see This version of this YANG module is part of RFC VVVV; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision "2014-12-11" { revision "2015-02-02" {
description description
"Initial version"; "Initial version";
reference reference
"RFC VVVV: NETCONF Server and RESTCONF Server Configuration Models"; "RFC VVVV: NETCONF Server and RESTCONF Server Configuration Models";
} }
// Features // Features
feature tls { feature tls {
description description
skipping to change at page 29, line 34 skipping to change at page 30, line 20
description description
"The listen feature indicates that the server supports "The listen feature indicates that the server supports
opening a port to listen for incoming client connections."; opening a port to listen for incoming client connections.";
reference reference
"RFC XXXX: RESTCONF Protocol"; "RFC XXXX: RESTCONF Protocol";
} }
feature call-home { feature call-home {
description description
"The call-home feature indicates that the server supports "The call-home feature indicates that the server supports
connecting to the client"; connecting to the client.";
reference reference
"RFC YYYY: NETCONF Call Home and RESTCONF Call Home"; "RFC YYYY: NETCONF Call Home and RESTCONF Call Home";
} }
feature client-cert-auth {
description
"The client-cert-auth feature indicatres that the server
supports the ClientCertificate authentication scheme.";
reference
"RFC ZZZZ: Client Authentication over New TLS Connection";
}
// top-level container (groupings below) // top-level container (groupings below)
container restconf-server { container restconf-server {
description description
"Top-level container for RESTCONF server configuration."; "Top-level container for RESTCONF server configuration.";
uses listen-container; uses listen-container;
uses call-home-container; uses call-home-container;
uses client-cert-auth-container;
} }
grouping listen-container { grouping listen-container {
description description
""; "This grouping is used only to help improve readability
of the YANG module.";
container listen { container listen {
description description
"Configures listen behavior"; "Configures listen behavior";
if-feature listen; if-feature listen;
leaf max-sessions { leaf max-sessions {
type uint16 { type uint16 {
range "0 .. 1024"; range "0 .. 1024";
} }
default '0'; default '0';
description description
"Specifies the maximum number of concurrent sessions "Specifies the maximum number of concurrent sessions
that can be active at one time. The value 0 indicates that can be active at one time. The value 0 indicates
that no artificial session limit should be used."; that no artificial session limit should be used.";
} }
list endpoint { list endpoint {
key name; key name;
description description
"List of endpoints to listen for connections on."; "List of endpoints to listen for RESTCONF connections on.";
leaf name { leaf name {
type string; type string;
description description
"An arbitrary name for the listen endpoint."; "An arbitrary name for the RESTCONF listen endpoint.";
} }
choice transport { choice transport {
mandatory true; mandatory true;
description description
"Selects between available transports."; "Selects between available transports.";
case tls { case tls {
container tls { container tls {
description description
"TLS-specific listening configuration for inbound "TLS-specific listening configuration for inbound
connections."; connections.";
uses address-and-port-grouping { uses address-and-port-grouping {
refine port { refine port {
default 6513; default 443;
} }
} }
uses certificates-container; uses certificates-container;
} }
} }
} }
uses keep-alives-container { uses keep-alives-container {
refine keep-alives/interval-secs { refine keep-alives/interval-secs {
default 0; // disabled by default for listen connections default 0; // disabled by default for listen connections
} }
skipping to change at page 31, line 4 skipping to change at page 31, line 46
} }
uses certificates-container; uses certificates-container;
} }
} }
} }
uses keep-alives-container { uses keep-alives-container {
refine keep-alives/interval-secs { refine keep-alives/interval-secs {
default 0; // disabled by default for listen connections default 0; // disabled by default for listen connections
} }
} }
} }
} }
} }
grouping call-home-container { grouping call-home-container {
description description
""; "This grouping is used only to help improve readability
of the YANG module.";
container call-home { container call-home {
if-feature call-home; if-feature call-home;
description description
"Configures call-home behavior"; "Configures call-home behavior";
list application { list application {
key name; key name;
description description
"List of RESTCONF clients the RESTCONF server is to initiate "List of RESTCONF clients the RESTCONF server is to initiate
call-home connections to."; call-home connections to.";
leaf name { leaf name {
type string; type string;
description description
"An arbitrary name for the remote RESTCONF client."; "An arbitrary name for the remote RESTCONF client.";
} }
choice transport { choice transport {
mandatory true; mandatory true;
description description
"Selects between SSH and TLS transports."; "Selects between TLS and any future transports augmented in.";
case tls { case tls {
if-feature tls; if-feature tls;
container tls { container tls {
description description
"Specifies TLS-specific call-home transport "Specifies TLS-specific call-home transport
configuration."; configuration.";
uses endpoints-container { uses endpoints-container {
refine endpoints/endpoint/port { refine endpoints/endpoint/port {
default 9999; default 9999;
} }
skipping to change at page 34, line 19 skipping to change at page 35, line 13
description description
"Specifies the number times the RESTCONF server tries to "Specifies the number times the RESTCONF server tries to
connect to a specific endpoint before moving on to the connect to a specific endpoint before moving on to the
next endpoint in the list (round robin)."; next endpoint in the list (round robin).";
} }
} }
} }
} }
} }
grouping client-cert-auth-container {
description
"This grouping is used only to help improve readability
of the YANG module.";
container client-cert-auth {
if-feature client-cert-auth;
description
"Container for TLS client certificate authentication
configuration.";
container trusted-ca-certs {
description
"A list of Certificate Authority (CA) certificates that
a NETCONF server can use to authenticate NETCONF client
certificates. A client's certificate is authenticated
if there is a chain of trust to a configured trusted CA
certificate. The client certificate MAY be accompanied
with additional certificates forming a chain of trust.
The client's certificate is authenticated if there is
path-validation from any of the certificates it presents
to a configured trust anchor.";
leaf-list trusted-ca-cert {
type binary;
ordered-by system;
nacm:default-deny-write;
description
"The binary certificate structure as specified by RFC
5246, Section 7.4.6, i.e.,: opaque ASN.1Cert<1..2^24>;
";
reference
"RFC 5246: The Transport Layer Security (TLS)
Protocol Version 1.2";
}
}
container trusted-client-certs {
description
"A list of client certificates that a NETCONF server can
use to authenticate a NETCONF client's certificate. A
client's certificate is authenticated if it is an exact
match to a configured trusted client certificates.";
leaf-list trusted-client-cert {
type binary;
ordered-by system;
nacm:default-deny-write;
description
"The binary certificate structure, as
specified by RFC 5246, Section 7.4.6, i.e.,:
opaque ASN.1Cert<1..2^24>;
";
reference
"RFC 5246: The Transport Layer Security (TLS)
Protocol Version 1.2";
}
}
container cert-maps {
uses x509c2n:cert-to-name;
description
"The cert-maps container is used by a 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.";
}
}
}
grouping certificates-container { grouping certificates-container {
description description
""; "This grouping is used by both the listen and
call-home containers";
container certificates { container certificates {
description description
"Parent container for the list of certificates."; "Parent container for the list of certificates.";
leaf-list certificate { leaf-list certificate {
type string; type string;
min-elements 1; min-elements 1;
description description
"An unordered list of certificates the TLS server can pick "An unordered list of certificates the TLS server can pick
from when sending its Server Certificate message. The value from when sending its Server Certificate message. The value
of the string is the unique identifier for a certificate of the string is the unique identifier for a certificate
skipping to change at page 34, line 44 skipping to change at page 37, line 14
to be the keys for a list of certificates provided to be the keys for a list of certificates provided
by another YANG module"; by another YANG module";
reference reference
"RFC 5246: The TLS Protocol, Section 7.4.2"; "RFC 5246: The TLS Protocol, Section 7.4.2";
} }
} }
} }
grouping address-and-port-grouping { grouping address-and-port-grouping {
description description
"a common grouping"; "This grouping is usd by both the ssh and tls containers
for listen configuration.";
leaf address { leaf address {
type inet:ip-address; type inet:ip-address;
description description
"The IP address of the interface to listen on."; "The IP address of the interface to listen on.";
} }
leaf port { leaf port {
type inet:port-number; type inet:port-number;
description description
"The local port number on this interface the RESTCONF server "The local port number on this interface the RESTCONF server
listens on."; listens on.";
} }
} }
grouping endpoints-container { grouping endpoints-container {
description description
"Grouping for transport-specific configuration for "This grouping is used by both the ssh and tls containers
call-home connections."; for call-home configurations.";
container endpoints { container endpoints {
description description
"Container for the list of endpoints."; "Container for the list of endpoints.";
list endpoint { list endpoint {
key name; key name;
min-elements 1; min-elements 1;
ordered-by user; ordered-by user;
description description
"User-ordered list of endpoints for this RESTCONF client. "User-ordered list of endpoints for this RESTCONF client.
Defining more than one enables high-availability."; Defining more than one enables high-availability.";
skipping to change at page 35, line 50 skipping to change at page 38, line 23
description description
"The IP port for this endpoint. The RESTCONF server will "The IP port for this endpoint. The RESTCONF server will
use the IANA-assigned well-known port if not specified."; use the IANA-assigned well-known port if not specified.";
} }
} }
} }
} }
grouping keep-alives-container { grouping keep-alives-container {
description description
""; "This grouping is use by both listen and call-home configurations.";
container keep-alives { container keep-alives {
description description
"Configures the keep-alive policy, to proactively test the "Configures the keep-alive policy, to proactively test the
aliveness of the RESTCONF client, in order to know when a aliveness of the RESTCONF client.";
new call home connection should be established.";
reference reference
"RFC VVVV: NETCONF Server and RESTCONF Server Configuration "RFC VVVV: NETCONF Server and RESTCONF Server Configuration
Models, Section 4"; Models, Section 4";
leaf interval-secs { leaf interval-secs {
type uint8; type uint8;
units seconds; units seconds;
description description
"Sets a timeout interval in seconds after which if no data "Sets a timeout interval in seconds after which if no data
has been received from the RESTCONF client, a message will has been received from the RESTCONF client, a message will
be sent to request a response from the RESTCONF client. A be sent to request a response from the RESTCONF client. A
skipping to change at page 36, line 34 skipping to change at page 39, line 4
type uint8; type uint8;
default 3; default 3;
description description
"Sets the number of keep-alive messages that may be sent "Sets the number of keep-alive messages that may be sent
without receiving any data from the RESTCONF client before without receiving any data from the RESTCONF client before
assuming the RESTCONF client is no longer alive. If this assuming the RESTCONF client is no longer alive. If this
threshold is reached, the transport-level connection will threshold is reached, the transport-level connection will
be disconnected, which will trigger the reconnection be disconnected, which will trigger the reconnection
strategy). The interval timer is reset after each strategy). The interval timer is reset after each
transmission, thus an unresponsive RESTCONF client will transmission, thus an unresponsive RESTCONF client will
be dropped after ~count-max * interval-secs seconds."; be dropped after approximately (count-max * interval-secs)
seconds.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
5. Implementation strategy for keep-alives 5. Implementation strategy for keep-alives
One of the objectives listed above, Keep-alives for persistent One of the objectives listed above, Keep-alives for persistent
skipping to change at page 38, line 12 skipping to change at page 40, line 36
There are a number of data nodes defined in the "ietf-netconf-server" There are a number of data nodes defined in the "ietf-netconf-server"
YANG module which are readable and/or writable that may be considered YANG module which are readable and/or writable that may be considered
sensitive or vulnerable in some network environments. Write and read sensitive or vulnerable in some network environments. Write and read
operations to these data nodes can have a negative effect on network operations to these data nodes can have a negative effect on network
operations. It is thus important to control write and read access to operations. It is thus important to control write and read access to
these data nodes. Below are the data nodes and their sensitivity/ these data nodes. Below are the data nodes and their sensitivity/
vulnerability. vulnerability.
netconf-server/tls/client-auth/trusted-ca-certs: netconf-server/tls/client-auth/trusted-ca-certs:
o This container contains certificates that the server is to use as o This container contains certificates that a NETCONF server is to
trust anchors for authenticating TLS-specific client certificates. use as trust anchors for authenticating X.509-based client
Write access to this node should be protected. certificates. Write access to this node is protected using an
nacm:default-deny-write statement.
netconf-server/tls/client-auth/trusted-client-certs: netconf-server/tls/client-auth/trusted-client-certs:
o This container contains certificates that the server is to trust o This container contains certificates that a NETCONF server is to
directly when authenticating TLS-specific client certificates. trust directly when authenticating X.509-based client
Write access to this node should be protected. certificates. Write access to this node is protected using an
nacm:default-deny-write statement.
netconf-server/tls/client-auth/cert-map: restconf-server/tls/client-auth/trusted-ca-certs:
o This container contains a user name that some deployments may o This container contains certificates that a RESTCONF server is to
consider sensitive information. Read access to this node may need use as trust anchors for authenticating X.509-based client
to be guarded. certificates. Write access to this node is protected using an
nacm:default-deny-write statement.
restconf-server/tls/client-auth/trusted-client-certs:
o This container contains certificates that a RESTCONF server is to
trust directly when authenticating X.509-based client
certificates. Write access to this node is protected using an
nacm:default-deny-write statement.
7. IANA Considerations 7. IANA Considerations
This document registers two URIs in the IETF XML registry [RFC2119]. This document registers two URIs in the IETF XML registry [RFC2119].
Following the format in [RFC3688], the following registrations are Following the format in [RFC3688], the following registrations are
requested: requested:
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.
skipping to change at page 40, line 23 skipping to change at page 43, line 8
Layer Security (TLS) and Datagram Transport Layer Security Layer Security (TLS) and Datagram Transport Layer Security
(DTLS) Heartbeat Extension", RFC 6520, February 2012. (DTLS) Heartbeat Extension", RFC 6520, February 2012.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536, March Protocol (NETCONF) Access Control Model", RFC 6536, March
2012. 2012.
[RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991,
July 2013. July 2013.
[RFC7407] Bjorklund, M. and J. Schoenwaelder, "A YANG Data Model for
SNMP Configuration", RFC 7407, December 2014.
[draft-ietf-netconf-call-home] [draft-ietf-netconf-call-home]
Watsen, K., "NETCONF Call Home and RESTCONF Call Home", Watsen, K., "NETCONF Call Home and RESTCONF Call Home",
draft-ieft-netconf-call-home-02 (work in progress), 2014. draft-ieft-netconf-call-home-02 (work in progress), 2014.
[draft-ietf-netconf-restconf] [draft-ietf-netconf-restconf]
Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", draft-ieft-netconf-restconf-04 (work in Protocol", draft-ieft-netconf-restconf-04 (work in
progress), 2014. progress), 2014.
[draft-ietf-netconf-rfc5539bis] [draft-ietf-netconf-rfc5539bis]
Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the
NETCONF Protocol over Transport Layer Security (TLS)", NETCONF Protocol over Transport Layer Security (TLS)",
draft-ietf-netconf-rfc5539bis-06 (work in progress), 2014. draft-ietf-netconf-rfc5539bis-06 (work in progress), 2014.
[draft-ietf-netmod-snmp-cfg]
Bjorklund, M. and J. Schoenwaelder, "A YANG Data Model for
SNMP Configuration", draft-ietf-netmod-snmp-cfg-08 (work
in progress), September 2014.
10.2. Informative References 10.2. Informative References
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
January 2004. January 2004.
Appendix A. Examples Appendix A. Examples
A.1. NETCONF Configuration using SSH Transport A.1. NETCONF Configuration using SSH Transport
The following example illustrates the <get> response from a NETCONF The following example illustrates the <get> response from a NETCONF
skipping to change at page 46, line 19 skipping to change at page 49, line 19
o Added ability to configure trust-anchors for SSH X.509 client o Added ability to configure trust-anchors for SSH X.509 client
certs certs
o Now imports by revision, per best practice o Now imports by revision, per best practice
o Added support for RESTCONF server o Added support for RESTCONF server
o Added RFC Editor instructions o Added RFC Editor instructions
B.6. 05 to 06
o Removed feature statement on the session-options container (issue
#21).
o Added NACM statements to YANG modules for sensitive nodes (issue
#24).
o Fixed default RESTCONF server port value to be 443 (issue #26).
o Added client-cert-auth subtree to ietf-restconf-server module
(issue #27).
o Updated draft-ietf-netmod-snmp-cfg reference to RFC 7407 (issue
#28).
o Added description statements for groupings (issue #29).
o Added description for braces to tree diagram section (issue #30).
o Renamed feature from "rfc6187" to "ssh-x509-certs" (issue #31).
Appendix C. Open Issues Appendix C. Open Issues
Please see: https://github.com/netconf-wg/server-model/issues. Please see: https://github.com/netconf-wg/server-model/issues.
Authors' Addresses Authors' Addresses
Kent Watsen Kent Watsen
Juniper Networks Juniper Networks
EMail: kwatsen@juniper.net EMail: kwatsen@juniper.net
 End of changes. 88 change blocks. 
151 lines changed or deleted 294 lines changed or added

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