<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY RFC4741 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4741.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) 
     that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->

<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->

<?rfc toc="yes"?>
<!-- generate a ToC -->

<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->

<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->

<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-cole-netconf-transaction-00" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="NETCONF Transaction Test">A Transaction Test Module for the NETCONF
                                   Verify Operation</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Robert G. Cole" initials="R.G." role=""
            surname="Cole">
      <organization>U.S. Army CERDEC</organization>

      <address>
        <postal>
          <street>328 Hopkins Road</street>
          <city>Aberdeen Proving Ground</city>
          <region>MD</region>
          <code>21005</code>
          <country>USA</country>
        </postal>

        <phone>+1.410.278.6779</phone>
        <email>robert.g.cole@us.army.mil</email>
        <uri>http://www.cs.jhu/~rgcole/</uri>
        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Dan Romascanu" initials="D." role="" surname="Romascanu">
       <organization>Avaya</organization>

       <address>
          <postal>
              <street>Atidim Technology Park, Bldg. #3</street>
              <city>Tel Aviv</city>
              <code>61131</code>
              <country>Israel</country>
          </postal>

          <email>dromasca@avaya.com</email>
       </address>
    </author>

    <author fullname="Andy Bierman" initials="A." role="" surname="Bierman">
       <organization>InterWorking Labs</organization>

       <address>
          <postal>
              <street>303 Potrero Street, Suite 52</street>
              <city>Santa Cruz, CA</city>
              <code>95060-2760</code>
              <country>USA</country>
          </postal>

          <email>andyb@iwl.com</email>
       </address>
    </author>

    <date month="July" year="2010" />

    <!-- If the month and year are both specified and are the current ones, 
         xml2rfc will fill 
         in the current day for you. 
         If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. 
         If the year is not the current one, it is 
	 necessary to specify at least a month 
         (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  
         With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>General</area>

    <workgroup>Internet Engineering Task Force</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>configuration management, verification, manets, dtns</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
      <t>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
         to afford the client and
         server a more robust and resilient configuration management
         capability.  Specifically, this document defines a transaction
         test module based upon the defined set of Uniform Resource
         Locators.  The transaction tests in this module are executed by
         the NETCONF verify operation.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>This document identifies enhancements to NETCONF
         capabilities 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, e.g.,  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 objective, we propose that
         the NETCONF protocol <xref target="RFC4741">RFC 4741</xref>
         requires extension of
         capabilities to define and manage active tests
         and assess success, i.e., Verification, (from both the
         client and the servers)
         involving server-side running configuration.
         This document augments the verify capability within NETCONF
         by defining a transaction test module.
         This allows the network management application
         to exercise the transaction tests through a standard mechanism.
         In this test module,
         the transactions are defined within the context of defined
         Uniform Resource Locators (URLs).  
         This allows the network management application
         to exercise the transaction tests through an extensible mechanism.</t>

      <t>As an example, we
         envision a NETCONF client-server interaction model
         shown in the below figure.  Here, the client issues
         a &lt;commit&gt; with the confirming option.
         As part of testing prior to issuing the confirming
         &lt;commit&gt; the client wishes to execute a set
         of verification transaction tests from the server.  It issues
         the &lt;verify&gt; operation to manage this
         aspect of verification transaction testing.
         The client passes a reference to the server indicating
         instances of specific pre-configured transaction
         tests within this module that define the
         specific test suite.  The server executes these
         as part of the NETCONF &lt;verify&gt; 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 &lt;commit&gt; to the server
         which forces the server to commit to the proposed
         configuration change; else the server backs out of the
         proposed configuration changes.</t>

      <figure align="center" anchor="interaction_model_1">
          <preamble></preamble>
          <artwork align="left"><![CDATA[
  +------+                              +------+
  |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>
 |
 |
---

          ]]></artwork>
          <postamble></postamble>
      </figure>

      <t>This, and other Use Cases, are discussed further in the
         document defining the verify operation <xref target="VERIFY">VERIFY</xref>
         of NETCONF.</t>

      <t>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.
          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.</t>

      <t>In this document, 
         we define the transaction.yang module as a first example of a test module
         supporting the NETCONF verify operation.  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 will promote future integrated network management capabilities
         as opposed to device management capabilities.</t>


      <section title="Benefits of This Work">
        <t>Our objective is to promote 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,
           <xref target="YANG">YANG</xref>.</t>

        <t>The envisioned benefits of a standardized set of mechanisms and capabilities for
           verification testing include:</t>
        <t><list style="symbols">
            <t>Minimize faulty configuration and network disconnects,</t>
            <t>Provide for uniform methods for control, execution and
               reporting of verification testing in multi-vendor networks,</t>
            <t>Improve automation of extensive verification testing,</t>
            <t>Provide opportunity for device modelers to associate/recommend
               tests tied to specific configuration items, and</t>
            <t>Improve efficiency of coordinated network upgrades.</t>
        </list></t>

      </section>



      <section title="Requirements Language">
        <t>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 
        <xref target="RFC2119">RFC 2119</xref>.</t>
      </section>



      <section title="Outline">
      <t>In the remainder of this document we present a
         description of the transaction.yang test module.
         This is followed with
         'Acknowledgments' and 'IANA Considerations' sections.
         A section on 'Security Considerations' is provided
         concluding the main body of the document.
         In the appendix, i.e., 'Appendix A: transaction.yang', we
         define the transaction.yang module.</t>
      </section>
    </section>


    <section title="The Transation Test Module">
      <t>The transaction.yang module
         defines a set of transaction tests that can be instrumented 
         via NETCONF and executed through the verify operation.
         We briefly discuss the verify operation in the
         context of executing the transaction tests.  We then discuss
         the construction of the transaction.yang module.
         The definitive definition of the transaction.yang module
         is found in Appendix A of this document.</t>

        <section title="Verify Capability">
          <t>The verify operation, defined in
             <xref target="VERIFY">VERIFY</xref>, allows for the
             execution of verification tests within the
             NETCONF protocol. The construction of the verify operation
             is illustrated in the following diagram.  Here a verify
             command is given with associated timeout and test-template
             parameters.  The multiple test-template parameters
             each indicate a specific set of tests defined within the
             transaction.yang module resident on the server.
             The specific tests are pre-configured through standard
             NETCONF commands prior to issuing the verify operation.
             The definition of the verify operation allows
             various levels of reporting of the test results back to the
             NETCONF client.</t>

                   <t><figure align="center" anchor="example1">
                       <preamble></preamble>
                       <artwork align="left"><![CDATA[
<rpc xmlns="netconf-base" message-id="101">
  <verify xmlns="verify-module">
     <timeout>3600</timeout>
     <test-template xmlns:as="transaction-module">
        /tt:transaction/tt:controlTableEntry[tt:controlTableIndex=21]
        /tt:transaction/tt:controlTableEntry[tt:controlTableIndex=42]
        /tt:transaction/tt:controlTableEntry[tt:controlTableIndex=48]       
     </test-template>
     <verifyStatus>true</verifyStatus>
     <extendedStatus>false</extendedStatus>
  </verify>
</rpc>
                       ]]></artwork>
                       <postamble></postamble>
                    </figure></t>

        </section>


        <section title="Transaction Test Module Construction and Use">
           <t>The transaction.yang module is designed to support an extensible
              set of transaction test for the purpose of verification testing
              of proposed configuration changes.  As such, we have
              modeled the module after the Uniform Resource
              Locator (URL) definition.  The module is defined
              in six basic functions:</t>
        <t><list style="symbols">
            <t>Protocol - defines the set of protocol transactions
               supported by the server and referenced through the
               URL 'scheme'.</t>
            <t>Location Profile - defines a set of URLs which are
               predefined for later execution.</t>
            <t>Network Profile - defines a set of reuse-able network layer
               parameters.</t>
            <t>Metric Profile - defines the performance aspects of the
               tests, e.g., frequency, metric, etc.</t>
            <t>Control Table - defines the specific verification
               test sets.</t>
            <t>Results table - contains the results of the verification
               test sets.</t>
        </list></t>
        <t>Refer to Appendix A for the definitive statement of the
           transaction.yang module.</t>
        </section>
    </section>


<!--    
    <section anchor="Acknowledgements" title="Acknowledgements">
      <t></t>
    </section> 
-->

    <!-- Possibly a 'Contributors' section ... -->

    <section anchor="IANA" title="IANA Considerations">
      <t>This memo includes no request to IANA.</t>

      <t>All drafts are required to have an IANA considerations section (see
      <xref target="I-D.narten-iana-considerations-rfc2434bis">the update of
      RFC 2434</xref> 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.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>This section presents the required security considerations for all
         IETF protocols and capabilities.
         This section was developed following guidelines within
         <xref target="RFC3552">RFC 3552</xref>.</t>

      <t>This section addresses the security concerns and objectives for the
         for the use of the transaction.yang module within the context of the
         :verify capability in NETCONF.
         (NOTE: This section is currently TBD.)</t>
  
      <t>Security issues related to the use of the transaction.yang
         module should
         address issues specific to the remote execution of verification
         tests.
         Here is an initial list of potential considerations:</t>

       <t><list style="symbols">
          <t>Verification requires server-side tests that
             require that packets to be injected
             into the network for the purpose of measuring some performance
             characteristics.  As such, associated test modules will contain sensitive
             network and application data; e.g., user IDs and passwords.  
             Further, if security is compromised, this capability could provide a source
             for denial-of-service, and potential other, attacks.</t>
          <t>The configuration of verification tests may require passing
             sensitive network information.  For this reason, this
             configuration information should be encrypted prior to
             transport over the network.</t>
          <t>Some test attributes configure username and password information for some
             application-level protocols as indicated above.  Access to these
             attributes may provide unauthorized use of resources.</t>
          <t>Some test attributes configure the size and rate of traffic flows for the
             purpose of performance measurements.  Access to these attributes may
             exacerbate the use of this capability in denial-of-service attacks.
             It is recommended that test modules define a maximum packet rate on the 
             device and to indicate this rate. Other objects that control
             aspects of the test packets related to packet size and rate are
             will exist in test modules and bounds on these should be set.</t>
          <t>Test module objects will exist which set
             the source and destination addresses on the
             packet headers.  The server should not
             allow the setting of source addresses on the test packets other than
             those that are administratively configured onto the server.</t>
       </list></t>

    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included 
     files in the same
     directory as the including file. 
     You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  
     These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->


    <references title="Normative References">
      <!--?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?-->

      &RFC2119;
      &RFC4741;

    </references>



    <references title="Informative References">
      <!-- Here we use entities that we defined at the beginning. -->

      &RFC3552;

      &I-D.narten-iana-considerations-rfc2434bis;

      <reference anchor="VERIFY">
        <front>
          <title>A Verification Procedure for Configuration Management within NETCONF</title>
          <author initials="R.G." surname="Cole"/>
          <author initials="D." surname="Romascanu"/>
          <author initials="A." surname="Bierman"/>
          <date month="July" year="2010" />
        </front>
      </reference>

      <reference anchor="YANG">
        <front>
          <title>YANG - A data modeling language for NETCONF</title>
          <author initials="M." surname="Bjorklund">
            <organization></organization>
          </author>
          <date month="June" year="2010" />
        </front>
      </reference>


    </references>




<!-- **********Start the Appendices Here****************** -->


    <section anchor="appendixA" title="transaction.yang Module">
      <t>In this appendix we define the transaction.yang 
         model for use in conjunction
         with the robust-netconf capabilities.</t>

      <figure align="center" anchor="transaction">
         <preamble></preamble>
         <artwork align="left"><![CDATA[

=========Contents of "transaction.yang"============

module transaction {

       namespace "unassigned";
       prefix "tt";

       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
            US Army CERDEC
            Space and Terrestrial Communications
            Email: robert.g.cole@us.army.mil

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

            description
                "The module for entities implementing
                 the transaction test set in support
                 of the NETCONF verify capability.";

            revision 2010-05-07 {
                description "Zeroth revision:
                    Initial version of the transaction
                    testing module.  This is modeled after
                    the draft ping.yang module from
                    draft-cole-netconf-verify-00.txt and
                    from the definition of Uniform Resource
                    Locators (URLs) [RFC 1738].

                    This module allows a management
                    agent to instrument and execute
                    a broad set of protocol transactions
                    in order to perform a broad range of
                    connectivity tests.  These tests, executed
                    in conjunction with the NETCONF verify
                    operation, can be used to provide a
                    robust configuration change capability.
                    This capability is described in
                    draft-cole-netconf-verify-00.txt.";
            }


            ---------------------------------------------------
            ---------------------------------------------------
            --  The Protocol defines a set of protocol       --
            --  transactions supported by the device and     --
            --  are referenced through the 'scheme from      --
            --  IANA registered URLs.                        --
            ---------------------------------------------------
            ---------------------------------------------------
            list transactionProtocolEntry {
                key "transactionProtocolIndex";
                config false;

                leaf transactionProtocolIndex {
                    type uint32;
                    description
                        "Identifies a specific protocol
                         transaction supported by this device.
                         The transaction protocol is defined
                         in the definition of the 'scheme'
                         of the associated URL.  These are
                         registered by IANA [RFC 4395].";
                }

                leaf transactionProtocolScheme {
                    type string;
                    description
                        "Identifies the specific protocol
                         scheme associated with this protocol
                         transaction, e.g., http, ftp, dns, sip, etc.,
                         supported by this device. The term
                         'scheme' is defined in the context of the
                         URL defintions in RFC [1738].";
                }

                leaf protocolReference {
                    type string;
                    config false;
                    description "URL for the definition of this
                                 URL scheme.  This could be a reference
                                 to an RFC or to a publically 
                                 available reference.";
                }

            }
            -- ends the transactionProtocolEntry list --



            ---------------------------------------------------
            ---------------------------------------------------
            --  The Location Profile defines a set of URLs   --
            --  which are pre-defined in the server for the  --
            --  purpose of executing verification tests      --
            --  controlled by the NETCONF verify operation.  --
            ---------------------------------------------------
            ---------------------------------------------------
            list locationProfileEntry {
                key "locationProfileIndex";
                config true;

                leaf locationProfileIndex {
                    type uint32;
                    description
                        "Identifies the specific URL to be
                         accessed by execution of the transaction
                         test.";
                }

                leaf locationProfileSchemeIndex {
                    type uint32;
                    description
                        "Contains the integer referencing the
                         transactionProtocolIndex in the capabilities
                         set found in the transactionProtocolEntry
                         in this module.";
                }

                leaf locationProfileUser {
                    type string;
                    description
                       "The username associated with the URL
                        defined within this locationProfileEntry.
                        Some URLs do not allow user entries, in which
                        case this string should be NULL.";
                }

                leaf locationProfilePassword {
                    type string;
                    description
                        "The password associated with the URL
                         defined within this loactionProfileEntry.
                         If the specific scheme associated with
                         this URL does not allow user and password,
                         then this string should be set to NULL.";
                }

                leaf locationProfileHost {
                    type string;
                    description
                        "The fully qualified domain name of a 
                         network host, or its IPv4 or IPv6 
                         address.";
                }

                leaf locationProfilePort {
                    type uint32;
                    description
                        "The port number with which to connect.
                         Most schemes designate protocols that 
                         have a default port number. If this
                         is set to NULL, then the default port
                         number is to be used. Else another 
                         port number may be supplied here.";
                }

                leaf locationProfilePath {
                    type string;
                    description
                        "The reaming parts of the URL necessary
                         to completely define the desired
                         transaction.";
                }
            }
            -- ends the locationProfileEntry --




            ---------------------------------------------------
            ---------------------------------------------------
            --  The Network Profile defines a set of         --
            --  reuseable network layer parameters to fully  --
            --  define the transaction test ultimately       --
            --  defined in the Test Control.                 --
            ---------------------------------------------------
            ---------------------------------------------------
            list networkProfileEntry {
                key "networkProfileIndex";
                config true;

                leaf locationProfileIndex {
                    type uint32;
                    description
                        "Identifies the specific network layer
                         parameters for the transaction tests
                         ultimately defined in the Control Table.";
                }

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

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

                leaf noFrag {
                    type Boolean;
                    description
                        "Defines the 'No Fragmentation' header
                         setting in the IP packet headers of the
                         transaction request message.";
                }

                leaf TOS {
                    type uint8;
                    description
                        "Identifies the TOS field of the IPv4
                         or IPv6 packet headers of the transaction
                         request message.  The TOS field is eight bits
                         in length and this integer is to be converted
                         to an 8 bit binary to define the appropriate
                         TOS Field setting.";
                }

                leaf flowLabel {
                    type uint16;
                    description
                        "Identifies the Flow Label field of the IPv6
                         packet headers of the transaction request
                         message.  The Flow Label field is 16 bits
                         in length and this integer is to be converted
                         to an 16 bit binary to define the appropriate
                         Flow Label Field setting.  In the event that
                         the protocolType is set to 'IPv4', then this
                         value is to be set to zero and is to be
                         ignored in the creation of the IPv4 packets.";
                }

                leaf protocolType {
                    type inet:ip-address-type;
                    description
                        "Identifies the network protocol type for the
                         network packets generated as part of the
                         transaction request messages.  The allowed
                         values are 'IPv4' or 'IPv6'.";
                }

                leaf looseSrcRoute {
                    type string;
                    description
                        "Identifies the Loose Source Route header
                         extension for the IP packets forming the
                         transaction request message.";
                }

            }
            -- ends the networkProfileEntry --




            ---------------------------------------------------
            ---------------------------------------------------
            --  The Metric Profile performance aspects of    --
            --  tests, including, e.g., frequency, metric,   --
            --  success criteria, etc.                       --
            ---------------------------------------------------
            ---------------------------------------------------
            list metricProfileEntry {
                key "metricProfileIndex";
                config true;

                leaf metricProfileIndex {
                    type uint32;
                    description
                        "Identifies the specific metric
                         profile for use in the definition of
                         the transaction tests in the Control Table.";
                }

                leaf spacing {
                    type uint32;
                    description
                        "The number of seconds between executing
                         subsequent transactions.";
                }

                leaf number {
                    type uint32;
                    description
                        "The number of transactions to be executed.";
                }

                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."; 
                }

            }
            -- ends the metricProfileEntry --




            ---------------------------------------------------
            ---------------------------------------------------
            --  The Control Table defines the test sets.     --
            ---------------------------------------------------
            ---------------------------------------------------
            list controlTableEntry {
                key "controlTableIndex";
                config true;

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

                }

                leaf locationProfileIndex {
                    type uint32;
                    description
                        "The index from the locationProfileEntry
                         indicating the URL for this test.";

                }

                leaf networkProfileIndex {
                    type uint32;
                    description
                        "The index from the locationPprofileEntry
                         indicating the URL for this test.";

                }

                leaf metricProfileIndex {
                    type uint32;
                    description
                        "The index from the locationPprofileEntry
                         indicating the URL for this 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.";
                }

            }
            -- ends the controlTableEntry --




            ---------------------------------------------------
            ---------------------------------------------------
            -- The Results Table  contains                   --
            --    the results from the test.                 --
            ---------------------------------------------------
            ---------------------------------------------------
            list resultsTableEntry {
                key "resultsTableIndex";
                config true;

                leaf resultsTableIndex {
                    type uint32;
                    description
                        "Identifies the specific Control Table
                         row of the transaction test template to be
                         executed, which represents the
                         verification test sets performed
                         on the device as part of the verify
                         operation.";

                }

                leaf startTime {
                    type yang:date-and-time;
                    config false;
                    description
                        "The time the first transaction
                         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 received {
                    type uint32;
                    config false;
                    description
                        "The number of successful
                         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 transaction response
                         message.  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 transactions
                                exceeded the 'threshold'.";
                        }
                        enum failure{
                            description
                               "Set to 'failure' if the number
                                of successful transactions is less
                                than or equal to the 'threshold'.";
                        }
                    config false;
                    description
                        "The result of the previous test.";
                }

                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;
                }

            }
            -- ends the Results Table --
   }

         ]]></artwork>
         <postamble></postamble>
      </figure>
    </section>




    <!-- Change Log
v00 2010-06-12  RGC   Initial version, developed from previous
                      <draft-cole-robust-netconf-02.txt> draft.
                      Now focused solely on the definition of the verify
                      capability and requirements for associated test modules.

     -->
  </back>
</rfc>
