module ietf-netconf-notifications {

   namespace
     "urn:ietf:params:xml:ns:yang:ietf-netconf-notifications";

   prefix ncn;

   import ietf-inet-types { prefix inet; }
   import ietf-netconf { prefix nc; }

   organization
    "IETF NETCONF (Network Configuration Protocol) Working Group";

   contact
    "WG Web:   <http://tools.ietf.org/wg/netconf/>
     WG List:  <mailto:netconf@ietf.org>

     WG Chair: Bert Wijnen
               <mailto:bertietf@bwijnen.net>

     WG Chair: Mehmet Ersue
               <mailto:mehmet.ersue@nsn.com>

     Editor: Andy Bierman
             <mailto:andy@netconfcentral.org>";

   description
    "This module defines a YANG data model for use with the
     NETCONF protocol that allows the NETCONF client to
     receive common NETCONF base event notifications.

	 Copyright (c) 2012 IETF Trust and the persons identified as
     the document authors.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Simplified BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC 6470; see
     the RFC itself for full legal notices.";

   revision "2012-02-06" {
     description
       "Initial version.";
     reference
      "RFC 6470: NETCONF Base Notifications";
   }

  grouping common-session-parms {
    description
      "Common session parameters to identify a
       management session.";

    leaf username {
      type string;
      mandatory true;
      description
        "Name of the user for the session.";
    }

    leaf session-id {
      type nc:session-id-or-zero-type;
      mandatory true;
      description
        "Identifier of the session.
         A NETCONF session MUST be identified by a non-zero value.
         A non-NETCONF session MAY be identified by the value zero.";
    }

    leaf source-host {
      type inet:ip-address;
      description
        "Address of the remote host for the session.";
    }
  }

  grouping changed-by-parms {
    description
      "Common parameters to identify the source
       of a change event, such as a configuration
       or capability change.";

	container changed-by {
      description
        "Indicates the source of the change.
         If caused by internal action, then the
         empty leaf 'server' will be present.
         If caused by a management session, then
         the name, remote host address, and session ID
         of the session that made the change will be reported.";
      choice server-or-user {
        mandatory true;
        leaf server {
          type empty;
          description
            "If present, the change was caused
             by the server.";
        }

        case by-user {
          uses common-session-parms;
        }
      } // choice server-or-user
    } // container changed-by-parms
  }


  notification netconf-config-change {
    description
      "Generated when the NETCONF server detects that the
       <running> or <startup> configuration datastore
       has been changed by a management session.
       The notification summarizes the edits that
       have been detected.

       The server MAY choose to also generate this
       notification while loading a datastore during the
       boot process for the device.";

    uses changed-by-parms;

    leaf datastore {
      type enumeration {
        enum running {
          description "The <running> datastore has changed.";
        }
        enum startup {
          description "The <startup> datastore has changed";
        }
      }
      default "running";
      description
        "Indicates which configuration datastore has changed.";
      }

    list edit {
      description
        "An edit record SHOULD be present for each distinct
         edit operation that the server has detected on
         the target datastore.  This list MAY be omitted
         if the detailed edit operations are not known.
         The server MAY report entries in this list for
         changes not made by a NETCONF session (e.g., CLI).";

      leaf target {
        type instance-identifier;
        description
          "Topmost node associated with the configuration change.
           A server SHOULD set this object to the node within
           the datastore that is being altered.  A server MAY
           set this object to one of the ancestors of the actual
           node that was changed, or omit this object, if the
           exact node is not known.";
      }

      leaf operation {
        type nc:edit-operation-type;
        description
          "Type of edit operation performed.
           A server MUST set this object to the NETCONF edit
           operation performed on the target datastore.";
      }
    } // list edit
  } // notification netconf-config-change

