draft-ietf-netconf-netconf-client-server-03.txt | draft-ietf-netconf-netconf-client-server-04.txt | |||
---|---|---|---|---|
NETCONF Working Group K. Watsen | NETCONF Working Group K. Watsen | |||
Internet-Draft Juniper Networks | Internet-Draft Juniper Networks | |||
Intended status: Standards Track G. Wu | Intended status: Standards Track G. Wu | |||
Expires: December 15, 2017 Cisco Networks | Expires: January 4, 2018 Cisco Networks | |||
J. Schoenwaelder | J. Schoenwaelder | |||
Jacobs University Bremen | Jacobs University Bremen | |||
June 13, 2017 | July 3, 2017 | |||
NETCONF Client and Server Models | NETCONF Client and Server Models | |||
draft-ietf-netconf-netconf-client-server-03 | draft-ietf-netconf-netconf-client-server-04 | |||
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 8 ¶ | skipping to change at page 2, line 8 ¶ | |||
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 "2017-06-13" --> the publication date of this draft | o "2017-07-03" --> 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 A. Change Log | o Appendix A. 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 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 December 15, 2017. | This Internet-Draft will expire on January 4, 2018. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. The NETCONF Client Model . . . . . . . . . . . . . . . . . . 4 | 2. The NETCONF Client Model . . . . . . . . . . . . . . . . . . 4 | |||
2.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 5 | 2.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 5 | |||
2.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 8 | 2.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.3. YANG Model . . . . . . . . . . . . . . . . . . . . . . . 10 | 2.3. YANG Model . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
3. The NETCONF Server Model . . . . . . . . . . . . . . . . . . 19 | 3. The NETCONF Server Model . . . . . . . . . . . . . . . . . . 20 | |||
3.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 20 | 3.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 20 | |||
3.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 23 | 3.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 23 | |||
3.3. YANG Model . . . . . . . . . . . . . . . . . . . . . . . 26 | 3.3. YANG Model . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
4. Design Considerations . . . . . . . . . . . . . . . . . . . . 37 | 4. Design Considerations . . . . . . . . . . . . . . . . . . . . 37 | |||
4.1. Support all NETCONF transports . . . . . . . . . . . . . 37 | 4.1. Support all NETCONF transports . . . . . . . . . . . . . 38 | |||
4.2. Enable each transport to select which keys to use . . . . 37 | 4.2. Enable each transport to select which keys to use . . . . 38 | |||
4.3. Support authenticating NETCONF clients certificates . . . 38 | 4.3. Support authenticating NETCONF clients certificates . . . 38 | |||
4.4. Support mapping authenticated NETCONF client certificates | 4.4. Support mapping authenticated NETCONF client certificates | |||
to usernames . . . . . . . . . . . . . . . . . . . . . . 38 | to usernames . . . . . . . . . . . . . . . . . . . . . . 38 | |||
4.5. Support both listening for connections and call home . . 38 | 4.5. Support both listening for connections and call home . . 38 | |||
4.6. For Call Home connections . . . . . . . . . . . . . . . . 38 | 4.6. For Call Home connections . . . . . . . . . . . . . . . . 39 | |||
4.6.1. Support more than one NETCONF client . . . . . . . . 38 | 4.6.1. Support more than one NETCONF client . . . . . . . . 39 | |||
4.6.2. Support NETCONF clients having more than one endpoint 38 | 4.6.2. Support NETCONF clients having more than one endpoint 39 | |||
4.6.3. Support a reconnection strategy . . . . . . . . . . . 39 | 4.6.3. Support a reconnection strategy . . . . . . . . . . . 39 | |||
4.6.4. Support both persistent and periodic connections . . 39 | 4.6.4. Support both persistent and periodic connections . . 39 | |||
4.6.5. Reconnection strategy for periodic connections . . . 39 | 4.6.5. Reconnection strategy for periodic connections . . . 40 | |||
4.6.6. Keep-alives for persistent connections . . . . . . . 39 | 4.6.6. Keep-alives for persistent connections . . . . . . . 40 | |||
4.6.7. Customizations for periodic connections . . . . . . . 39 | 4.6.7. Customizations for periodic connections . . . . . . . 40 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | |||
6.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 41 | 6.1. The IETF XML Registry . . . . . . . . . . . . . . . . . . 41 | |||
6.2. The YANG Module Names Registry . . . . . . . . . . . . . 41 | 6.2. The YANG Module Names Registry . . . . . . . . . . . . . 42 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 41 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 42 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 42 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 42 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 42 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 43 | 8.2. Informative References . . . . . . . . . . . . . . . . . 43 | |||
Appendix A. Change Log . . . . . . . . . . . . . . . . . . . . . 44 | Appendix A. Change Log . . . . . . . . . . . . . . . . . . . . . 45 | |||
A.1. server-model-09 to 00 . . . . . . . . . . . . . . . . . . 44 | A.1. server-model-09 to 00 . . . . . . . . . . . . . . . . . . 45 | |||
A.2. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 44 | A.2. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
A.3. 01 to 02 . . . . . . . . . . . . . . . . . . . . . . . . 44 | A.3. 01 to 02 . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
A.4. 02 to 03 . . . . . . . . . . . . . . . . . . . . . . . . 44 | A.4. 02 to 03 . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 44 | A.5. 03 to 04 . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 46 | ||||
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 client and the other module to configure a | configure a NETCONF client and the other module to configure a | |||
NETCONF server. Both modules support both the SSH and TLS transport | NETCONF server. Both modules support both the SSH and TLS transport | |||
protocols, and support both standard NETCONF and NETCONF Call Home | protocols, and support both standard NETCONF and NETCONF Call Home | |||
connections. | connections. | |||
NETCONF is defined by [RFC6241]. SSH is defined by [RFC4252], | NETCONF is defined by [RFC6241]. SSH is defined by [RFC4252], | |||
[RFC4253], and [RFC4254]. TLS is defined by [RFC5246]. NETCONF Call | [RFC4253], and [RFC4254]. TLS is defined by [RFC5246]. NETCONF Call | |||
Home is defined by [RFC8071]). | Home is defined by [RFC8071]). | |||
1.1. Terminology | 1.1. Terminology | |||
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
capitals, as shown here. | ||||
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 | o Braces "{" and "}" enclose feature names, and indicate that the | |||
skipping to change at page 5, line 13 ¶ | skipping to change at page 5, line 18 ¶ | |||
[I-D.ietf-netconf-tls-client-server] respectively. | [I-D.ietf-netconf-tls-client-server] respectively. | |||
All private keys and trusted certificates are held in the keystore | All private keys and trusted certificates are held in the keystore | |||
model defined in [I-D.ietf-netconf-keystore]. | model defined in [I-D.ietf-netconf-keystore]. | |||
YANG feature statements are used to enable implementations to | YANG feature statements are used to enable implementations to | |||
advertise which parts of the model the NETCONF client supports. | advertise which parts of the model the NETCONF client supports. | |||
2.1. Tree Diagram | 2.1. Tree Diagram | |||
Just the container is displayed below, but there is also a grouping | ||||
that the container is using. | ||||
Note: all lines are folded at column 71 with no '\' character. | Note: all lines are folded at column 71 with no '\' character. | |||
module: ietf-netconf-client | module: ietf-netconf-client | |||
groupings: | +--rw netconf-client | |||
netconf-client | +--rw initiate {initiate}? | |||
+---- initiate {initiate}? | | +--rw netconf-server* [name] | |||
| +---- netconf-server* [name] | | +--rw name string | |||
| +---- name? string | | +--rw (transport) | |||
| +---- (transport) | ||||
| | +--:(ssh) {ssh-initiate}? | | | +--:(ssh) {ssh-initiate}? | |||
| | | +---- ssh | | | | +--rw ssh | |||
| | | +---- endpoints | | | | +--rw endpoints | |||
| | | | +---- endpoint* [name] | | | | | +--rw endpoint* [name] | |||
| | | | +---- name? string | | | | | +--rw name string | |||
| | | | +---- address inet:host | | | | | +--rw address inet:host | |||
| | | | +---- port? inet:port-number | | | | | +--rw port? inet:port-number | |||
| | | +---- server-auth | | | | +--rw server-auth | |||
| | | | +---- trusted-ssh-host-keys? | | | | | +--rw trusted-ssh-host-keys? | |||
| | | | | -> /ks:keystore/trusted-host-keys/name | | | | | | -> /ks:keystore/trusted-host-keys/name | |||
| | | | +---- trusted-ca-certs? leafref | | | | | +--rw trusted-ca-certs? leafref | |||
| | | | | {sshcom:ssh-x509-certs}? | | | | | | {sshcom:ssh-x509-certs}? | |||
| | | | +---- trusted-server-certs? leafref | | | | | +--rw trusted-server-certs? leafref | |||
| | | | {sshcom:ssh-x509-certs}? | | | | | {sshcom:ssh-x509-certs}? | |||
| | | +---- client-auth | | | | +--rw client-auth | |||
| | | | +---- username? string | | | | | +--rw username? string | |||
| | | | +---- (auth-type)? | | | | | +--rw (auth-type) | |||
| | | | +--:(certificate) | | | | | +--:(certificate) | |||
| | | | | +---- certificate? leafref | | | | | | +--rw certificate? leafref | |||
| | | | | {sshcom:ssh-x509-certs}? | | | | | | {sshcom:ssh-x509-certs}? | |||
| | | | +--:(public-key) | | | | | +--:(public-key) | |||
| | | | | +---- public-key? | | | | | | +--rw public-key? | |||
| | | | | -> /ks:keystore/keys/key/name | | | | | | -> /ks:keystore/keys/key/name | |||
| | | | +--:(password) | | | | | +--:(password) | |||
| | | | +---- password? string | | | | | +--rw password? string | |||
| | | +---- transport-params | | | | +--rw transport-params | |||
| | | {ssh-client-transport-params-config}? | | | | {ssh-client-transport-params-config}? | |||
| | | +---- host-key | | | | +--rw host-key | |||
| | | | +---- host-key-alg* identityref | | | | | +--rw host-key-alg* identityref | |||
| | | +---- key-exchange | | | | +--rw key-exchange | |||
| | | | +---- key-exchange-alg* identityref | | | | | +--rw key-exchange-alg* identityref | |||
| | | +---- encryption | | | | +--rw encryption | |||
| | | | +---- encryption-alg* identityref | | | | | +--rw encryption-alg* identityref | |||
| | | +---- mac | | | | +--rw mac | |||
| | | | +---- mac-alg* identityref | | | | | +--rw mac-alg* identityref | |||
| | | +---- compression | | | | +--rw compression | |||
| | | +---- compression-alg* identityref | | | | +--rw compression-alg* identityref | |||
| | +--:(tls) {tls-initiate}? | | | +--:(tls) {tls-initiate}? | |||
| | +---- tls | | | +--rw tls | |||
| | +---- endpoints | | | +--rw endpoints | |||
| | | +---- endpoint* [name] | | | | +--rw endpoint* [name] | |||
| | | +---- name? string | | | | +--rw name string | |||
| | | +---- address inet:host | | | | +--rw address inet:host | |||
| | | +---- port? inet:port-number | | | | +--rw port? inet:port-number | |||
| | +---- server-auth | | | +--rw server-auth | |||
| | | +---- trusted-ca-certs? leafref | | | | +--rw trusted-ca-certs? leafref | |||
| | | +---- trusted-server-certs? leafref | | | | +--rw trusted-server-certs? leafref | |||
| | +---- client-auth | | | +--rw client-auth | |||
| | | +---- (auth-type)? | | | | +--rw (auth-type) | |||
| | | +--:(certificate) | | | | +--:(certificate) | |||
| | | +---- certificate? leafref | | | | +--rw certificate? leafref | |||
| | +---- hello-params | | | +--rw hello-params | |||
| | {tls-client-hello-params-config}? | | | {tls-client-hello-params-config}? | |||
| | +---- tls-versions | | | +--rw tls-versions | |||
| | | +---- tls-version* identityref | | | | +--rw tls-version* identityref | |||
| | +---- cipher-suites | | | +--rw cipher-suites | |||
| | +---- cipher-suite* identityref | | | +--rw cipher-suite* identityref | |||
| +---- connection-type | | +--rw connection-type | |||
| | +---- (connection-type)? | | | +--rw (connection-type)? | |||
| | +--:(persistent-connection) | | | +--:(persistent-connection) | |||
| | | +---- persistent! | | | | +--rw persistent! | |||
| | | +---- idle-timeout? uint32 | | | | +--rw idle-timeout? uint32 | |||
| | | +---- keep-alives | | | | +--rw keep-alives | |||
| | | +---- max-wait? uint16 | | | | +--rw max-wait? uint16 | |||
| | | +---- max-attempts? uint8 | | | | +--rw max-attempts? uint8 | |||
| | +--:(periodic-connection) | | | +--:(periodic-connection) | |||
| | +---- periodic! | | | +--rw periodic! | |||
| | +---- idle-timeout? uint16 | | | +--rw idle-timeout? uint16 | |||
| | +---- reconnect-timeout? uint16 | | | +--rw reconnect-timeout? uint16 | |||
| +---- reconnect-strategy | | +--rw reconnect-strategy | |||
| +---- start-with? enumeration | | +--rw start-with? enumeration | |||
| +---- max-attempts? uint8 | | +--rw max-attempts? uint8 | |||
+---- listen {listen}? | +--rw listen {listen}? | |||
+---- max-sessions? uint16 | +--rw max-sessions? uint16 | |||
+---- idle-timeout? uint16 | +--rw idle-timeout? uint16 | |||
+---- endpoint* [name] | +--rw endpoint* [name] | |||
+---- name? string | +--rw name string | |||
+---- (transport) | +--rw (transport) | |||
+--:(ssh) {ssh-listen}? | +--:(ssh) {ssh-listen}? | |||
| +---- ssh | | +--rw ssh | |||
| +---- address? inet:ip-address | | +--rw address? inet:ip-address | |||
| +---- port? inet:port-number | | +--rw port? inet:port-number | |||
| +---- server-auth | | +--rw server-auth | |||
| | +---- trusted-ssh-host-keys? | | | +--rw trusted-ssh-host-keys? | |||
| | | -> /ks:keystore/trusted-host-keys/name | | | | -> /ks:keystore/trusted-host-keys/name | |||
| | +---- trusted-ca-certs? leafref | | | +--rw trusted-ca-certs? leafref | |||
| | | {sshcom:ssh-x509-certs}? | | | | {sshcom:ssh-x509-certs}? | |||
| | +---- trusted-server-certs? leafref | | | +--rw trusted-server-certs? leafref | |||
| | {sshcom:ssh-x509-certs}? | | | {sshcom:ssh-x509-certs}? | |||
| +---- client-auth | | +--rw client-auth | |||
| | +---- username? string | | | +--rw username? string | |||
| | +---- (auth-type)? | | | +--rw (auth-type) | |||
| | +--:(certificate) | | | +--:(certificate) | |||
| | | +---- certificate? leafref | | | | +--rw certificate? leafref | |||
| | | {sshcom:ssh-x509-certs}? | | | | {sshcom:ssh-x509-certs}? | |||
| | +--:(public-key) | | | +--:(public-key) | |||
| | | +---- public-key? | | | | +--rw public-key? | |||
| | | -> /ks:keystore/keys/key/name | | | | -> /ks:keystore/keys/key/name | |||
| | +--:(password) | | | +--:(password) | |||
| | +---- password? string | | | +--rw password? string | |||
| +---- transport-params | | +--rw transport-params | |||
| {ssh-client-transport-params-config}? | | {ssh-client-transport-params-config}? | |||
| +---- host-key | | +--rw host-key | |||
| | +---- host-key-alg* identityref | | | +--rw host-key-alg* identityref | |||
| +---- key-exchange | | +--rw key-exchange | |||
| | +---- key-exchange-alg* identityref | | | +--rw key-exchange-alg* identityref | |||
| +---- encryption | | +--rw encryption | |||
| | +---- encryption-alg* identityref | | | +--rw encryption-alg* identityref | |||
| +---- mac | | +--rw mac | |||
| | +---- mac-alg* identityref | | | +--rw mac-alg* identityref | |||
| +---- compression | | +--rw compression | |||
| +---- compression-alg* identityref | | +--rw compression-alg* identityref | |||
+--:(tls) {tls-listen}? | +--:(tls) {tls-listen}? | |||
+---- tls | +--rw tls | |||
+---- address? inet:ip-address | +--rw address? inet:ip-address | |||
+---- port? inet:port-number | +--rw port? inet:port-number | |||
+---- server-auth | +--rw server-auth | |||
| +---- trusted-ca-certs? leafref | | +--rw trusted-ca-certs? leafref | |||
| +---- trusted-server-certs? leafref | | +--rw trusted-server-certs? leafref | |||
+---- client-auth | +--rw client-auth | |||
| +---- (auth-type)? | | +--rw (auth-type) | |||
| +--:(certificate) | | +--:(certificate) | |||
| +---- certificate? leafref | | +--rw certificate? leafref | |||
+---- hello-params | +--rw hello-params | |||
{tls-client-hello-params-config}? | {tls-client-hello-params-config}? | |||
+---- tls-versions | +--rw tls-versions | |||
| +---- tls-version* identityref | | +--rw tls-version* identityref | |||
+---- cipher-suites | +--rw cipher-suites | |||
+---- cipher-suite* identityref | +--rw cipher-suite* identityref | |||
endpoints-container | ||||
+---- endpoints | ||||
+---- endpoint* [name] | ||||
+---- name? string | ||||
+---- address inet:host | ||||
+---- port? inet:port-number | ||||
2.2. Example Usage | 2.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 2.2 | This example is consistent with the examples presented in Section 2.2 | |||
of [I-D.ietf-netconf-keystore]. | of [I-D.ietf-netconf-keystore]. | |||
skipping to change at page 10, line 8 ¶ | skipping to change at page 10, line 8 ¶ | |||
<public-key>ex-rsa-key</public-key> | <public-key>ex-rsa-key</public-key> | |||
</client-auth> | </client-auth> | |||
</ssh> | </ssh> | |||
</endpoint> | </endpoint> | |||
</listen> | </listen> | |||
</netconf-client> | </netconf-client> | |||
2.3. YANG Model | 2.3. YANG Model | |||
This YANG module imports YANG types from [RFC6991] and [RFC7407]. | This YANG module imports YANG types from [RFC6991] and [RFC7407]. | |||
<CODE BEGINS> file "ietf-netconf-client@2017-06-13.yang" | <CODE BEGINS> file "ietf-netconf-client@2017-07-03.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-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
reference | reference | |||
skipping to change at page 11, line 20 ¶ | skipping to change at page 11, line 20 ¶ | |||
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 XXXX; see | This version of this YANG module is part of RFC XXXX; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision "2017-06-13" { | revision "2017-07-03" { | |||
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 { | feature initiate { | |||
description | description | |||
skipping to change at page 12, line 33 ¶ | skipping to change at page 12, line 33 ¶ | |||
feature tls-listen { | feature tls-listen { | |||
description | description | |||
"The 'tls-listen' feature indicates that the NETCONF client | "The 'tls-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 TLS connections."; | server call-home TLS connections."; | |||
reference | reference | |||
"RFC 8071: NETCONF Call Home and RESTCONF Call Home"; | "RFC 8071: NETCONF Call Home and RESTCONF Call Home"; | |||
} | } | |||
container netconf-client { | ||||
uses netconf-client; | ||||
description | ||||
"Top-level container for NETCONF client configuration."; | ||||
} | ||||
grouping netconf-client { | grouping netconf-client { | |||
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 initiate; | |||
description | description | |||
"Configures client initiating underlying TCP connections."; | "Configures client initiating underlying TCP connections."; | |||
list netconf-server { | list netconf-server { | |||
key name; | key name; | |||
skipping to change at page 13, line 32 ¶ | skipping to change at page 13, line 38 ¶ | |||
if-feature tls-initiate; | if-feature tls-initiate; | |||
container tls { | container tls { | |||
description | description | |||
"Specifies TLS-specific transport configuration."; | "Specifies TLS-specific transport configuration."; | |||
uses endpoints-container { | uses endpoints-container { | |||
refine endpoints/endpoint/port { | refine endpoints/endpoint/port { | |||
default 6513; | default 6513; | |||
} | } | |||
} | } | |||
uses ts:tls-client-grouping { | uses ts:tls-client-grouping { | |||
refine "client-auth" { | refine "client-auth/auth-type" { | |||
must 'certificate'; | mandatory true; | |||
description | description | |||
"NETCONF/TLS clients MUST pass a client certiticate."; | "NETCONF/TLS clients MUST pass some authentication | |||
credentials."; | ||||
} | } | |||
} | } | |||
} | } | |||
} // end tls | } // end tls | |||
} // end transport | } // end transport | |||
container connection-type { | container connection-type { | |||
description | description | |||
"Indicates the kind of connection to use."; | "Indicates the kind of connection to use."; | |||
skipping to change at page 18, line 33 ¶ | skipping to change at page 18, line 40 ¶ | |||
description | description | |||
"The IP address to listen for call-home connections."; | "The IP address to listen for call-home connections."; | |||
} | } | |||
leaf port { | leaf port { | |||
type inet:port-number; | type inet:port-number; | |||
default 4335; | default 4335; | |||
description | description | |||
"The port number to listen for call-home connections."; | "The port number to listen for call-home connections."; | |||
} | } | |||
uses ts:tls-client-grouping { | uses ts:tls-client-grouping { | |||
refine "client-auth" { | refine "client-auth/auth-type" { | |||
must 'certificate'; | mandatory true; | |||
description | description | |||
"NETCONF/TLS clients MUST pass a client certiticate."; | "NETCONF/TLS clients MUST pass some authentication | |||
credentials."; | ||||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} // end transport | } // end transport | |||
} // end endpoint | } // end endpoint | |||
} // end listen | } // end listen | |||
} // end netconf-client | } // end netconf-client | |||
skipping to change at page 20, line 18 ¶ | skipping to change at page 20, line 23 ¶ | |||
[I-D.ietf-netconf-tls-client-server] respectively. | [I-D.ietf-netconf-tls-client-server] respectively. | |||
All private keys and trusted certificates are held in the keystore | All private keys and trusted certificates are held in the keystore | |||
model defined in [I-D.ietf-netconf-keystore]. | model defined in [I-D.ietf-netconf-keystore]. | |||
YANG feature statements are used to enable implementations to | YANG feature statements are used to enable implementations to | |||
advertise which parts of the model the NETCONF server supports. | advertise which parts of the model the NETCONF server supports. | |||
3.1. Tree Diagram | 3.1. Tree Diagram | |||
Just the container is displayed below, but there is also a grouping | ||||
that the container is using. | ||||
Note: all lines are folded at column 71 with no '\' character. | Note: all lines are folded at column 71 with no '\' character. | |||
module: ietf-netconf-server | module: ietf-netconf-server | |||
+--rw netconf-server | +--rw netconf-server | |||
+--rw session-options | +--rw session-options | |||
| +--rw hello-timeout? uint16 | | +--rw hello-timeout? uint16 | |||
+--rw listen {listen}? | +--rw listen {listen}? | |||
| +--rw max-sessions? uint16 | | +--rw max-sessions? uint16 | |||
| +--rw idle-timeout? uint16 | | +--rw idle-timeout? uint16 | |||
| +--rw endpoint* [name] | | +--rw endpoint* [name] | |||
skipping to change at page 26, line 30 ¶ | skipping to change at page 26, line 38 ¶ | |||
<max-attempts>3</max-attempts> | <max-attempts>3</max-attempts> | |||
</reconnect-strategy> | </reconnect-strategy> | |||
</netconf-client> | </netconf-client> | |||
</call-home> | </call-home> | |||
</netconf-server> | </netconf-server> | |||
3.3. YANG Model | 3.3. YANG Model | |||
This YANG module imports YANG types from [RFC6991] and [RFC7407]. | This YANG module imports YANG types from [RFC6991] and [RFC7407]. | |||
<CODE BEGINS> file "ietf-netconf-server@2017-06-13.yang" | <CODE BEGINS> file "ietf-netconf-server@2017-07-03.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-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
reference | reference | |||
skipping to change at page 27, line 43 ¶ | skipping to change at page 28, line 5 ¶ | |||
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 XXXX; see | This version of this YANG module is part of RFC XXXX; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision "2017-06-13" { | revision "2017-07-03" { | |||
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 { | feature listen { | |||
description | description | |||
"The 'listen' feature indicates that the NETCONF server | "The 'listen' feature indicates that the NETCONF server | |||
supports opening a port to accept NETCONF client connections | supports opening a port to accept NETCONF client connections | |||
using at least one transport (e.g., SSH, TLS, etc.)."; | using at least one transport (e.g., SSH, TLS, etc.)."; | |||
} | } | |||
feature ssh-listen { | feature ssh-listen { | |||
skipping to change at page 29, line 12 ¶ | skipping to change at page 29, line 20 ¶ | |||
feature tls-call-home { | feature tls-call-home { | |||
description | description | |||
"The 'tls-call-home' feature indicates that the NETCONF | "The 'tls-call-home' feature indicates that the NETCONF | |||
server supports initiating a NETCONF over TLS call | server supports initiating a NETCONF over TLS 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"; | |||
} | } | |||
// top-level container (groupings below) | ||||
container netconf-server { | container netconf-server { | |||
uses netconf-server; | ||||
description | description | |||
"Top-level container for NETCONF server configuration."; | "Top-level container for NETCONF server configuration."; | |||
} | ||||
grouping netconf-server { | ||||
description | ||||
"Top-level grouping for NETCONF server configuration."; | ||||
container session-options { // SHOULD WE REMOVE THIS ALTOGETHER? | container session-options { // SHOULD WE REMOVE THIS ALTOGETHER? | |||
description | description | |||
"NETCONF session options, independent of transport | "NETCONF session options, independent of transport | |||
or connection strategy."; | or connection strategy."; | |||
leaf hello-timeout { | leaf hello-timeout { | |||
type uint16; | type uint16; | |||
units "seconds"; | units "seconds"; | |||
default 600; | default 600; | |||
description | description | |||
skipping to change at page 31, line 24 ¶ | skipping to change at page 31, line 38 ¶ | |||
special meanings (e.g., '0.0.0.0' and '::')."; | special meanings (e.g., '0.0.0.0' and '::')."; | |||
} | } | |||
leaf port { | leaf port { | |||
type inet:port-number; | type inet:port-number; | |||
default 6513; | default 6513; | |||
description | description | |||
"The local port number on this interface the TLS server | "The local port number on this interface the TLS server | |||
listens on."; | listens on."; | |||
} | } | |||
uses ts:tls-server-grouping { | uses ts:tls-server-grouping { | |||
refine "client-auth" { | ||||
must 'trusted-ca-certs or trusted-client-certs'; | ||||
description | ||||
"NETCONF/TLS servers MUST validate client | ||||
certiticates."; | ||||
} | ||||
augment "client-auth" { | augment "client-auth" { | |||
description | description | |||
"Augments in the cert-to-name structure."; | "Augments in the cert-to-name structure."; | |||
uses cert-maps-grouping; | uses cert-maps-grouping; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
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 netconf-client { | list netconf-client { | |||
key name; | key name; | |||
description | description | |||
skipping to change at page 32, line 32 ¶ | skipping to change at page 32, line 52 ¶ | |||
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 4335; | default 4335; | |||
} | } | |||
} | } | |||
uses ts:tls-server-grouping { | uses ts:tls-server-grouping { | |||
refine "client-auth" { | ||||
must 'trusted-ca-certs or trusted-client-certs'; | ||||
description | ||||
"NETCONF/TLS servers MUST validate client | ||||
certiticates."; | ||||
} | ||||
augment "client-auth" { | augment "client-auth" { | |||
description | description | |||
"Augments in the cert-to-name structure."; | "Augments in the cert-to-name structure."; | |||
uses cert-maps-grouping; | uses cert-maps-grouping; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container connection-type { | container connection-type { | |||
skipping to change at page 42, line 11 ¶ | skipping to change at page 42, line 39 ¶ | |||
Juergen Schoenwaelder and was partly funded by Flamingo, a Network of | Juergen Schoenwaelder and was partly funded by Flamingo, a Network of | |||
Excellence project (ICT-318488) supported by the European Commission | Excellence project (ICT-318488) supported by the European Commission | |||
under its Seventh Framework Programme. | under its Seventh Framework Programme. | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[I-D.ietf-netconf-keystore] | [I-D.ietf-netconf-keystore] | |||
Watsen, K., "Keystore Model", draft-ietf-netconf- | Watsen, K., "Keystore Model", draft-ietf-netconf- | |||
keystore-01 (work in progress), March 2017. | keystore-02 (work in progress), June 2017. | |||
[I-D.ietf-netconf-ssh-client-server] | [I-D.ietf-netconf-ssh-client-server] | |||
Watsen, K. and G. Wu, "SSH Client and Server Models", | Watsen, K. and G. Wu, "SSH Client and Server Models", | |||
draft-ietf-netconf-ssh-client-server-02 (work in | draft-ietf-netconf-ssh-client-server-03 (work in | |||
progress), March 2017. | progress), June 2017. | |||
[I-D.ietf-netconf-tls-client-server] | [I-D.ietf-netconf-tls-client-server] | |||
Watsen, K. and G. Wu, "TLS Client and Server Models", | Watsen, K. and G. Wu, "TLS Client and Server Models", | |||
draft-ietf-netconf-tls-client-server-02 (work in | draft-ietf-netconf-tls-client-server-03 (work in | |||
progress), March 2017. | progress), June 2017. | |||
[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, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
<http://www.rfc-editor.org/info/rfc6241>. | <http://www.rfc-editor.org/info/rfc6241>. | |||
skipping to change at page 43, line 9 ¶ | skipping to change at page 43, line 37 ¶ | |||
[RFC7589] Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | [RFC7589] Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | |||
NETCONF Protocol over Transport Layer Security (TLS) with | NETCONF Protocol over Transport Layer Security (TLS) with | |||
Mutual X.509 Authentication", RFC 7589, | Mutual X.509 Authentication", RFC 7589, | |||
DOI 10.17487/RFC7589, June 2015, | DOI 10.17487/RFC7589, June 2015, | |||
<http://www.rfc-editor.org/info/rfc7589>. | <http://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, | |||
<http://www.rfc-editor.org/info/rfc7950>. | <http://www.rfc-editor.org/info/rfc7950>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
May 2017, <http://www.rfc-editor.org/info/rfc8174>. | ||||
8.2. Informative References | 8.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, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<http://www.rfc-editor.org/info/rfc3688>. | <http://www.rfc-editor.org/info/rfc3688>. | |||
[RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | [RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | |||
Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, | Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, | |||
January 2006, <http://www.rfc-editor.org/info/rfc4252>. | January 2006, <http://www.rfc-editor.org/info/rfc4252>. | |||
skipping to change at page 44, line 38 ¶ | skipping to change at page 45, line 38 ¶ | |||
o Updated both modules to accomodate new groupings in the ssh/tls | o Updated both modules to accomodate new groupings in the ssh/tls | |||
drafts. | drafts. | |||
A.4. 02 to 03 | A.4. 02 to 03 | |||
o Refined use of tls-client-grouping to add a must statement | o Refined use of tls-client-grouping to add a must statement | |||
indicating that the TLS client must specify a client-certificate. | indicating that the TLS client must specify a client-certificate. | |||
o Changed 'netconf-client' to be a grouping (not a container). | o Changed 'netconf-client' to be a grouping (not a container). | |||
A.5. 03 to 04 | ||||
o Added RFC 8174 to Requirements Language Section. | ||||
o Replaced refine statement in ietf-netconf-client to add a | ||||
mandatory true. | ||||
o Added refine statement in ietf-netconf-server to add a must | ||||
statement. | ||||
o Now there are containers and groupings, for both the client and | ||||
server models. | ||||
Authors' Addresses | Authors' Addresses | |||
Kent Watsen | Kent Watsen | |||
Juniper Networks | Juniper Networks | |||
EMail: kwatsen@juniper.net | EMail: kwatsen@juniper.net | |||
Gary Wu | Gary Wu | |||
Cisco Networks | Cisco Networks | |||
End of changes. 61 change blocks. | ||||
157 lines changed or deleted | 202 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |