file "ietf-logical-network-element@2019-01-25.yang" module ietf-logical-network-element { yang-version 1.1; // namespace namespace "urn:ietf:params:xml:ns:yang:ietf-logical-network-element"; prefix lne; // import some basic types import ietf-interfaces { prefix if; reference "RFC 8343: A YANG Data Model for Interface Management"; } import ietf-yang-schema-mount { prefix yangmnt; reference "RFC 8528: YANG Schema Mount"; } Berger, et al. Standards Track [Page 10] RFC 8530 YANG LNEs March 2019 organization "IETF Routing Area (rtgwg) Working Group"; contact "WG Web: WG List: Author: Lou Berger Author: Christian Hopps Author: Acee Lindem Author: Dean Bogdanovic "; description "This module is used to support multiple logical network elements on a single physical or virtual system. Copyright (c) 2019 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC 8530; see the RFC itself for full legal notices."; revision 2019-01-25 { description "Initial revision."; reference "RFC 8530: YANG Model for Logical Network Elements"; } // top level device definition statements container logical-network-elements { description "Allows a network device to support multiple logical network element (device) instances."; list logical-network-element { Berger, et al. Standards Track [Page 11] RFC 8530 YANG LNEs March 2019 key "name"; description "List of logical network elements."; leaf name { type string; description "Device-wide unique identifier for the logical network element."; } leaf managed { type boolean; default "true"; description "True if the host can access LNE information using the root mount point. This value may not be modifiable in all implementations."; } leaf description { type string; description "Description of the logical network element."; } container root { description "Container for mount point."; yangmnt:mount-point "root" { description "Root for models supported per logical network element. This mount point may or may not be inline based on the server implementation. It SHALL always contain a YANG library and interfaces instance. When the associated 'managed' leaf is 'false', any operation that attempts to access information below the root SHALL fail with an error-tag of 'access-denied' and an error-app-tag of 'lne-not-managed'."; } } } } // augment statements augment "/if:interfaces/if:interface" { description "Add a node for the identification of the logical network Berger, et al. Standards Track [Page 12] RFC 8530 YANG LNEs March 2019 element associated with an interface. Applies to interfaces that can be assigned per logical network element. Note that a standard error will be returned if the identified leafref isn't present. If an interface cannot be assigned for any other reason, the operation SHALL fail with an error-tag of 'operation-failed' and an error-app-tag of 'lne-assignment-failed'. A meaningful error-info that indicates the source of the assignment failure SHOULD also be provided."; leaf bind-lne-name { type leafref { path "/logical-network-elements/logical-network-element/name"; } description "Logical network element ID to which the interface is bound."; } } // notification statements notification bind-lne-name-failed { description "Indicates an error in the association of an interface to an LNE. Only generated after success is initially returned when bind-lne-name is set."; leaf name { type leafref { path "/if:interfaces/if:interface/if:name"; } mandatory true; description "Contains the interface name associated with the failure."; } leaf bind-lne-name { type leafref { path "/if:interfaces/if:interface/lne:bind-lne-name"; } mandatory true; description "Contains the bind-lne-name associated with the failure."; } leaf error-info { type string; Berger, et al. Standards Track [Page 13] RFC 8530 YANG LNEs March 2019 description "Optionally, indicates the source of the assignment failure."; } } } 7. References 7.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, . [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, October 2010, . [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, . [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, . [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, . [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, . [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration Access Control Model", STD 91, RFC 8341, DOI 10.17487/RFC8341, March 2018, . Berger, et al. Standards Track [Page 14] RFC 8530 YANG LNEs March 2019 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, "Network Management Datastore Architecture (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, . [RFC8343] Bjorklund, M., "A YANG Data Model for Interface Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, . [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, . [RFC8528] Bjorklund, M. and L. Lhotka, "YANG Schema Mount", RFC 8528, DOI 10.17487/RFC8528, March 2019, . 7.2. Informative References [DEVICE-MODEL] Lindem, A., Berger, L., Bogdanovic, D., and C. Hopps, "Network Device YANG Logical Organization", Work in Progress, draft-ietf-rtgwg-device-model-02, March 2017. [OSPF-YANG] Yeung, D., Qu, Y., Zhang, Z., Chen, I., and A. Lindem, "YANG Data Model for OSPF Protocol", Work in Progress, draft-ietf-ospf-yang-21, January 2019. [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for System Management", RFC 7317, DOI 10.17487/RFC7317, August 2014, . [RFC7895] Bierman, A., Bjorklund, M., and K. Watsen, "YANG Module Library", RFC 7895, DOI 10.17487/RFC7895, June 2016, . [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, August 2016, . [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, . Berger, et al. Standards Track [Page 15] RFC 8530 YANG LNEs March 2019 [RFC8348] Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A YANG Data Model for Hardware Management", RFC 8348, DOI 10.17487/RFC8348, March 2018, . [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for Routing Management (NMDA Version)", RFC 8349, DOI 10.17487/RFC8349, March 2018, . [RFC8529] Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. Liu, "YANG Data Model for Network Instances", RFC 8529, DOI 10.17487/RFC8529, March 2019, . Berger, et al. Standards Track [Page 16] RFC 8530 YANG LNEs March 2019 Appendix A. Examples The following subsections provide example uses of LNEs. A.1. Example: Host-Device-Managed LNE This section describes an example of the LNE model using schema mount to achieve the parent management. An example device supports multiple instances of LNEs (logical routers), each of which supports features of Layer 2 and Layer 3 interfaces [RFC8343], a routing information base [RFC8349], and the OSPF protocol [OSPF-YANG]. Each of these features is specified by a YANG model, and they are combined using the YANG schema mount as shown below. Not all possible mounted modules are shown. For example, implementations could also mount the model defined in [RFC8348]. Berger, et al. Standards Track [Page 17] RFC 8530 YANG LNEs March 2019 module: ietf-logical-network-element +--rw logical-network-elements +--rw logical-network-element* [name] +--rw name string +--mp root +--ro yanglib:modules-state/ | +--ro module-set-id string | +--ro module* [name revision] | +--ro name yang:yang-identifier +--rw sys:system/ | +--rw contact? string | +--rw hostname? inet:domain-name | +--rw authentication {authentication}? | +--rw user-authentication-order* identityref | +--rw user* [name] {local-users}? | +--rw name string | +--rw password? ianach:crypt-hash | +--rw authorized-key* [name] | +--rw name string | +--rw algorithm string | +--rw key-data binary +--ro sys:system-state/ | ... +--rw rt:routing/ | +--rw router-id? yang:dotted-quad | +--rw control-plane-protocols | +--rw control-plane-protocol* [type name] | +--rw ospf:ospf/ | +--rw areas | +--rw area* [area-id] | +--rw interfaces | +--rw interface* [name] | +--rw name if:interface-ref | +--rw cost? uint16 +--rw if:interfaces/ +--rw interface* [name] +--rw name string +--rw ip:ipv4!/ | +--rw address* [ip] | ... Berger, et al. Standards Track [Page 18] RFC 8530 YANG LNEs March 2019 module: ietf-interfaces +--rw interfaces +--rw interface* [name] +--rw name string +--rw lne:bind-lne-name? string +--ro oper-status enumeration module: ietf-yang-library +--ro modules-state +--ro module-set-id string +--ro module* [name revision] +--ro name yang:yang-identifier module: ietf-system +--rw system | +--rw contact? string | +--rw hostname? inet:domain-name | +--rw authentication {authentication}? | +--rw user-authentication-order* identityref | +--rw user* [name] {local-users}? | +--rw name string | +--rw password? ianach:crypt-hash | +--rw authorized-key* [name] | +--rw name string | +--rw algorithm string | +--rw key-data binary +--ro system-state +--ro platform | +--ro os-name? string | +--ro os-release? string To realize the above schema, the example device implements the following schema mount instance: "ietf-yang-schema-mount:schema-mounts": { "mount-point": [ { "module": "ietf-logical-network-element", "label": "root", "shared-schema": {} } ] } Berger, et al. Standards Track [Page 19] RFC 8530 YANG LNEs March 2019 By using the implementation of the YANG schema mount, an operator can create instances of logical routers. An interface can be assigned to a logical router, so that the logical router has the permission to access this interface. The OSPF protocol can then be enabled on this assigned interface. For this implementation, a parent management session has access to the schemas of both the parent hosting system and the child logical routers. In addition, each child logical router can grant its own management sessions, which have the following schema: module: ietf-yang-library +--ro modules-state +--ro module-set-id string +--ro module* [name revision] +--ro name yang:yang-identifier module: ietf-system +--rw system | +--rw contact? string | +--rw hostname? inet:domain-name | +--rw authentication {authentication}? | +--rw user-authentication-order* identityref | +--rw user* [name] {local-users}? | +--rw name string | +--rw password? ianach:crypt-hash | +--rw authorized-key* [name] | +--rw name string | +--rw algorithm string | +--rw key-data binary +--ro system-state +--ro platform +--ro os-name? string +--ro os-release? string module: ietf-routing rw-- routing +--rw router-id? yang:dotted-quad +--rw control-plane-protocols +--rw control-plane-protocol* [type name] +--rw ospf:ospf/ +--rw areas +--rw area* [area-id] +--rw interfaces +--rw interface* [name] +--rw name if:interface-ref +--rw cost? uint16 Berger, et al. Standards Track [Page 20] RFC 8530 YANG LNEs March 2019 module: ietf-interfaces +--rw interfaces +--rw interface* [name] +--rw name string +--ro oper-status enumeration A.1.1. Configuration Data The following shows an example where two customer-specific LNEs are configured: { "ietf-logical-network-element:logical-network-elements": { "logical-network-element": [ { "name": "cust1", "root": { "ietf-system:system": { "authentication": { "user": [ { "name": "john", "password": "$0$password" } ] } }, "ietf-routing:routing": { "router-id": "192.0.2.1", "control-plane-protocols": { "control-plane-protocol": [ { "type": "ietf-routing:ospf", "name": "1", "ietf-ospf:ospf": { "af": "ipv4", "areas": { "area": [ { "area-id": "203.0.113.1", "interfaces": { "interface": [ { "name": "eth1", "cost": 10 } ] } Berger, et al. Standards Track [Page 21] RFC 8530 YANG LNEs March 2019 } ] } } } ] } }, "ietf-interfaces:interfaces": { "interface": [ { "name": "eth1", "type": "iana-if-type:ethernetCsmacd", "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.11", "prefix-length": 24 } ] }, "ietf-ip:ipv6": { "address": [ { "ip": "2001:db8:0:2::11", "prefix-length": 64 } ] } } ] } } }, { "name": "cust2", "root": { "ietf-system:system": { "authentication": { "user": [ { "name": "john", "password": "$0$password" } ] } }, "ietf-routing:routing": { Berger, et al. Standards Track [Page 22] RFC 8530 YANG LNEs March 2019 "router-id": "192.0.2.2", "control-plane-protocols": { "control-plane-protocol": [ { "type": "ietf-routing:ospf", "name": "1", "ietf-ospf:ospf": { "af": "ipv4", "areas": { "area": [ { "area-id": "203.0.113.1", "interfaces": { "interface": [ { "name": "eth1", "cost": 10 } ] } } ] } } } ] } }, "ietf-interfaces:interfaces": { "interface": [ { "name": "eth1", "type": "iana-if-type:ethernetCsmacd", "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.11", "prefix-length": 24 } ] } } ] } } } ] }, Berger, et al. Standards Track [Page 23] RFC 8530 YANG LNEs March 2019 "ietf-interfaces:interfaces": { "interface": [ { "name": "eth0", "type": "iana-if-type:ethernetCsmacd", "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.10", "prefix-length": 24 } ] }, "ietf-ip:ipv6": { "address": [ { "ip": "2001:db8:0:2::10", "prefix-length": 64 } ] } }, { "name": "cust1:eth1", "type": "iana-if-type:ethernetCsmacd", "ietf-logical-network-element:bind-lne-name": "cust1" }, { "name": "cust2:eth1", "type": "iana-if-type:ethernetCsmacd", "ietf-logical-network-element:bind-lne-name": "cust2" } ] }, "ietf-system:system": { "authentication": { "user": [ { "name": "root", "password": "$0$password" } ] } } } Berger, et al. Standards Track [Page 24] RFC 8530 YANG LNEs March 2019 A.1.2. State Data The following shows possible state data associated with the above configuration data: { "ietf-logical-network-element:logical-network-elements": { "logical-network-element": [ { "name": "cust1", "root": { "ietf-yang-library:modules-state": { "module-set-id": "123e4567-e89b-12d3-a456-426655440000", "module": [ { "name": "iana-if-type", "revision": "2014-05-08", "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type", "conformance-type": "import" }, { "name": "ietf-inet-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types", "conformance-type": "import" }, { "name": "ietf-interfaces", "revision": "2014-05-08", "feature": [ "arbitrary-names", "pre-provisioning" ], "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces", "conformance-type": "implement" }, { "name": "ietf-ip", "revision": "2014-06-16", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip", "conformance-type": "implement" }, { "name": "ietf-ospf", "revision": "2018-03-03", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ospf", Berger, et al. Standards Track [Page 25] RFC 8530 YANG LNEs March 2019 "conformance-type": "implement" }, { "name": "ietf-routing", "revision": "2018-03-13", "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing", "conformance-type": "implement" }, { "name": "ietf-system", "revision": "2014-08-06", "namespace": "urn:ietf:params:xml:ns:yang:ietf-system", "conformance-type": "implement" }, { "name": "ietf-yang-library", "revision": "2016-06-21", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-library", "conformance-type": "implement" }, { "name": "ietf-yang-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types", "conformance-type": "import" } ] }, "ietf-system:system-state": { "platform": { "os-name": "NetworkOS" } }, "ietf-routing:routing": { "router-id": "192.0.2.1", "control-plane-protocols": { "control-plane-protocol": [ { "type": "ietf-routing:ospf", "name": "1", "ietf-ospf:ospf": { "af": "ipv4", "areas": { "area": [ { "area-id": "203.0.113.1", Berger, et al. Standards Track [Page 26] RFC 8530 YANG LNEs March 2019 "interfaces": { "interface": [ { "name": "eth1", "cost": 10 } ] } } ] } } } ] } }, "ietf-interfaces:interfaces": { "interface": [ { "name": "eth1", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C1", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.11", "prefix-length": 24 } ] }, "ietf-ip:ipv6": { "address": [ { "ip": "2001:db8:0:2::11", "prefix-length": 64 } ] } } ] } } }, { Berger, et al. Standards Track [Page 27] RFC 8530 YANG LNEs March 2019 "name": "cust2", "root": { "ietf-yang-library:modules-state": { "module-set-id": "123e4567-e89b-12d3-a456-426655440000", "module": [ { "name": "iana-if-type", "revision": "2014-05-08", "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type", "conformance-type": "import" }, { "name": "ietf-inet-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types", "conformance-type": "import" }, { "name": "ietf-interfaces", "revision": "2014-05-08", "feature": [ "arbitrary-names", "pre-provisioning" ], "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces", "conformance-type": "implement" }, { "name": "ietf-ip", "revision": "2014-06-16", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip", "conformance-type": "implement" }, { "name": "ietf-ospf", "revision": "2018-03-03", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ospf", "conformance-type": "implement" }, { "name": "ietf-routing", "revision": "2018-03-13", "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing", "conformance-type": "implement" }, { Berger, et al. Standards Track [Page 28] RFC 8530 YANG LNEs March 2019 "name": "ietf-system", "revision": "2014-08-06", "namespace": "urn:ietf:params:xml:ns:yang:ietf-system", "conformance-type": "implement" }, { "name": "ietf-yang-library", "revision": "2016-06-21", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-library", "conformance-type": "implement" }, { "name": "ietf-yang-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types", "conformance-type": "import" } ] }, "ietf-system:system-state": { "platform": { "os-name": "NetworkOS" } }, "ietf-routing:routing": { "router-id": "192.0.2.2", "control-plane-protocols": { "control-plane-protocol": [ { "type": "ietf-routing:ospf", "name": "1", "ietf-ospf:ospf": { "af": "ipv4", "areas": { "area": [ { "area-id": "203.0.113.1", "interfaces": { "interface": [ { "name": "eth1", "cost": 10 } ] } } Berger, et al. Standards Track [Page 29] RFC 8530 YANG LNEs March 2019 ] } } } ] } }, "ietf-interfaces:interfaces": { "interface": [ { "name": "eth1", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C2", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.11", "prefix-length": 24 } ] } } ] } } } ] }, "ietf-interfaces:interfaces": { "interface": [ { "name": "eth0", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C0", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.10", "prefix-length": 24 Berger, et al. Standards Track [Page 30] RFC 8530 YANG LNEs March 2019 } ] }, "ietf-ip:ipv6": { "address": [ { "ip": "2001:db8:0:2::10", "prefix-length": 64 } ] } }, { "name": "cust1:eth1", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C1", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-logical-network-element:bind-lne-name": "cust1" }, { "name": "cust2:eth1", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C2", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-logical-network-element:bind-lne-name": "cust2" } ] }, "ietf-system:system-state": { "platform": { "os-name": "NetworkOS" } }, "ietf-yang-library:modules-state": { "module-set-id": "123e4567-e89b-12d3-a456-426655440000", "module": [ { "name": "iana-if-type", "revision": "2014-05-08", "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type", Berger, et al. Standards Track [Page 31] RFC 8530 YANG LNEs March 2019 "conformance-type": "import" }, { "name": "ietf-inet-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types", "conformance-type": "import" }, { "name": "ietf-interfaces", "revision": "2014-05-08", "feature": [ "arbitrary-names", "pre-provisioning" ], "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces", "conformance-type": "implement" }, { "name": "ietf-ip", "revision": "2014-06-16", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip", "conformance-type": "implement" }, { "name": "ietf-logical-network-element", "revision": "2017-03-13", "feature": [ "bind-lne-name" ], "namespace": "urn:ietf:params:xml:ns:yang:ietf-logical-network-element", "conformance-type": "implement" }, { "name": "ietf-ospf", "revision": "2018-03-03", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ospf", "conformance-type": "implement" }, { "name": "ietf-routing", "revision": "2018-03-13", "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing", "conformance-type": "implement" }, { "name": "ietf-system", Berger, et al. Standards Track [Page 32] RFC 8530 YANG LNEs March 2019 "revision": "2014-08-06", "namespace": "urn:ietf:params:xml:ns:yang:ietf-system", "conformance-type": "implement" }, { "name": "ietf-yang-library", "revision": "2016-06-21", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-library", "conformance-type": "implement" }, { "name": "ietf-yang-schema-mount", "revision": "2017-05-16", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount", "conformance-type": "implement" }, { "name": "ietf-yang-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types", "conformance-type": "import" } ] }, "ietf-yang-schema-mount:schema-mounts": { "mount-point": [ { "module": "ietf-logical-network-element", "label": "root", "shared-schema": {} } ] } } A.2. Example: Self-Managed LNE This section describes an example of the LNE model using schema mount to achieve child-independent management. An example device supports multiple instances of LNEs (logical routers), each of which has the features of Layer 2 and Layer 3 interfaces [RFC8343], a routing information base [RFC8349], and the OSPF protocol. Each of these features is specified by a YANG model, and they are put together by the YANG schema mount as follows: Berger, et al. Standards Track [Page 33] RFC 8530 YANG LNEs March 2019 module: ietf-logical-network-element +--rw logical-network-elements +--rw logical-network-element* [name] +--rw name string +--mp root // The internal modules of the LNE are not visible to // the parent management. // The child manages its modules, including ietf-routing // and ietf-interfaces module: ietf-interfaces +--rw interfaces +--rw interface* [name] +--rw name string +--rw lne:bind-lne-name? string +--ro oper-status enumeration module: ietf-yang-library +--ro modules-state +--ro module-set-id string +--ro module* [name revision] +--ro name yang:yang-identifier module: ietf-system +--rw system | +--rw contact? string | +--rw hostname? inet:domain-name | +--rw authentication {authentication}? | +--rw user-authentication-order* identityref | +--rw user* [name] {local-users}? | +--rw name string | +--rw password? ianach:crypt-hash | +--rw authorized-key* [name] | +--rw name string | +--rw algorithm string | +--rw key-data binary +--ro system-state +--ro platform | +--ro os-name? string | +--ro os-release? string Berger, et al. Standards Track [Page 34] RFC 8530 YANG LNEs March 2019 To realize the above schema, the device implements the following schema mount instance: "ietf-yang-schema-mount:schema-mounts": { "mount-point": [ { "module": "ietf-logical-network-element", "label": "root", "inline": {} } ] } By using the implementation of the YANG schema mount, an operator can create instances of logical routers, each with their logical router- specific inline modules. An interface can be assigned to a logical router, so that the logical router has the permission to access this interface. The OSPF protocol can then be enabled on this assigned interface. Each logical router independently manages its own set of modules, which may or may not be the same as other logical routers. The following is an example of schema set implemented on one particular logical router: Berger, et al. Standards Track [Page 35] RFC 8530 YANG LNEs March 2019 module: ietf-yang-library +--ro modules-state +--ro module-set-id string +--ro module* [name revision] +--ro name yang:yang-identifier module: ietf-system +--rw system | +--rw contact? string | +--rw hostname? inet:domain-name | +--rw authentication {authentication}? | +--rw user-authentication-order* identityref | +--rw user* [name] {local-users}? | +--rw name string | +--rw password? ianach:crypt-hash | +--rw authorized-key* [name] | +--rw name string | +--rw algorithm string | +--rw key-data binary +--ro system-state +--ro platform | +--ro os-name? string | +--ro os-release? string module: ietf-routing +--rw routing +--rw router-id? yang:dotted-quad +--rw control-plane-protocols +--rw control-plane-protocol* [type name] +--rw ospf:ospf/ +--rw areas +--rw area* [area-id] +--rw interfaces +--rw interface* [name] +--rw name if:interface-ref +--rw cost? uint16 module: ietf-interfaces +--rw interfaces +--rw interface* [name] +--rw name string +--ro oper-status enumeration A.2.1. Configuration Data Each of the child virtual routers is managed through its own sessions and configuration data. Berger, et al. Standards Track [Page 36] RFC 8530 YANG LNEs March 2019 A.2.1.1. Logical Network Element 'vnf1' The following shows an example of configuration data for the LNE name "vnf1": { "ietf-system:system": { "authentication": { "user": [ { "name": "john", "password": "$0$password" } ] } }, "ietf-routing:routing": { "router-id": "192.0.2.1", "control-plane-protocols": { "control-plane-protocol": [ { "type": "ietf-routing:ospf", "name": "1", "ietf-ospf:ospf": { "af": "ipv4", "areas": { "area": [ { "area-id": "203.0.113.1", "interfaces": { "interface": [ { "name": "eth1", "cost": 10 } ] } } ] } } } ] } }, "ietf-interfaces:interfaces": { "interface": [ { Berger, et al. Standards Track [Page 37] RFC 8530 YANG LNEs March 2019 "name": "eth1", "type": "iana-if-type:ethernetCsmacd", "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.11", "prefix-length": 24 } ] } } ] } } A.2.1.2. Logical Network Element 'vnf2' The following shows an example of configuration data for the LNE name "vnf2": { "ietf-system:system": { "authentication": { "user": [ { "name": "john", "password": "$0$password" } ] } }, "ietf-routing:routing": { "router-id": "192.0.2.2", "control-plane-protocols": { "control-plane-protocol": [ { "type": "ietf-routing:ospf", "name": "1", "ietf-ospf:ospf": { "af": "ipv4", "areas": { "area": [ { "area-id": "203.0.113.1", "interfaces": { "interface": [ { "name": "eth1", Berger, et al. Standards Track [Page 38] RFC 8530 YANG LNEs March 2019 "cost": 10 } ] } } ] } } } ] } }, "ietf-interfaces:interfaces": { "interface": [ { "name": "eth1", "type": "iana-if-type:ethernetCsmacd", "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.11", "prefix-length": 24 } ] } } ] } } A.2.2. State Data The following sections show possible state data associated with the above configuration data. Note that there are three views: the host device's view and each of the LNE's views. A.2.2.1. Host Device The following shows state data for the device hosting the example LNEs: { "ietf-logical-network-element:logical-network-elements": { "logical-network-element": [ { "name": "vnf1", "root": { } Berger, et al. Standards Track [Page 39] RFC 8530 YANG LNEs March 2019 }, { "name": "vnf2", "root": { } } ] }, "ietf-interfaces:interfaces": { "interface": [ { "name": "eth0", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C0", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.10", "prefix-length": 24 } ] } }, { "name": "vnf1:eth1", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C1", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-logical-network-element:bind-lne-name": "vnf1" }, { "name": "vnf2:eth2", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C2", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-logical-network-element:bind-lne-name": "vnf2" } Berger, et al. Standards Track [Page 40] RFC 8530 YANG LNEs March 2019 ] }, "ietf-system:system-state": { "platform": { "os-name": "NetworkOS" } }, "ietf-yang-library:modules-state": { "module-set-id": "123e4567-e89b-12d3-a456-426655440000", "module": [ { "name": "iana-if-type", "revision": "2014-05-08", "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type", "conformance-type": "import" }, { "name": "ietf-inet-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types", "conformance-type": "import" }, { "name": "ietf-interfaces", "revision": "2014-05-08", "feature": [ "arbitrary-names", "pre-provisioning" ], "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces", "conformance-type": "implement" }, { "name": "ietf-ip", "revision": "2014-06-16", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip", "conformance-type": "implement" }, { "name": "ietf-logical-network-element", "revision": "2017-03-13", "feature": [ "bind-lne-name" ], "namespace": "urn:ietf:params:xml:ns:yang:ietf-logical-network-element", Berger, et al. Standards Track [Page 41] RFC 8530 YANG LNEs March 2019 "conformance-type": "implement" }, { "name": "ietf-system", "revision": "2014-08-06", "namespace": "urn:ietf:params:xml:ns:yang:ietf-system", "conformance-type": "implement" }, { "name": "ietf-yang-library", "revision": "2016-06-21", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-library", "conformance-type": "implement" }, { "name": "ietf-yang-schema-mount", "revision": "2017-05-16", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount", "conformance-type": "implement" }, { "name": "ietf-yang-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types", "conformance-type": "import" } ] }, "ietf-yang-schema-mount:schema-mounts": { "mount-point": [ { "module": "ietf-logical-network-element", "label": "root", "inline": {} } ] } } Berger, et al. Standards Track [Page 42] RFC 8530 YANG LNEs March 2019 A.2.2.2. Logical Network Element 'vnf1' The following shows state data for the example LNE with the name "vnf1": { "ietf-yang-library:modules-state": { "module-set-id": "123e4567-e89b-12d3-a456-426655440000", "module": [ { "name": "iana-if-type", "revision": "2014-05-08", "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type", "conformance-type": "import" }, { "name": "ietf-inet-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types", "conformance-type": "import" }, { "name": "ietf-interfaces", "revision": "2014-05-08", "feature": [ "arbitrary-names", "pre-provisioning" ], "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces", "conformance-type": "implement" }, { "name": "ietf-ip", "revision": "2014-06-16", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip", "conformance-type": "implement" }, { "name": "ietf-ospf", "revision": "2018-03-03", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ospf", "conformance-type": "implement" }, { "name": "ietf-routing", "revision": "2018-03-13", "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing", "conformance-type": "implement" Berger, et al. Standards Track [Page 43] RFC 8530 YANG LNEs March 2019 }, { "name": "ietf-system", "revision": "2014-08-06", "namespace": "urn:ietf:params:xml:ns:yang:ietf-system", "conformance-type": "implement" }, { "name": "ietf-yang-library", "revision": "2016-06-21", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-library", "conformance-type": "implement" }, { "name": "ietf-yang-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types", "conformance-type": "import" } ] }, "ietf-system:system-state": { "platform": { "os-name": "NetworkOS" } }, "ietf-routing:routing": { "router-id": "192.0.2.1", "control-plane-protocols": { "control-plane-protocol": [ { "type": "ietf-routing:ospf", "name": "1", "ietf-ospf:ospf": { "af": "ipv4", "areas": { "area": [ { "area-id": "203.0.113.1", "interfaces": { "interface": [ { "name": "eth1", "cost": 10 } ] Berger, et al. Standards Track [Page 44] RFC 8530 YANG LNEs March 2019 } } ] } } } ] } }, "ietf-interfaces:interfaces": { "interface": [ { "name": "eth1", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C1", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.11", "prefix-length": 24 } ] } } ] } } A.2.2.3. Logical Network Element 'vnf2' The following shows state data for the example LNE with the name "vnf2": { "ietf-yang-library:modules-state": { "module-set-id": "123e4567-e89b-12d3-a456-426655440000", "module": [ { "name": "iana-if-type", "revision": "2014-05-08", "namespace": "urn:ietf:params:xml:ns:yang:iana-if-type", "conformance-type": "import" }, Berger, et al. Standards Track [Page 45] RFC 8530 YANG LNEs March 2019 { "name": "ietf-inet-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-inet-types", "conformance-type": "import" }, { "name": "ietf-interfaces", "revision": "2014-05-08", "feature": [ "arbitrary-names", "pre-provisioning" ], "namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces", "conformance-type": "implement" }, { "name": "ietf-ip", "revision": "2014-06-16", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ip", "conformance-type": "implement" }, { "name": "ietf-ospf", "revision": "2018-03-03", "namespace": "urn:ietf:params:xml:ns:yang:ietf-ospf", "conformance-type": "implement" }, { "name": "ietf-routing", "revision": "2018-03-13", "namespace": "urn:ietf:params:xml:ns:yang:ietf-routing", "conformance-type": "implement" }, { "name": "ietf-system", "revision": "2014-08-06", "namespace": "urn:ietf:params:xml:ns:yang:ietf-system", "conformance-type": "implement" }, { "name": "ietf-yang-library", "revision": "2016-06-21", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-library", "conformance-type": "implement" }, Berger, et al. Standards Track [Page 46] RFC 8530 YANG LNEs March 2019 { "name": "ietf-yang-types", "revision": "2013-07-15", "namespace": "urn:ietf:params:xml:ns:yang:ietf-yang-types", "conformance-type": "import" } ] }, "ietf-system:system-state": { "platform": { "os-name": "NetworkOS" } }, "ietf-routing:routing": { "router-id": "192.0.2.2", "control-plane-protocols": { "control-plane-protocol": [ { "type": "ietf-routing:ospf", "name": "1", "ietf-ospf:ospf": { "af": "ipv4", "areas": { "area": [ { "area-id": "203.0.113.1", "interfaces": { "interface": [ { "name": "eth1", "cost": 10 } ] } } ] } } } ] } }, Berger, et al. Standards Track [Page 47] RFC 8530 YANG LNEs March 2019 "ietf-interfaces:interfaces": { "interface": [ { "name": "eth1", "type": "iana-if-type:ethernetCsmacd", "oper-status": "up", "phys-address": "00:01:02:A1:B1:C2", "statistics": { "discontinuity-time": "2017-06-26T12:34:56-05:00" }, "ietf-ip:ipv4": { "address": [ { "ip": "192.0.2.11", "prefix-length": 24 } ] } } ] } } Berger, et al. Standards Track [Page 48] RFC 8530 YANG LNEs March 2019 Acknowledgments The Routing Area Yang Architecture design team members included Acee Lindem, Anees Shaikh, Christian Hopps, Dean Bogdanovic, Lou Berger, Qin Wu, Rob Shakir, Stephane Litkowski, and Yan Gang. Useful review comments were also received by Martin Bjorklund, John Scudder, Dan Romascanu, and Taylor Yu. This document was motivated by, and derived from "Network Device YANG Logical Organization" [DEVICE-MODEL]. Thanks to Alvaro Retana for the IESG review. Authors' Addresses Lou Berger LabN Consulting, L.L.C. Email: lberger@labn.net Christian Hopps LabN Consulting, L.L.C. Email: chopps@chopps.org Acee Lindem Cisco Systems 301 Midenhall Way Cary, NC 27513 United States of America Email: acee@cisco.com Dean Bogdanovic Volta Networks Email: ivandean@gmail.com Xufeng Liu Volta Networks Email: xufeng.liu.ietf@gmail.com Berger, et al. Standards Track [Page 49]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4