  notification netconf-capability-change {
    description
      "Generated when the NETCONF server detects that
       the server capabilities have changed.
       Indicates which capabilities have been added, deleted,
       and/or modified.  The manner in which a server
       capability is changed is outside the scope of this
       document.";

    uses changed-by-parms;

    leaf-list added-capability {
      type inet:uri;
      description
        "List of capabilities that have just been added.";
    }

    leaf-list deleted-capability {
      type inet:uri;
      description
        "List of capabilities that have just been deleted.";
    }

    leaf-list modified-capability {
      type inet:uri;
      description
        "List of capabilities that have just been modified.
         A capability is considered to be modified if the
         base URI for the capability has not changed, but
         one or more of the parameters encoded at the end of
         the capability URI have changed.
         The new modified value of the complete URI is returned.";
    }
  } // notification netconf-capability-change


  notification netconf-session-start {
    description
      "Generated when a NETCONF server detects that a
       NETCONF session has started.  A server MAY generate
       this event for non-NETCONF management sessions.
       Indicates the identity of the user that started
       the session.";
    uses common-session-parms;
  } // notification netconf-session-start

  notification netconf-session-end {
    description
      "Generated when a NETCONF server detects that a
       NETCONF session has terminated.
       A server MAY optionally generate this event for
       non-NETCONF management sessions.  Indicates the
       identity of the user that owned the session,
       and why the session was terminated.";

    uses common-session-parms;

    leaf killed-by {
      when "../termination-reason = 'killed'";
      type nc:session-id-type;
      description
        "The ID of the session that directly caused this session
         to be abnormally terminated.  If this session was abnormally
         terminated by a non-NETCONF session unknown to the server,
         then this leaf will not be present.";
    }

    leaf termination-reason {
      type enumeration {
        enum "closed" {
          description
            "The session was terminated by the client in normal
             fashion, e.g., by the NETCONF <close-session>
             protocol operation.";
        }
        enum "killed" {
          description
            "The session was terminated in abnormal
             fashion, e.g., by the NETCONF <kill-session>
             protocol operation.";
        }
        enum "dropped" {
          description
            "The session was terminated because the transport layer
             connection was unexpectedly closed.";
        }
        enum "timeout" {
          description
            "The session was terminated because of inactivity,
             e.g., waiting for the <hello> message or <rpc>
             messages.";
        }
        enum "bad-hello" {
          description
            "The client's <hello> message was invalid.";
        }
        enum "other" {
          description
            "The session was terminated for some other reason.";
        }
      }
      mandatory true;
      description
        "Reason the session was terminated.";
     }
  } // notification netconf-session-end


  notification netconf-confirmed-commit {
    description
      "Generated when a NETCONF server detects that a
       confirmed-commit event has occurred.  Indicates the event
       and the current state of the confirmed-commit procedure
       in progress.";
    reference
      "RFC 6241, Section 8.4";

    uses common-session-parms {
      when "../confirm-event != 'timeout'";
    }

    leaf confirm-event {
      type enumeration {
        enum "start" {
          description
            "The confirmed-commit procedure has started.";
        }
        enum "cancel" {
          description
            "The confirmed-commit procedure has been canceled,
             e.g., due to the session being terminated, or an
             explicit <cancel-commit> operation.";
        }
        enum "timeout" {
          description
            "The confirmed-commit procedure has been canceled
             due to the confirm-timeout interval expiring.
             The common session parameters will not be present
             in this sub-mode.";
        }
        enum "extend" {
          description
            "The confirmed-commit timeout has been extended,
             e.g., by a new <confirmed-commit> operation.";
        }
        enum "complete" {
          description
            "The confirmed-commit procedure has been completed.";
        }
      }
      mandatory true;
      description
        "Indicates the event that caused the notification.";
    }

    leaf timeout {
      when
       "../confirm-event = 'start' or ../confirm-event = 'extend'";
      type uint32;
      units "seconds";
      description
        "The configured timeout value if the event type
         is 'start' or 'extend'.  This value represents
         the approximate number of seconds from the event
         time when the 'timeout' event might occur.";
    }
  } // notification netconf-confirmed-commit

}
