TOC 
Internet Engineering Task ForceR. Cole
Internet-DraftJohns Hopkins University
Intended status: InformationalD. Romascanu
Expires: September 3, 2010Avaya
 A. Bierman
 InterWorking Labs
 March 02, 2010


Robust Configuration Management within NETCONF
draft-cole-netconf-robust-config-02

Abstract

This document extends the capabilities of the NETCONF configuration management protocol in order to standardize mechanisms to perform sets of active tests (i.e., verification) against servers' running configuration over a period of time to afford the client and server a more robust and resilient configuration management capability. This is of value to commercial enterprise and public networks as well as wireless emergency and military networks. We accomplish this through the definition of the new verify.yang module. Servers supporting this module will advertise this capability according to the YANG specification. We also explore the future alternatives for developing these capabilities within the context of the existing NETCONF protocol, the YANG modeling language and existing related IETF, IEEE and ITU-T standards.

Status of this Memo

This Internet-Draft is submitted to IETF in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as “work in progress.”

The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt.

The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html.

This Internet-Draft will expire on September 3, 2010.

Copyright Notice

Copyright (c) 2010 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 (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the BSD License.



Table of Contents

1.  Introduction
    1.1.  Benefits of This Work
    1.2.  Requirements Language
    1.3.  Outline
2.  Definitions
3.  The Verify Mechanisms
    3.1.  Verify Tests
        3.1.1.  Overview
        3.1.2.  Dependencies
        3.1.3.  Capability Identifier
        3.1.4.  New Operations
            3.1.4.1.  <verify>
            3.1.4.2.  <cancel-verify>
            3.1.4.3.  <complete-verify>
            3.1.4.4.  <verifyStatus>
            3.1.4.5.  <verifyComplete>
        3.1.5.  Modifications to Existing Operations
4.  Framework
    4.1.  Test Modules
    4.2.  Use Cases
5.  Acknowledgements
6.  IANA Considerations
7.  Security Considerations
8.  References
    8.1.  Normative References
    8.2.  Informative References
Appendix A.  verify.yang Module
Appendix B.  Example ping.yang Module
Appendix C.  Motivational Cases
    C.1.  Case A: MANET
    C.2.  Case B: IpTables
    C.3.  Case C: DTN
    C.4.  Case D: Dual Homing
Appendix D.  Network-wide Upgrades
Appendix E.  Existing Capabilities
    E.1.  NETCONF Capabilities
    E.2.  YANG Capabilities
    E.3.  RMON Capabilities
    E.4.  OAM for Carrier Class Ethernet
    E.5.  OAM for MPLS Services
    E.6.  Active Tests for Performance Monitoring
§  Authors' Addresses




 TOC 

1.  Introduction

This document defines a new verify.yang module to achieve a more robust model of configuration management for future IETF systems. Most network management systems which are required to provide a highly robust network service rely upon some form of out-of-band access for configuration management. This provides an alternative management entry into devices in the event that in-band access is unavailable due to mis-configuration. However, not all network deployments can afford the luxury of alternative networks for management access to all networking devices, nor should this be necessary. Examples include Mobile Ad-Hoc Wireless Networks (MANETs) and other forms of Disruption Tolerant Networks (DTNs). All managed networks, as well, would benefit from a more robust and extensive configuration management capability from the IETF, e.g., to provide equivalent network reliability at reduced infrastructure costs. Towards this goal, we define a new verify.yang module to manage active tests and assess success, i.e., verification, (from both the client and the servers) involving server-side running configuration. Servers supporting this module will advertise this capability according to the YANG specification YANG (Bjorklund, M., “YANG - A data modeling language for NETCONF,” February 2010.) [YANG].

As an example, we envision a NETCONF [RFC4741] (Enns, R., “NETCONF Configuration Protocol,” December 2006.) client-server interaction model shown in the below figure. Here, the client issues a <commit> operation with the confirming option. As part of testing prior to issuing the confirming <commit> the client wishes to execute a set of verification tests from the server. It issues the new <verify> operation to manage this aspect of verification testing. The client passes a reference to the server indicating instances of specific pre-configured test sets that define the verification test suite. The server executes these as part of the NETCONF <verify> testing process. Simultaneously, the client may also run a set of tests to gain confidence in the proposed configuration changes to the server. Once the server completes its test execution, it indicates success through notification messages. Once the client is comfortable with its own tests and those of the server, it issues the confirming <commit> to the server which forces the server to commit to the proposed configuration change.



   Client                                Server
   ------                                ------

         +------------------------------>
          Sets up <candidate> config

         +------------------------------>
          Sets up test control

---      +------------------------------>
 |        Sends <commit>
(set             - timeout
 timeout)        - confirm option
 |
 |
 |       +------------------------------>
 |        Sends <verify>
 |               - timeout
 |               - test-template:instanceIDs
 |
(running                                  (running
 client-side                               server-side tests)
 tests)                                   +--------+
 |                                                 |
 |                                                 |
 |                                        <--------+
 |                                        (server-side tests
 |                                         complete)
 |        <-----------------------------+
 |                 <verifyComplete = ok> notification
 |
 |
 |        +----------------------------->
 |         Sends <commit>
 |
 |
---

 Figure 1 

This, and other use cases for the verify.yang module are discussed further in the 'Framework' section below.

NETCONF defines the term 'validation' as the set of checks performed on proposed configuration code up to the point that the server places it into its running-configuration.

We use the term 'verification' as the act of performing active tests against configuration code in the running-configuration on the server. (Note: strictly, verification should also cover the act of loading new configuration into the <running> configuration as this may fail, e.g., due to undocumented configuration constraints. However, here we focus on aspects of running active tests to measure network behavior as a form of verification testing.) Verification tests can be executed from either the NETCONF client or the NETCONF server, or from a NETCONF server(a) against running configuration code on a NETCONF server(b), or all combinations.

Within the new verify.yang module, we define a set of stand-alone operations, notifications, and requirements on the definition of future test modules for the purpose of managing verification testing on remote servers through standardized mechanisms. This allows for extensible verification testing of configuration across the base of IETF compliant devices. This leads to more resilient configuration management for operators manging multi-vendor networks of devices. This capability may promote future integrated network management capabilities as opposed to device management capabilities.

A more detailed presentation of the stand-alone operation of the proposed verification testing is given in the below figure. Here the client issues the <verify> operation indicating the timeout period, the test sets which comprise the overall verification test suite, and the nature of the reporting from the server using the associated notification messages. The 'verifyStatus=true' indicates that the server should send intermediate status reports following completion of each test set in the suite. At the completion of the entire verification test suite, the server always sends the final <verifyComplete> notification to the client unless explicitly canceled by the client.

The optional <verifyStatus> and mandatory <verifyComplete> notifications carry indications of test success or failure based upon pre-configured thresholds and metrics defined within the test module(s) resident on the server. Further, the <verify> operation carries test instance identifiers and switches for various types of reporting, i.e., summary or extended. In total, these place requirements on the definition of future interoperable test modules to be developed in support of the verification testing managed through the verify.yang module. We give an example of a small test module in Appendix B. In the 'Framework' section we discuss the set of requirements on the test modules necessary for inter-operation with the verify.yang verification testing.



   Client                                Server
   ------                                ------

         +------------------------------>
          Sends <verify>
                 - timeout
                 - test-template:instanceID=1,
                   test-template:instanceID=263,
                   test-template:instanceID=51
                 - verifyStatus=true
                 - extendedResults=false
---
 |                                        +-------+
 |                                                | tests 1
(set                                              |
 timeout)                                 <-------+
 |        <-----------------------------+
 |                 <verifyStatus = ok> notification
 |
 |                                        +-------+
 |                                                | tests 263
 |                                                |
 |                                        <-------+
 |        <-----------------------------+
 |                 <verifyStatus = ok> notification
 |
 |                                        +-------+
 |                                                | tests 51
 |                                                |
 |                                        <-------+
 |        <-----------------------------+
 |                 <verifyStatus = ok> notification
 |        <-----------------------------+
 |               <verifyComplete = ok> notification
 |
 |
 |
---

 Figure 2 



 TOC 

1.1.  Benefits of This Work

Our objective is the development of a robust and resilient network configuration capability, building upon the improvements afforded by the NETCONF protocol and it's associated modeling language, YANG.

The envisioned benefits of a standardized set of mechanisms and capabilities for verification testing include:

(Note: should we place the presentation of use cases for the verification testing here or leave that discussion in the 'Framework' section below?)



 TOC 

1.2.  Requirements Language

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 (Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” March 1997.) [RFC2119].



 TOC 

1.3.  Outline

The outline of the remainder of this document follows. We next give a set of definitions to be adhered to for the remainder of this discussion. We then more formally present the new verify.yang module which acheives initial aspects of the Robust-NETCONF capabilities. We examine in the Framework section the verify mechanisms, their relationship to test modules and definitions of metrics and success criteria. The 'Framework' section also covers use cases of the verify mechanisms. Then 'Acknowledgments' and 'IANA Considerations' are presented. A section on 'Security Considerations' is provided concluding the main body of the document.

Various appendices are provided to compliment the text of the main body. Prominent appendices are 'Appendix A: verify.yang' which documents the verify.yang module and 'Appendix B: ping.yang' which presents a simple test module which complies with the requirements of the verify.yang. Other appendices cover motivational cases, potential applications to network-wide upgrade procedures, and related capabilities in existing IETF protocols and systems.



 TOC 

2.  Definitions

In this section we provide definitions strictly adhered to throughout this document.

The NETCONF specification maintains the following terms:

We maintain the following distinction between validation checks and verification tests:

We maintain the following definitions in the descriptions of the :verification testing:



 TOC 

3.  The Verify Mechanisms

In this section we describe operations and notifications, which we collectively refer to as the verify mechanisms. The Yang module for these mechanisms, i.e., verify.yang, is listed in Appendix A below. Servers supporting this module must advertise it according to the YANG specification [YANG] (Bjorklund, M., “YANG - A data modeling language for NETCONF,” February 2010.). An example test module, which complies with the requirements for test modules as spelled out in this document, is the ping.yang module in Appendix B below.



 TOC 

3.1.  Verify Tests



 TOC 

3.1.1.  Overview

The verification test mechanisms provide a set of standard tools allowing the client to direct verifications tests from remote servers and to collect verification test reports related to the success or failure of the tests.

Note: This verify.yang module has several prerequisites, including support for secondary modules on servers and notifications. There are advantages to supporting other capabilities, such as <candidate> configuration and :commit capability as discussed in the use cases in the Framework section. However, the verify.yang module provides stand-alone <verify> and other operations.

Secondary modules are required for the definition of specific verification tests. We present an example in terms of a ping.yang module sketched out in Appendix B below.

So, a typical client/server interaction follows:

  1. Client sets up the <candidate> configuration on all relevant agents.
  2. Client sets up all the relevant test control configuration needed for the verification tests on all relevant agents.
  3. Client sends <verify> to all agents with parameters (timeout:seconds, test-template:instance-identifier,verifyStatus:true, extendedStatus:false), i.e.,

    <rpc xmlns="netconf-base" message-id="101">
      <verify xmlns="verify-module">
         <timeout>60</timeout>
         <test-template xmlns:as="ping-module">
            /at:ping/at:pingEntry[at:pingControlIndex=21]
            /at:ping/at:pingEntry[at:pingControlIndex=42]
            /at:ping/at:pingEntry[at:pingControlIndex=48]
         </test-template>
         <verifyStatus>true</verifyStatus>
         <extendedStatus>false</extendedStatus>
      </verify>
    </rpc>
    

     Figure 3 

  4. Server returns <ok/>.
  5. The server runs the tests with the specified (e.g., pingControlEntry) configuration subtree.
  6. For each completed test set, the server sends a report in a <verifyStatus> notification.
  7. At the completion of the entire verification test suite, the server sends a summary report in a <verifyComplete> notification message.

The client can adjust the nature of the reporting through the 'verifyStatus' and the 'extendedResults' parameters of the &ly;verify> operation. The former determines whether or not <verifyStatus> notifications are sent from the server following the completion of each test set. The later determines whether or not the <verifyStatus> notifications carry raw test data (as defined within the test modules).

Further, the client can decide to immediately cancel all ongoing verification testing by issuing the <cancel-verify> operation. Or the client can decide to gracefully cut short the testing by issuing the <complete-verify> operation which instructs the server to complete only the in-progress test set, to follow up with an optional <verifyStatus> notification for that completed test set if the client had required this notification message and to wrap up the verification process by sending the manditory <verifyComplete> notification.



 TOC 

3.1.2.  Dependencies

The verification mechanism requires the existence of test modules resident on servers which comply with the following requirements:



 TOC 

3.1.3.  Capability Identifier

The server must advertise the verify.yang module capability URI as follows:

<capability>

file:///draft-cole-netwconf-robust-config-02.txt?module=verify&revision=2010-03-02

</capability>



 TOC 

3.1.4.  New Operations

The verify.yang module defines a number of operations, as described in this section.



 TOC 

3.1.4.1.  <verify>

The <verify> operation starts the verification tests on the server. The <verify> operation has four parameters:



 TOC 

3.1.4.2.  <cancel-verify>

The <cancel-verify> operation immediately cancels a verify test suite in progress on the server. The server terminates in-progress tests immediately and is not required to send any followup notification messages carrying test results.



 TOC 

3.1.4.3.  <complete-verify>

The <complete-verify> operation tells the server to complete the in-progress verification test set and to send any required followup notifications carrying test results. This affords a more graceful shutdown of the ongoing verification test suite by terminating tests following a completion and associated notification of the currently active test set.



 TOC 

3.1.4.4.  <verifyStatus>

The <verifyStatus> notification carries the results for each verification test set comprising the entire verification test suite. This notification may also carry raw extended results per test set. This notification is optional and is requested explicitly by the client sending the 'verifyStatus=true' parameter in the <verify> operation.



 TOC 

3.1.4.5.  <verifyComplete>

The <verifyComplete> notification is mandatory (unless canceled by the <cancel-verify> operation) and carries a summary result covering the entire verification test suite.



 TOC 

3.1.5.  Modifications to Existing Operations

None.



 TOC 

4.  Framework

This section discusses the relationship between verification mechanisms and supporting test.yang modules, the way metrics and thresholds are defined in order to assess test 'pass/failure' decisions, and presents use cases for the verification testing.



 TOC 

4.1.  Test Modules

The verification mechanism requires the existence of test modules resident on servers which advertise verify.yang module. For proper interoperation, these test modules must comply with the following requirements:



 TOC 

4.2.  Use Cases

The use cases for the <verify> operation are discussed here. These include:



 TOC 

5.  Acknowledgements

The authors would like to acknowledge the useful comments and suggestions of M. Bjorklund. He had suggested developing the verification mechanisms as stand alone operations and suggested several of the use cases discussed in the Framework section.



 TOC 

6.  IANA Considerations

This memo includes no request to IANA.

All drafts are required to have an IANA considerations section (see the update of RFC 2434 (Narten, T. and H. Alvestrand, “Guidelines for Writing an IANA Considerations Section in RFCs,” March 2008.) [I‑D.narten‑iana‑considerations‑rfc2434bis] for a guide). If the draft does not require IANA to do anything, the section contains an explicit statement that this is the case (as above). If there are no requirements for IANA, the section will be removed during conversion into an RFC by the RFC Editor.



 TOC 

7.  Security Considerations

This section presents the required security considerations for all IETF protocols and capabilities. This section was developed following guidelines within [RFC3552] (Rescorla, E. and B. Korver, “Guidelines for Writing RFC Text on Security Considerations,” July 2003.).

This section addresses the security concerns and objectives for the verify.yang module and the associated set of issues tied to overall verification test mechanisms within the YANG modeling language and NETCONF protocol. This section is currently TBD. Security issues related to the verification tests should address issues specific to the proposed operations and notifications. They should also address security issues associated with the development of associated test modules for the purpose of running verification tests. Here is an initial list of potential considerations (in no particular order):



 TOC 

8.  References



 TOC 

8.1. Normative References

[RFC2119] Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” BCP 14, RFC 2119, March 1997 (TXT, HTML, XML).


 TOC 

8.2. Informative References

[802.1ag] IEEE 802.1, “IEEE 802.1ag - Connectivity Fault Management,” September 2007.
[802.3ah] IEEE 802.3, “IEEE 8023ah - Ethernet in the First Mile,” December 2005.
[I-D.narten-iana-considerations-rfc2434bis] Narten, T. and H. Alvestrand, “Guidelines for Writing an IANA Considerations Section in RFCs,” draft-narten-iana-considerations-rfc2434bis-09 (work in progress), March 2008 (TXT).
[RFC2021] Waldbusser, S., “Remote Network Monitoring Management Information Base Version 2 using SMIv2,” RFC 2021, January 1997 (TXT).
[RFC2074] Bierman, A. and R. Iddon, “Remote Network Monitoring MIB Protocol Identifiers,” RFC 2074, January 1997 (TXT).
[RFC3552] Rescorla, E. and B. Korver, “Guidelines for Writing RFC Text on Security Considerations,” BCP 72, RFC 3552, July 2003 (TXT).
[RFC3577] Waldbusser, S., Cole, R., Kalbfleisch, C., and D. Romascanu, “Introduction to the Remote Monitoring (RMON) Family of MIB Modules,” RFC 3577, August 2003 (TXT).
[RFC3729] Waldbusser, S., “Application Performance Measurement MIB,” RFC 3729, March 2004 (TXT).
[RFC4149] Kalbfleisch, C., Cole, R., and D. Romascanu, “Definition of Managed Objects for Synthetic Sources for Performance Monitoring Algorithms,” RFC 4149, August 2005 (TXT).
[RFC4150] Dietz, R. and R. Cole, “Transport Performance Metrics MIB,” RFC 4150, August 2005 (TXT).
[RFC4377] Nadeau, T., Morrow, M., Swallow, G., Allan, D., and S. Matsushima, “Operations and Management (OAM) Requirements for Multi-Protocol Label Switched (MPLS) Networks,” RFC 4377, February 2006 (TXT).
[RFC4378] Allan, D. and T. Nadeau, “A Framework for Multi-Protocol Label Switching (MPLS) Operations and Management (OAM),” RFC 4378, February 2006 (TXT).
[RFC4656] Shalunov, S., Teitelbaum, B., Karp, A., Boote, J., and M. Zekauskas, “A One-way Active Measurement Protocol (OWAMP),” RFC 4656, September 2006 (TXT).
[RFC4687] Yasukawa, S., Farrel, A., King, D., and T. Nadeau, “Operations and Management (OAM) Requirements for Point-to-Multipoint MPLS Networks,” RFC 4687, September 2006 (TXT).
[RFC4741] Enns, R., “NETCONF Configuration Protocol,” RFC 4741, December 2006 (TXT).
[RFC5357] Hedayat, K., Krzanowski, R., Morton, A., Yum, K., and J. Babiarz, “A Two-Way Active Measurement Protocol (TWAMP),” RFC 5357, October 2008 (TXT).
[VIGO] Vigoureux, M., “Requirements for Operations and Management (OAM) in MPLS Transport Network,” March 2009.
[Y.1710] ITU-T Study Group 13, “ITU-T Y.1710 - Requirements for OAM Functionality in MPLS Networks,” 2002.
[Y.1730] ITU-T Study Group 13, “ITU-T Y.1730 - Requirements for OAM Functions in Ethernet-based Networks and Ethernet Services,” January 2004.
[Y.1731] ITU-T Study Group 13, “ITU-T Y.1731 - OAM Functions and Mechanisms for Ethernet-based Networks,” May 2006.
[YANG] Bjorklund, M., “YANG - A data modeling language for NETCONF,” February 2010.


 TOC 

Appendix A.  verify.yang Module

In this appendix we list the verify.yang model for use in conjunction with the robust-netconf capabilities.



=========Contents of "verify.yang"==================

module verify {

      namespace
        "file:///draft-cole-netconf-robust-config-02.txt";

      prefix "ver";

      organization  "IETF";

      contact "[add contact info here].";

      description
        "NETCONF verify procedure.";

      revision 2010-03-02 {
          description  "Initial version.";
      }

      rpc verify {
          description
            "The verify procedure is started by
             invoking this operation.

               * A verify proceedure is comprised of
                 multiple verification test sets, each
                 indicated by an instance-identifier
                 within the 'test-template leaf-list'
                 of the <verify> operation.  The entire
                 collection of test sets is refered to
                 as the verification test suite.

               * the agent will cancel the verify
                 procedure if the <cancel-verify>
                 operation is invoked.

               * the agent will complete the current
                 verification test set and generate the
                 <verifyStatus> (if requested)
                 and <verifyComplete>
                 notifications if the <complete-verify>
                 operation is invoked.

               * the agent will start, monitor, and report
                 the verification test(s) during the time
                 interval after this operation, and before
                 the 'timeout' interval has expired.

               * if indicated by the client in the
                 <verify> operation, the
                 agent will generate the <verifyStatus>
                 notification for each verification test set specified
                 in the 'test-template leaf-list', indicating the
                 result of each verification test.

               * the agent will generate the <verifyComplete>
                 notification at the completion of the entire
                 verified commit procedure, indicating the
                 final verify procedure status.

               * the definition of this capability places requirements
                 on the development of test.yang modules to provide
                 the following set of features:
                     - test suites identified by 'instanceId's,
                     - test suites identify: metric and target,
                       (pass/fail) threshold, (optional) raw data
                       capability.
                     - optional rawResults are to be stored and
                       passed, if indicated by the client.
                 These requirements are defined in section X.X..

               * <verifyStatus> is sent follow each verification
                 test set, if requested by the client,
                 and indicates pass/fail status of test based upon
                 (metric, target, threshold) triplet.  It may also
                 carry raw data values from the 'rawResults' node
                 carried within the <verifyStatus>'s
                 'anyxml extendedStatus'.
            ";

          input {
              leaf timeout {
                  description
                    "The time interval the agent has to perform
                     the verify operation.  If not complete at
                     timeout, then server must issue <verifyStatus>
                     indicating partial test results and that
                     verification tests are being terminated.";
                  type uint32;
                  units seconds;
                  default 60;
              }

              leaf-list test-template {
                  description
                    "Identifies a verification test control entry
                     or entries for the agent to use for the
                     verification procedure.

                     The verification test control entry must conform
                     to the requirements specified in section X.X,
                     and the agent must be capable of starting,
                     monitoring, and reporting the results of
                     the verification test, as required.

                     The agent will also generate the
                     <verifyStatus> notification,
                     as specified for each verification test
                     control entry indicated by this parameter.";
                  ordered-by user;
                  type instance-identifier;
                  min-elements 1;
              }

              leaf verifyStatus {
                  description
                    "A switch indicating the use of the
                     <verifyStatus notification.  If 'false'
                     the cleint does not want to receive
                     the <verifyStatus> notification
                     associated with each verification test
                     in the verification test suite.  Instead,
                     it only wants to receive the final
                     <verifyComplete> notification which
                     contains a summarized pass/fail result
                     for the verification test suite.

                     If 'true', then the client is requesting
                     that the server generates <verifyStatus>
                     notifications for each verification test
                     in the verification test suite.";
                  type boolean;
                  default false;
              }

              leaf extendedResults {
                  description
                    "A switch indicating that the client is
                     requesting raw test results through
                     the 'anyxml extendedResults'.  This
                     defaults to 'false'.

                     This can only be set to 'true' if the
                     proceeding 'verifyStatus' leaf is set
                     to 'true'.  Else, the server should
                     generate an error response to this
                     request.";
                  type boolean;
                  default false;
              }

          }
      }



      rpc cancel-verify {
          description
            "Cancel a verify procedure already in progress.

             If no verify procedure is currently in
             progress, then an 'operation-failed' error is
             generated, and the value 'no-verify'
             is used for the error-app-tag field.

             If the verify procedure in progress
             cannot be canceled for any reason, then an
             'operation-failed' error is returned, and
             the value 'cancel-failed' is used in the
             error-app-tag field.

             If any verification tests associated with this
             verify procedure are still in progress,
             they will be immediately
             canceled by this operation.

             If the verify procedure in progress
             is canceled, then the agent will return <ok/>.
            ";
      }

      rpc complete-verify {
          description
            "Complete a verify procedure already in progress.

             If no verify procedure is currently in
             progress, then an 'operation-failed' error is
             generated, and the value 'no-verify'
             is used for the error-app-tag field.

             If the verify procedure in progress
             cannot be completed for any reason, then an
             'operation-failed' error is returned, and
             the value 'complete-failed' is used in the
             error-app-tag field.

             If any verification test sets associated with this
             verify procedure are still in progress,
             the current test set will be completed and
             any associated notifications will be
             sent.  Test sets following the current
             in-progress test set will not be executed.

             The agent will return <ok/> if it is able to
             initiate the4 completion of the current
             test set.  This does not indicate that the
             current test set has completed.  This is indicated
             when the server issues the <verifyComplete>
             notification.
            ";
      }

      notification verifyStatus {
          description
            "Contains the current or final status of
             a verification test being invoked on behalf
             of the current verify procedure.";

          list eachTest {
              key "testIdentifier";

              leaf testIdentifier {
                  description
                    "Indicates which verification test this
                     status report is associated with.
                     This value will identify the same node
                     as specified in a 'test-template'
                     parameter instance provided in the
                     <verify> operation.";
                  type instance-identifier;
                  mandatory true;
              }

              leaf statusType {
                  description
                    "Indicates the type of status report that
                     this notification contains.";
                  type enumeration {
                      enum partial {
                          description
                            "Indicates this is a partial status result
                             for this verification test
                             which is still in progress.";
                      }
                      enum final {
                          description
                            "Indicates this is the final status result
                             and this verification test which completed
                             or canceled.";
                      }
                  }
                  mandatory true;
              }

              leaf status {
                  description
                    "Indicates the NETCONF error-tag value most
                     closely associated with the test status.
                     The string 'ok' is used to indicate that
                     the pass threshold for the test has been
                     exceeded.";
                  type string;
                  reference "RFC 4741bis, Appendix A";
                  mandatory true;
              }

              anyxml extendedStatus {
                  description
                    "Indicates verification test-specific status data.
                     The requirements for verification tests
                     (section X.X) describes how the semantics
                     of this structure are determined.";
              }
          }
      }

      notification verifyComplete {
          description
            "Contains the final status of the
             current verify test suite.";

          leaf status {
              description
                "Indicates the NETCONF error-tag value most
                 closely associated with the test status.
                 The string 'ok' is used to indicate that
                 the pass thresholds were exceeded for
                 all tests in the verification test suite.";
              type string;
              reference "RFC 4741bis, Appendix A";
              mandatory true;
          }
      }

  }

 Figure 4 



 TOC 

Appendix B.  Example ping.yang Module

In this appendix we list an example ping.yang model for use in conjunction with the verification test management mechanisms identified in the verify.yang module.

Specifically, the <verify> operation passes the instance-identifiers in the 'test-template' parameter. Each instance-identifier identifies a specific ping test. The <verify> operation manages the identification, execution and reporting of multiple tests within a single verification test procedure.




<rpc xmlns="netconf-base" message-id="101">
  <verify xmlns="verify-module">
     <timeout>3600</timeout>
     <test-template xmlns:as="ping-module">
        /at:ping/at:pingEntry[at:pingControlIndex=21]
        /at:ping/at:pingEntry[at:pingControlIndex=42]
        /at:ping/at:pingEntry[at:pingControlIndex=48]
     </test-template>
     <verifyStatus>true</verifyStatus>
     <extendedStatus>false</extendedStatus>
  </verify>
</rpc>

 Figure 5 



=========Contents of "ping.yang"==================

module ping {

       namespace "unassigned";
       prefix "at";

       import ietf-yang-types { prefix yang; }
       import ietf-inet-types { prefix inet; }


       organization "IETF";

       contact
           "Andy Bierman
            InterWorking Labs
            EMail: andyb@iwl.com

            Robert G. Cole
            Johns Hopkins University
            Department of Computer Science
            Email: rgcole01@comcast.net

            Dan Romascanu
            Avaya
            Email:dromasc@avaya.com";

            description
                "The module for entities implementing
                 the ping test.";

            revision 2010-03-02 {
                description "Second revision:
                    Added 'pingEntry' list to hold multiple
                    pre-defined test specifications.  Added
                    (metric, target, threshold) triplet
                    for pass/fail determination.  Added
                    raw data collection and reporting
                    (optional).";
            }


            leaf test-reference {
                type string;
                config false;
                description "URL for the definition of this
                             test";
            }

            list pingEntry {
                key "pingControlIndex";
                config true;

                leaf pingControlIndex {
                    type uint32;
                    description
                        "Identifies the specific control table
                         row of the ping test template to be
                         executed, which represents the
                         verification test sets to be performed
                         on the device as part of the verify
                         operation.";

                }

                leaf dstAddr {
                    type inet:ip-address;
                    description
                        "Identifies the destination address in
                         the packet header of the ping message.";
                }

                leaf srcAddr {
                    type inet:ip-address;
                    description
                        "Identifies the source address in the
                         packet header of the ping message.";
                }

                leaf spacing {
                    type uint32;
                    description
                        "The number of seconds between sending
                         subsequent ping packets.";
                }

                leaf startTime {
                    type yang:date-and-time;
                    config false;
                    description
                        "The time the first ping packet
                         was sent for the previous test.
                         This is set each time the test
                         is initiated from a client.  When this
                         value is reset, the value of the
                         'result' node is set to
                         'indeterminant' and the value of the
                         'received' node is set to zero.";

                }

                leaf number {
                    type uint32;
                    description
                        "The number of ping packets to be sent.";
                }

                leaf metric {
                    type enumeration;
                        enum loss {
                            description
                               "Holds the indication of whether
                                the transaction was successful (1)
                                or failed (0).";
                        }
                        enum delay {
                            description
                               "Holds the number of milliseconds
                                for the successful transaction
                                or '0' if the transaction failed.";
                        }
                        enum throughput {
                            description
                               "Holds the measured throughput
                                in units of bytes/millisecond for
                                the transaction if successful
                                or '0' if failed.";
                        }
                    default "loss";
                    description
                        "The metric tracked by this specific test.
                         These values are held on the rawResults
                         if the specific test indicates storage
                         of raw data values.";
                }

                leaf target {
                    type uint32;
                    description
                        "The preformance target for each transaction
                         measurement.  A measured transaction is deemed
                         successful if its measured 'metric' value
                         falls within the limits defined by this
                         'target'.  E.g.,
                             if 'metric = loss', then 'target' must
                                equal '1' indicating success if repsonse
                                recieved.
                             if 'metric = delay', then responses
                                received within 'target' milliseconds
                                are counted as successful.
                             if 'metric = throughput', then responses
                                recieved with throughputs greater than
                                'target' are counted as successful.

                         The target value carries the
                         units defined by the 'metric', i.e.,
                             unitless if 'metric = loss',
                             milliseconds if 'metric = delay',
                             bytes/milliseconds if
                             'metric = throughput'.

                         The server counts the number of transaction
                         measurements that are deemed successful.  This
                         count is compared against 'threshold' to
                         determine overall success or failure of the
                         test.";
                    default "1";
                }

                leaf threshold {
                    type uint32;
                    description
                        "The threshold value that determines the
                         pass/fail status reported to the client
                         by this server in the 'verifyStatus'
                         notification.";
                }

                leaf received {
                    type uint32;
                    config false;
                    description
                        "The number of successful
                         ping transactions received during
                         the previous test.  This value
                         is initialized to zero prior to
                         the instantiation of the test
                         and is incremented by one for
                         each received ping packet.  This
                         is set each time the test is
                         initiated from a client.";
                }

                leaf result {
                    type enumeration {
                        enum indeterminant{
                            description
                               "Set to 'indeterminant' upon
                                the initiation of a test.";
                        }
                        enum success{
                            description
                               "Set to 'success' if the
                                number of successful pings
                                exceeded the 'threshold'.";
                        }
                        enum failure{
                            description
                               "Set to 'failure' if the
                                number of successful pings is less
                                than or equal to the 'threshold'.";
                        }
                    config false;
                    description
                        "The result of the previous test.";
                }

                leaf rawResultCollection {
                    type enumeration;
                        enum off {
                            description
                               "Indicates that the server will
                                not store the raw transaction
                                measurement values of type indicated
                                by metric.";
                        }
                        enum on {
                            description
                               "Indicates that the server will
                                store the raw transaction
                                measurement values of type indicated
                                by metric.  Further, these raw
                                measurement values will be passed
                                to the client throught 'verifyStatus'
                                notification's 'extendedStatus'
                                node.";
                        }
                    config true;
                    default "off";
                    description
                        "A switch to turn ON or OFF the raw
                         data collection and notification.";
                }

                leaf-list rawResults {
                    description
                      "Holds the raw metric value for each transaction
                       successfully recorded as part of the specific
                       test.  The units used for these values conform
                       to the units defined with the 'metric' measured.

                       Upon completion of this specific test, the server
                       passes this measurement data to the requesting
                       client through the 'verifyStatus' notification's
                       'anyxml extendedStatus'.";
                    ordered-by system;
                    type uint32;
                    config false;
                    min-elements 1;
                }


            }

   }

 Figure 6 



 TOC 

Appendix C.  Motivational Cases

In this appendix we motivate the need for more robust configuration management through a set of example cases and failure situations. We solicit other cases from readers. One note, not all of these cases currently apply to the application of NETCONF configuration management for various reasons not of interest here. But we do believe that future implementations and versions of NETCONF will be applied to all these use cases; so we include them here.



 TOC 

C.1.  Case A: MANET

This section discusses a potential failure in configuration management in the case of a multi-frequency, multi-domain wireless Mobile Ad-hoc Network (MANET) scenario. Here there is a single NETCONF client connected to both MANET domains. The MANET domains are operating on different wireless frequencies. MANET_1 operates on freq_1 while MANET_2 operates on freq_2. In MANET_2 is the Server in question, which is indicated with an 'X'. Other nodes in the MANETs are indicated with a 'O'.

The following sequence of events follow. The Client issues a <commit> operation with the :confirmed capability. Part of the new configuration pushed to the Server, i.e., 'X', includes inadvertently changing its operating frequency from freq_2 to freq_1. However, the Server maintains connectivity back to the Client through the MANET node indicated as '@' which sits on the border of MANET_1 within radio range of the Server. This allows the Client to confirm its connectivity tests to the Server and then finally issue a confirming-commit. The Server then moves deeper into MANET_2 and becomes disconnected from the Client and all other nodes within MANET_2 do to the erroneous change in its operating frequency. The Client has no means at this point to reconnected to the Server and fix its configuration.



NETWORK DIAGRAM:
----------------

                 +---Client---+
                 |            |
      freq_1     V            V      freq_2
      +---------------+  +----------------+
      |  O       O O  |  |            O   |
      |     O        @|  |X--->      O    |
      |               |  |  O          O  |
      |  O  O O     O |  |       O O      |
      | O             |  |            O   |
      | O O           |  |     O O       O|
      |         O     |  |          O     |
      |   OO          |  | O              |
      +---------------+  +----------------+
       MANET_1            MANET_2





CLIENT/SERVER INTERACTIONS:
---------------------------

Client                          Server(X)
------                          ---------
      <commit> w/confirm
        (changing to freq_1)
     +-------------------------> +Changes configuration.
                                 +Sets timer.
                                  |
+Executes                         |
   ping tests.                    |
                                  |
+Connectivity                     |
   confirmed.                     |
                                  |
      <confirmed-commit>         ---
     +-------------------------> +Verifies configuration.
                                 +Stops timer.


                                 +Wanders off into
                                    MANET_2 and looses
                                    connectivity to client.



 Figure 7 

Our proposed solution is to have the server perform its own connectivity tests to a set of critical neighbor or peer nodes. This would allow the server to realize the incorrect frequency setting. It would then need a means to indicate back to the Client that a configuration error has occurred. Then the client would not issue the confirming commit operation and the server would back out into its previous configuration.



 TOC 

C.2.  Case B: IpTables

This section is TBD.




NETWORK DIAGRAM:
----------------

              +---------------+
              |  O       O O  |
  Client----->|X---> O        |
              |               |
              |  O  O O     O |
              | O             |
              | O O           |
              |         O     |
              |   OO          |
              +---------------+
               MANET_1





CLIENT/SERVER INTERACTIONS:
---------------------------

Client                          Server(X)
------                          ---------
      <commit> w/confirm
        (changes to ipTables)
     +-------------------------> +Changes configuration
                                    (looses connectivity to all
                                     neighbors but client).
                                 +Sets timer.
                                  |
+Executes                         |
   connectivity tests.            |
                                  |
+Connectivity                     |
   confirmed.                     |
                                  |
      <confirmed-commit>         ---
     +-------------------------> +Verifies configuration.
                                 +Stops timer.


                                 +Wanders off into
                                    MANET_1 and looses
                                    connectivity to client.


 Figure 8 



 TOC 

C.3.  Case C: DTN

This is a rather extreme use case, but one which is of interest to address within the Disruption Tolerant Network (DTN) development community. DTNs are characterized by large and/or intermittent delays between network systems. Clearly there are numerous issues to be worked in order to achieve NETCONF configuration management over DTNs. This use case illustrates just one example issue.

Here, the NETCONF Client issues a commit with the confirm capability to the DTN's Bundle delivery protocol. By the time the configuration change request reaches the distant, remote server the client and server have no immediate connectivity. Hence, any testing performed by the client to verify the proposed configuration changes on the server are bound to fail. If this is the only means to perform verification of running configurations then this form of management over DTNs is bound to always fail.




NETWORK DIAGRAM:
----------------

              +---------------+
              |  O       O O  |
  client----->|O      O       |
              |               |
              |  O  O O     O |
              | O             |
              | O O           |
              |         O    O|------>server
              |   OO          |
              +---------------+
               DTN





CLIENT/SERVER INTERACTIONS:
---------------------------

Client     Bundle Delivery       Server(X)
------     ---------------       ---------
      <commit> w/confirm
        (long delivery delay)
     +-------------------------> +Changes configuration
                                    (but has no current communication
                                     to Client).
                                 +Sets timer.
                                  |
+Cannot execute                   |
   connectivity tests.            |
                                  |
+Cannot confirm changes,          |
   will always fail.              |
                                  |
                                 ---
                                 +Stops timer.
                                 +Backs out of configuration change.

 Figure 9 



 TOC 

C.4.  Case D: Dual Homing

In this use case, the Server is dual homed over two different ISPs, A and B. The link to ISP B is currently the primary router path between the server and client. The two ISPs are very protective of the specifics of their internal networks and block all attempts of external devices to probe the internals of their network, e.g., pings, traceroutes, etc are blocked.

The client issues a configuration change to the server via the commit with confirm capability. The new configuration is flawed and causes the server to loose connectivity over the backup link_a path. The client performs connectivity tests to the Server, which succeed due to the presence of the primary path over link_b. The client issues the confirming commit and the server commits to the current configuration. Sometime later, link_b fails and the server becomes totally disconnected and the client cannot access the server to fix it.




NETWORK DIAGRAM:
----------------


                   client
                      |
                      |
              +--------------+
              |              |
              |     ISP_C*   |
              |              |
              +--------------+
                |          |
                |          |
       +-----------+   +-----------+
       |           |   |           |
       |   ISP_A*  |   |   ISP_B*  |
       |           |   |           |
       +-----------+   +-----------+
                \          /
           link_a\        /link_b
          (backup)\      /(primary)
                   \    /
                   server
            (enterprise router)

* ISP's hide/block path information, e.g.,
  hides traceroute information.



CLIENT/SERVER INTERACTIONS:
---------------------------

Client                          Server(X)
------                          ---------
      <commit> w/confirm
        (changes cause server to
         loose connectivity over
         backup link_a)
     +-------------------------> +Changes configuration
                                    (looses connectivity over
                                     link_a, but not link_b).
                                 +Sets timer.
                                  |
+Executes                         |
   connectivity tests             |
   (running over link_b)          |
+Connectivity                     |
   confirmed.                     |
                                  |
      <confirmed-commit>         ---
     +-------------------------> +Verifies configuration.
                                 +Stops timer.


                                 +Link_b fails and server
                                    looses all connectivity.


 Figure 10 



 TOC 

Appendix D.  Network-wide Upgrades

One further point regarding network versus device management and the utility of more extensive verification mechanisms within NETCONF and YANG. The NETCONF protocol is currently defined to provide a set of operations and optional capabilities which afford management applications a configuration framework which improves previous capabilities. Specifically, as described in Appendix D of NETCONF RFC 4741 (Enns, R., “NETCONF Configuration Protocol,” December 2006.) [RFC4741], the following client to server procedure is possible within NETCONF:

  1. Acquire a configuration 'lock' - prevent other applications from simultaneously modifying the same sections of the device configuration.
  2. Load configuration update - move the desired new configuration to the managed device.
  3. Verify the configuration (syntax) - perform a syntax check on the new configuration code.
  4. Checkpoint the <running> configuration - save the old configuration in case the device needs to back out of the desired changes.
  5. Change the <running> configuration - move the proposed configuration changes over to the <running> configuration using, e.g., the ':confirmed-commit' capability.
  6. Validate the new configuration - within the time limits set in the ':confirmed-commit' the application can perform a set of tests, e.g., 'ping', or inferential checks, e.g., pull routing information from the device or peers, to build some confidence in the proposed configuration changes. If the application is not satisfied with the tests and checks available to it, it can withhold the 'confirming-commit' forcing the device to back out of the desired configuration changes.
  7. Make the changes permanent (if desired) -
  8. Release the configuration 'lock' -

This represents an significant step forward from a reliance upon SNMP for configuration management. However, further improvements are desirable, specifically in the definition and automation of tests associated with Step 6 above. Herein lies our interests and the focus of the framework discussion outlined in this document. With respect to the above procedure, extensions to network-wide configuration changes are limited to a serial repetition of the above procedure for each network device. This may prove awkward for large numbers of devices; if one device fails to upgrade its configuration the client has to back out of all previous device upgrades serially. Whereas, an enhanced validation and, specifically, an enhanced verification capability may result in improved methods and procedures for network-wide configuration updates. As an example, the following network upgrade procedure may be feasible.

  1. Configure N devices with appropriate configuration changes in candidate configuration files. Regular YANG 'static' file checking used to make sure first <commit> will work on each device.
  2. Issue <commit> with confirmation parameter to move new configuration into running.
  3. Issue <verify> (#1) to all devices with extra parameters identifying the master test template to run on each device (if needed).
  4. Run all the tests according to the template(s) and report the results to the client with internal code.
  5. Servers will issue a pass/failed notification and save a detailed report as well.
  6. Client issuing all these tests waits for notifications or polls the agents for the pass/fail (i.e., done) flag NMS can let all tests finish or cancel all tests/commits on first failure reported (with <cancel-verify> RPC operation).
  7. All agents report OK; issue all confirming <commit> (#2) operations to finish robust configuration change, or
  8. Analyze detailed reports from agents that failed to see what network/device/bug/other conditions are preventing the test(s) from passing.

This is an opportunity to do some network management, not just device management. Clearly this is an area for further study.



 TOC 

Appendix E.  Existing Capabilities

In this appendix we identify existing protocol capabilities which may play a role in extending NETCONF verification mechanisms and specifications for improved configuration management. This is by no means meant to be an exhaustive, all-inclusive list. It is merely intended to better reinforce this proposal and give an appreciation of its potential mechanisms currently available in other contexts.



 TOC 

E.1.  NETCONF Capabilities

Here we highlight existing NETCONF mechanisms associated with validation checking and verification testing configuration changes prior to committing to those changes. We conclude this section with a potential list of extensions to NETCONF which may be necessary to accomplish improved configuration management.

The NETCONF protocol is a new tool for configuration management over IP networks. The NETCONF protocol current supports a set of configuration operations, including:

NETCONF servers can advertise capabilities upon initial session establishments. One capability is the ':validate' capability. When implementing the ':validate' capability, the server ``checks at least for syntax error ...'' (reference NETCONF). This level of checking can be tied directly to the <edit-config> operation through the operation test-option: 'test-then-set' if the server advertises :validate capability (NETCONF sect 8.6). This forces the server to perform syntax checking during the <edit-config> operation. We describe this as validation checking made against non-running configuration code. However, NETCONF and YANG do not fully define this 'validation' capability. Currently only limited syntax checking is defined. Yang proposes to extend this capability by adding 'constraints' checking through the definition of XPATH relationships within the server management model. We propose that further and useful extensions should be included to cover more general cross-management model relationships, a ka, 'validation' statements.

The 'writable-running' capability allows the <copy-config> operation to define the <running> configuration to be the target. However, in this case, we believe that the checks are to be performed prior to copying the proposed configuration to the <running> configuration. Hence, we still maintain that this is validation.

A further NETCONF capability is the ':confirmed-commit' capability. This allows the client to instruct the server through the optional <commit> operation's parameters, 'confirmed' and 'confirmed-timeout', to run the desired configuration changes for a period of time, until it either receives a 'confirming commit' from the client and commits, or times out and reverts back to the prior configuration. This gives the client time to perform an unspecified set of verification tests to build confidence in the desired changes prior to instructing to commit. However, NETCONF does not specify or recommend the tests to be performed, nor the success criteria for the tests, nor does it specify how the server can actively participate in the test phase of the 'commit' and 'confirmed-commit' procedure.

The following enhancements are in consideration for improved verification testing and validation checking of proposed configuration code:



 TOC 

E.2.  YANG Capabilities

In this section we discuss relevant aspects of the YANG modeling language. We conclude this sections by identifying some areas for potential enhancements to YANG or new applications of the existing YANG language.

The YANG 'must' statement extends the ':validate' capability beyond simple syntax checking by including checking of 'must' constraints specified in the device model through YANG. (YANG sect 7.5.2) ``.. when a configuration data-store is validated, all 'must' constraints (defining necessary relationships between device configuration parameter values) are conceptually evaluated ...''. Further, (YANG sect 7.5.2) ``.. all such constraints must evaluate to true ..'' prior to copying the new configuration. This allows for a richer set of validation checks.

YANG, as a device modeling language, could be used to define an extensible set of tests through a specific test device model akin to the SSPM-MIB RFC 4149 (Kalbfleisch, C., Cole, R., and D. Romascanu, “Definition of Managed Objects for Synthetic Sources for Performance Monitoring Algorithms,” August 2005.) [RFC4149] defined within RMON RFC 2021 (Waldbusser, S., “Remote Network Monitoring Management Information Base Version 2 using SMIv2,” January 1997.) [RFC2021]. This would allow specific tests to be indicated from the application to the device associated with specific configuration changes. The SSPM-MIB relies upon extensible methods (described below) to define broad sets of network tests. Our simple ping.yang module is an example of this approach. This notion can be extended to other network capabilities, such as the tests afforded through recent Operations and Management (OAM) enhancements to 'Carrier Class Ethernet' services or MPLS services. Specifically, YANG models can be defined to exercise 'Continuity', 'Fault', 'Performance' and 'SLA' monitoring provided by these subnet technologies as defined in 802.1ag (IEEE 802.1, “IEEE 802.1ag - Connectivity Fault Management,” September 2007.) [802.1ag], 802.3ah (IEEE 802.3, “IEEE 8023ah - Ethernet in the First Mile,” December 2005.) [802.3ah], Y.1730 (ITU-T Study Group 13, “ITU-T Y.1730 - Requirements for OAM Functions in Ethernet-based Networks and Ethernet Services,” January 2004.) [Y.1730], and Y.1731 (ITU-T Study Group 13, “ITU-T Y.1731 - OAM Functions and Mechanisms for Ethernet-based Networks,” May 2006.) [Y.1731], and identified in RFC 4377 (Nadeau, T., Morrow, M., Swallow, G., Allan, D., and S. Matsushima, “Operations and Management (OAM) Requirements for Multi-Protocol Label Switched (MPLS) Networks,” February 2006.) [RFC4377], RFC 4378 (Allan, D. and T. Nadeau, “A Framework for Multi-Protocol Label Switching (MPLS) Operations and Management (OAM),” February 2006.) [RFC4378], RFC 4687 (Yasukawa, S., Farrel, A., King, D., and T. Nadeau, “Operations and Management (OAM) Requirements for Point-to-Multipoint MPLS Networks,” September 2006.) [RFC4687], and VIGO (Vigoureux, M., “Requirements for Operations and Management (OAM) in MPLS Transport Network,” March 2009.) [VIGO], Clearly, this can be extended to other active test capabilities not explicitly identified in this document.

YANG, as a device modeling language, could be used to associate within each device model itself, tests explicitly associated with configuration objects. This would afford the device modelers the ability to recommend associated (optional) tests tied to desired object changes. Clearly, associated success criteria parameters would need to be modeled as well.

YANG, as a device modeling language, could be used to specify references to associated tests, or test scripts, and test success criteria, e.g., through URIs.

See [YANG] (Bjorklund, M., “YANG - A data modeling language for NETCONF,” February 2010.) for more information.

The following enhancements or work items are in consideration:



 TOC 

E.3.  RMON Capabilities

RMON [RFC3577] (Waldbusser, S., Cole, R., Kalbfleisch, C., and D. Romascanu, “Introduction to the Remote Monitoring (RMON) Family of MIB Modules,” August 2003.) defined a set of capabilities related to definition and execution of network tests which may be valuable to this discussion. Refer to [RFC2021] (Waldbusser, S., “Remote Network Monitoring Management Information Base Version 2 using SMIv2,” January 1997.), [RFC2074] (Bierman, A. and R. Iddon, “Remote Network Monitoring MIB Protocol Identifiers,” January 1997.), [RFC3729] (Waldbusser, S., “Application Performance Measurement MIB,” March 2004.), [RFC4149] (Kalbfleisch, C., Cole, R., and D. Romascanu, “Definition of Managed Objects for Synthetic Sources for Performance Monitoring Algorithms,” August 2005.), and [RFC4150] (Dietz, R. and R. Cole, “Transport Performance Metrics MIB,” August 2005.) for further information.

The RMON 'protocol-ID' and AppLocalIndex (APM-MIB) [RFC3729] (Waldbusser, S., “Application Performance Measurement MIB,” March 2004.) define an extensible method to specify application/protocol network transactions. These have proven useful in the definition of network monitoring and reporting and in the specification of specific network-level active tests. These constructs can be moved forward into YANG models to provide similar benefits in the context of NETCONF configuration management. These could be used to specify a rich set of network tests, e.g., the SSPM-MIB.

RMON Synthetic Sources for Performance Management MIB (SSPM-MIB) [RFC4149] (Kalbfleisch, C., Cole, R., and D. Romascanu, “Definition of Managed Objects for Synthetic Sources for Performance Monitoring Algorithms,” August 2005.) uses AppLocalIndex to define network measurements and remotely instrument such measurements. SSPM-MIB does not specify success criteria, i.e., ``What constitutes success''. This model can be defined within YANG and enhanced to potentially incorporate success criteria along with the test specification. SSPM-MIB does not report measurements; these are collected via APM-MIB [RFC3729] (Waldbusser, S., “Application Performance Measurement MIB,” March 2004.) and TPM-MIB [RFC4150] (Dietz, R. and R. Cole, “Transport Performance Metrics MIB,” August 2005.). Collectively, this capability set may need to be carried forward.

RMON developed the control table and report table constructs. These allow a management application to instruct a remote device to monitor specific performance objects and to construct reports which can be collected in bulk at a later time. This capability may be desirable in the development of tests and reports to influence a new Robust-NETCONF capability.



 TOC 

E.4.  OAM for Carrier Class Ethernet

Carriers are actively deploying new metropolitan data services based upon 'Carrier Class Ethernet Services'. In order to support robust and reliable data services new Operations and Management (OAM) capabilities are being defined in IEEE and ITU-T standards.

Of particular interest to our discussion are the active test capabilities defined within the IEEE 802 set of standards, i.e., 802.1ag (IEEE 802.1, “IEEE 802.1ag - Connectivity Fault Management,” September 2007.) [802.1ag], 802.3ah (IEEE 802.3, “IEEE 8023ah - Ethernet in the First Mile,” December 2005.) [802.3ah], Y.1730 (ITU-T Study Group 13, “ITU-T Y.1730 - Requirements for OAM Functions in Ethernet-based Networks and Ethernet Services,” January 2004.) [Y.1730], and Y.1731 (ITU-T Study Group 13, “ITU-T Y.1731 - OAM Functions and Mechanisms for Ethernet-based Networks,” May 2006.) [Y.1731]. These define OAM active test capabilities providing for continuity testing and fault isolation measurements, as well as end-to-end performance measurements of delay, delay variation and loss. For these technologies, these active measurement capabilities can be exercised by the new <verify> operation.



 TOC 

E.5.  OAM for MPLS Services

Carriers are actively deploying new metropolitan data services based upon 'MPLS Services'. As with Carrier Class Ethernet deployments, new OAM capabilities need to be defined. Current work to date primarily involves the definitions of requirements for these capabilities. These are discussed in [RFC4377] (Nadeau, T., Morrow, M., Swallow, G., Allan, D., and S. Matsushima, “Operations and Management (OAM) Requirements for Multi-Protocol Label Switched (MPLS) Networks,” February 2006.), [RFC4378] (Allan, D. and T. Nadeau, “A Framework for Multi-Protocol Label Switching (MPLS) Operations and Management (OAM),” February 2006.), [RFC4687] (Yasukawa, S., Farrel, A., King, D., and T. Nadeau, “Operations and Management (OAM) Requirements for Point-to-Multipoint MPLS Networks,” September 2006.), Y.1710 (ITU-T Study Group 13, “ITU-T Y.1710 - Requirements for OAM Functionality in MPLS Networks,” 2002.) [Y.1710], and VIGO (Vigoureux, M., “Requirements for Operations and Management (OAM) in MPLS Transport Network,” March 2009.) [VIGO].

Once defined, we can envision exercising active tests to Verify proposed configuration changes to these MPLS-based carrier services. Automatically coupling proposed configuration changes to verification tests relying upon defined OAM active measurements of the resulting MPLS service instance will provide a robust configuration management capability for carriers while simplifying their configuration management Manual Methods and Procedures (MMPs).



 TOC 

E.6.  Active Tests for Performance Monitoring

The IPPM Working Group has developed several measurement protocols for active measurements of metrics defined in various IPPM WG documents. Specifically, the One-way Active Measurement Protocol (OWAMP) and the Two-way Active Measurement Protocol (TWAMP) are defined in [RFC4656] (Shalunov, S., Teitelbaum, B., Karp, A., Boote, J., and M. Zekauskas, “A One-way Active Measurement Protocol (OWAMP),” September 2006.), and [RFC5357] (Hedayat, K., Krzanowski, R., Morton, A., Yum, K., and J. Babiarz, “A Two-Way Active Measurement Protocol (TWAMP),” October 2008.). These allow for the generation of active test measurements for precise performance measurements across IP networks. These specify the nature of the traffic generation, the collection process and the data reduction methods to achieve precise performance metrics. The measurement protocols define their own packet formats; hence these protocols are not intended for broad continuity tests such as obtainable through the SSPM-MIB. Instead they are developed for precise performance measurements.

In applications where concern with the impact of configuration changes on fine grained network performance is important, then methods to automatically invoke these types of tests through the NETCONF protocol and YANG models become interesting.



 TOC 

Authors' Addresses

  Robert G. Cole
  Johns Hopkins University
  3400 North Charles Street
  Baltimore, MD 20723
  USA
Phone:  +1.443.910.4420
Email:  rgcole01@comcast.net
URI:  http://www.cs.jhu/~rgcole/
  
  Dan Romascanu
  Avaya
  Atidim Technology Park, Bldg. #3
  Tel Aviv 61131
  Israel
Email:  dromasca@avaya.com
  
  Andy Bierman
  InterWorking Labs
  303 Potrero Street, Suite 52
  Santa Cruz, CA 95060-2760
  USA
Email:  andyb@iwl.com