RFC 9418: A YANG Data Model for Service Assurance
- B. Claise,
- J. Quilbeuf,
- P. Lucente,
- P. Fasano,
- T. Arumugam
Abstract
This document specifies YANG modules for representing assurance graphs. These graphs represent the assurance of a given service by decomposing it into atomic assurance elements called subservices. The companion document, "Service Assurance for Intent-Based Networking Architecture" (RFC 9417), presents an architecture for implementing the assurance of such services.¶
The YANG data models in this document conform to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.¶
Status of This Memo
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
https://
Copyright Notice
Copyright (c) 2023 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://
1. Introduction
[RFC9417] describes an architecture and a set of involved components for service assurance, called Service Assurance for Intent-based Networking (SAIN). This document complements the architecture by specifying a data model for the interfaces between components. More specifically, the document provides YANG modules for the purpose of service assurance in a format that is:¶
1.1. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "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.¶
The terms used in this document are defined in [RFC9417].¶
The meanings of the symbols in the tree diagrams are defined in [RFC8340].¶
2. YANG Modules Overview
The main YANG module, "ietf
The module is also intended to be exported by the SAIN collector that aggregates the output of several SAIN agents to provide the global assurance graph. In that case, only the telemetry export use case is considered.¶
The modules presented in this document conform to the Network Management Datastore Architecture (NMDA) defined in [RFC8342].¶
The second YANG module, "ietf
The third YANG module, "ietf
We provide additional examples in the appendix.
The module "example
3. Base IETF Service Assurance YANG Module
3.1. Concepts
The "ietf
An instance of the device subservice is representing a subpart of the network system, namely a specific device. An instance of the ip-connectivity subservice is representing a feature of the network, namely the connectivity between two specific IP addresses on two devices. In both cases, these subservices might depend on other subservices, for instance, the connectivity might depend on a subservice representing the routing system and on a subservice representing ECMPs.¶
The two example subservices presented above need different sets of parameters to fully characterize one of their instances. An instance of the device subservice is fully characterized by a single parameter allowing to identify the device to monitor. For the ip-connectivity subservice, at least the device and IP address for both ends of the link are needed to fully characterize an instance.¶
The base model presented in this section specifies a single type of subservice, which represents service instances.
Such nodes play a particular role in the assurance graph because they represent the starting point, or root, for the assurance graph of the corresponding service instance.
The parameters required to fully identify a service instance are the name of the service and the name of the service instance.
To support other types of subservices, such as device or ip
The dependencies are modeled as a list, i.e., each subservice contains a list of references to its dependencies. That list can be empty if the subservice instance does not have any dependencies.¶
By specifying service instances and their dependencies in terms of subservices, one defines a global assurance graph. That assurance graph is the result of merging all the individual assurance graphs for the assured service instances. Each subservice instance is expected to appear only once in the global assurance graph even if several service instances depend on it. For example, an instance of the device subservice is a dependency of every service instance that relies on the corresponding device. The assurance graph of a specific service instance is the subgraph obtained by traversing the global assurance graph through the dependencies, starting from the specific service instance.¶
An assurance agent configured with such a graph is expected to produce, for each configured subservice, a health status that indicates how healthy the subservice is. If the subservice is not healthy, the agent is expected to produce a list of symptoms explaining why the subservice is not healthy.¶
3.2. Tree View
The following tree diagram [RFC8340]
provides an overview of the "ietf
The date of the last change in "assurance
The "subservices" list contains all the subservice instances currently known by the server (i.e., SAIN agent or SAIN collector). A subservice declaration MUST provide the following:¶
The type and id uniquely identify a given subservice.¶
The "last-change" indicates when the dependencies or maintenance status of this particular subservice were last modified.¶
The "label" is a human-readable description of the subservice.¶
The presence of the "under
The "parameter" choice is intended to be augmented in order to describe parameters that are specific to the current subservice type.
This base module defines only the subservice type representing service instances.
Service instances MUST be modeled as a particular type of subservice with two parameters: "service" and "instance
The "health-score" contains a value normally between 0 and 100, indicating how healthy the subservice is. As mentioned in the health score definition, the special value -1 can be used to specify that no value could be computed for that health score, for instance, if some metric needed for that computation could not be collected.¶
The "symptoms
The status of each subservice contains a list of symptoms. Each symptom is specified by:¶
In order for the pair "agent-id" and "symptom-id" to uniquely identify a symptom, the following is necessary:¶
Note that "agent-id" and "symptom-id" are leafrefs pointing to the objects defined later in the document.
While the combination of "symptom-id" and "agent-id" is sufficient as a unique key list, the "start
The "dependency" list contains the dependencies for the current subservice.
Each of them is specified by a leafref to both "type" and "id" of the target dependencies.
A dependency has a type indicated in the "dependency
To illustrate the difference between "impacting" and "informational"
Within the container "agents", the list "agent" contains the list of symptoms per agent.
The key of the list is the "id", which MUST be unique among agents of a given assurance system.
For each agent, the list "symptoms
Within the container "assured
The relation between the health score
Keeping the history of the graph structure is out of scope for this YANG module. Only the current version of the assurance graph can be fetched. In order to keep the history of the graph structure, some time-series database (TSDB) or similar storage must be used.¶
3.4. Rejecting Circular Dependencies
The statuses of services and subservices depend on the statuses of their dependencies, and thus circular dependencies between them prevent the computation of statuses.
Section 3.1.1 of the SAIN architecture document [RFC9417] discusses how such dependencies appear and how they could be removed.
The responsibility of avoiding such dependencies falls to the SAIN orchestrator.
However, we specify in this section the expected behavior when a server supporting the "ietf
Enforcing the absence of circular dependencies as a YANG constraint falls back to implementing a graph traversal algorithm with XPath and checking that the current node is not reachable from its dependencies. Even with such a constraint, there is no guarantee that merging two graphs without dependency loops will result in a graph without dependency loops. Indeed, Section 3.1.1 of [RFC9417] presents an example where merging two graphs without dependency loops results in a graph with a dependency loop.¶
Therefore, a server implementing the "ietf
4. Guidelines for Defining New Subservice Types
The base YANG module defined in Section 3.3 only defines a single type of subservice that represent service instances. As explained above, this model is meant to be augmented so that a variety of subservices can be used in the assurance graph. In this section, we propose some guidelines for specifying such extensions at IETF.¶
The mechanism to add a new subservice type is to define a new module for that subservice.
The module name should start with "ietf
The new module should define:¶
The new identity should be based on the "subservice
The parameters should be defined in a container named "parameters" that augments the choice "
We define two subservice types in the next sections: the "device" subservice type is defined in Section 5 and the "interface" subservice type is defined is Section 6. These subservices can be taken as examples of the rules defined in this section.¶
Vendors can specify their own subservices types by defining the corresponding modules in their own namespace. An example of such a vendor-specific module is specified in Appendix A. Vendors can also augment existing IETF-specified subservices to add their own vendor-specific information.¶
5. Subservice Augmentation: "ietf-service-assurance-device" YANG Module
5.1. Tree View
The following tree diagram [RFC8340]
provides an overview of the "ietf
A complete tree view of the base module with all augmenting modules presented in this document is available in Appendix B.3.¶
5.2. Concepts
As the number of subservices will grow over time, the YANG module is designed to be extensible. A new subservice type requires the precise specifications of its type and expected parameters. Let us illustrate the example of the new device subservice type. As the name implies, it monitors and reports the device health, along with some symptoms in case of degradation.¶
For our device subservice definition, the new identity "device-type" is specified as an inheritance from the base identity for subservices. This indicates to the assurance agent that we are now assuring the health of a device.¶
The typical parameter for the configuration of the device subservice is the name of the device that we want to assure.
By augmenting the parameter choice from the "ietf
6. Subservice Augmentation: "ietf-service-assurance-interface" YANG Module
6.1. Tree View
The following tree diagram [RFC8340]
provides an overview of the "ietf
A complete tree view of the base module with all augmenting modules presented in this document is available in Appendix B.3.¶
6.2. Concepts
For the interface subservice definition, the new interface-type is specified as an inheritance from the base identity for subservices. This indicates to the assurance agent that we are now assuring the health of an interface.¶
The parameters for the configuration of the interface subservice are the name of the device and, on that specific device, a specific interface.
These parameters are aligned with the "ietf
7. Security Considerations
The YANG modules specified in this document define schema for data
that is designed to be accessed via network management protocols such
as NETCONF [RFC6241] or RESTCONF [RFC8040].
The lowest NETCONF layer is the secure transport layer, and the mandatory
The Network Configuration Access Control Model (NACM) [RFC8341] provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.¶
There are a number of data nodes defined in these YANG modules that are writable
Some readable data nodes in these YANG modules may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. These are the subtrees and data nodes and their sensitivity
Each of these subtrees contains information about services, subservices, or possible symptoms raised by the agents. The information contained in this subtree might give information about the underlying network as well as services deployed for the customers. For instance, a customer might be given access to monitor their services status (e.g., via model-driven telemetry). In that example, the customer access should be restricted to nodes representing their services so as not to divulge information about the underlying network structure or others customers services.¶
8. IANA Considerations
8.1. The IETF XML Registry
IANA has registered the following three URIs in the "IETF XML Registry" [RFC3688]:¶
- URI:
- urn
:ietf :params :xml :ns :yang :ietf -service -assurance¶ - Registrant Contact:
- The OPSAWG WG of the IETF.¶
- XML:
- N/A; the requested URI is an XML namespace.¶
8.2. The YANG Module Names Registry
IANA has registered the following three YANG modules in the "YANG Module Names" registry [RFC7950]:¶
- name:
- ietf
-service -assurance¶ - namespace:
- urn
:ietf :params :xml :ns :yang :ietf -service -assurance¶ - prefix:
- sain¶
- reference:
- RFC 9418¶
- name:
- ietf
-service -assurance -device¶ - namespace:
- urn
:ietf :params :xml :ns :yang :ietf -service -assurance -device¶ - prefix:
- sain-device¶
- reference:
- RFC 9418¶
- name:
- ietf
-service -assurance -interface¶ - namespace:
- urn
:ietf :params :xml :ns :yang :ietf -service -assurance -interface¶ - prefix:
- sain-interface¶
- reference:
- RFC 9418¶
These modules are not maintained by IANA.¶
9. References
9.1. Normative References
- [RFC2119]
-
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10
.17487 , , <https:///RFC2119 www >..rfc -editor .org /info /rfc2119 - [RFC3688]
-
Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10
.17487 , , <https:///RFC3688 www >..rfc -editor .org /info /rfc3688 - [RFC6241]
-
Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10
.17487 , , <https:///RFC6241 www >..rfc -editor .org /info /rfc6241 - [RFC6242]
-
Wasserman, M., "Using the NETCONF Protocol over Secure Shell (SSH)", RFC 6242, DOI 10
.17487 , , <https:///RFC6242 www >..rfc -editor .org /info /rfc6242 - [RFC6991]
-
Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, DOI 10
.17487 , , <https:///RFC6991 www >..rfc -editor .org /info /rfc6991 - [RFC7950]
-
Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10
.17487 , , <https:///RFC7950 www >..rfc -editor .org /info /rfc7950 - [RFC8040]
-
Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10
.17487 , , <https:///RFC8040 www >..rfc -editor .org /info /rfc8040 - [RFC8174]
-
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10
.17487 , , <https:///RFC8174 www >..rfc -editor .org /info /rfc8174 - [RFC8341]
-
Bierman, A. and M. Bjorklund, "Network Configuration Access Control Model", STD 91, RFC 8341, DOI 10
.17487 , , <https:///RFC8341 www >..rfc -editor .org /info /rfc8341 - [RFC8342]
-
Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, "Network Management Datastore Architecture (NMDA)", RFC 8342, DOI 10
.17487 , , <https:///RFC8342 www >..rfc -editor .org /info /rfc8342 - [RFC8446]
-
Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10
.17487 , , <https:///RFC8446 www >..rfc -editor .org /info /rfc8446 - [RFC9417]
-
Claise, B., Quilbeuf, J., Lopez, D., Voyer, D., and T. Arumugam, "Service Assurance for Intent-Based Networking Architecture", RFC 9417, DOI 10
.17487 , , <https:///RFC9417 www >..rfc -editor .org /info /rfc9417
9.2. Informative References
- [RFC8340]
-
Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10
.17487 , , <https:///RFC8340 www >..rfc -editor .org /info /rfc8340 - [RFC8343]
-
Bjorklund, M., "A YANG Data Model for Interface Management", RFC 8343, DOI 10
.17487 , , <https:///RFC8343 www >..rfc -editor .org /info /rfc8343 - [RFC8525]
-
Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., and R. Wilton, "YANG Library", RFC 8525, DOI 10
.17487 , , <https:///RFC8525 www >..rfc -editor .org /info /rfc8525
Appendix A. Vendor-Specific Subservice Augmentation: "example-service-assurance-device-acme" YANG Module
A.1. Tree View
The following tree diagram [RFC8340]
provides an overview of the "example
A complete tree view of the base module with all augmenting modules presented in this document is available in Appendix B.3.¶
A.2. Concepts
Under some circumstances, vendor-specific subservice types might be required.
As an example of this vendor-specific implementation, this section shows how to augment the "ietf
Appendix B. Further Augmentations: IP Connectivity and IS-IS Subservices
In this section, we provide two additional YANG modules to completely cover the example in Figure 2 from Section 3.1 of [RFC9417]. The two missing subservice types are IP connectivity and the Intermediate System to Intermediate System (IS-IS) routing protocol. These modules are presented as examples; some future work is needed to propose a more complete version.¶
B.1. IP Connectivity Module Tree View
That subservice represents the unicast connectivity between two IP addresses located on two different devices.
Such a subservice could report symptoms such as "No route found".
The following tree diagram [RFC8340] provides an overview of the "example
To specify the connectivity that we are interested in, we specify two IP addresses and two devices. The subservice assures that the connectivity between IP address 1 on device 1 and IP address 2 on device 2 is healthy.¶
B.2. IS-IS Module Tree View
The following tree diagram [RFC8340] provides an overview of the "example
The parameter of this subservice is the name of the IS-IS instance to assure.¶
B.3. Global Tree View
The following tree diagram [RFC8340]
provides an overview of the "ietf
B.4. IP Connectivity YANG Module
B.5. IS-IS YANG Module
Appendix C. Example of a YANG Instance
This section contains an example of a YANG instance that conforms to the YANG modules.
The validity of this data instance has been checked using yangson.
Yangson requires a YANG library [RFC8525] to define the complete model against which the data instance must be validated.
In Appendix D, we provide the JSON library file named "ietf
Below, we provide the contents of the file "example
Appendix D. YANG Library for Service Assurance
This section provides the JSON encoding of the YANG library [RFC8525] that lists all modules defined in this document and their dependencies. This library can be used to validate data instances using yangson, as explained in the previous section.¶
Acknowledgements
The authors would like to thank Jan Lindblad for his help during the design of these YANG modules. The authors would like to thank Stephane Litkowski, Charles Eckel, Mohamed Boucadair, Tom Petch, Dhruv Dhody, and Rob Wilton for their reviews.¶