module notifications {

    namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
    prefix "ncEvent";

    import ietf-yang-types { prefix yang; }

    organization
      "IETF NETCONF WG";

    contact
      "netconf@ops.ietf.org";

    description
      "Conversion of the 'ncEvent' XSD in the 
       NETCONF Notifications RFC.";
         
    reference
      "RFC 5277.";

    revision 2008-07-14 {
      description "RFC 5277 version.";
    }

    typedef streamNameType {
      description
        "The name of an event stream.";
      type string;
    }

    rpc create-subscription {
      description
        "The command to create a notification subscription. It
         takes as argument the name of the notification stream
         and filter. Both of those options limit the content of
         the subscription. In addition, there are two time-related
         parameters, startTime and stopTime, which can be used to 
         select the time interval of interest to the notification
         replay feature.";

      input {
        leaf stream {
          description
            "An optional parameter that indicates which stream of events
             is of interest. If not present, then events in the default
             NETCONF stream will be sent.";
          type streamNameType;
          default "NETCONF";
        }

        anyxml filter {
          description
            "An optional parameter that indicates which subset of all
             possible events is of interest. The format of this
             parameter is the same as that of the filter parameter
             in the NETCONF protocol operations. If not present,
             all events not precluded by other parameters will 
             be sent.";
        }

        leaf startTime {
          description
            "A parameter used to trigger the replay feature and
             indicates that the replay should start at the time
             specified. If start time is not present, this is not a
             replay subscription.";
          type yang:date-and-time;
        }

        leaf stopTime {
          // must ". >= ../startTime";
          description
            "An optional parameter used with the optional replay
             feature to indicate the newest notifications of
             interest. If stop time is not present, the notifications
             will continue until the subscription is terminated.
             Must be used with startTime.";
          type yang:date-and-time;
        }
      }
    }

   container notification {
      description "internal struct to start a notification";
      config false;

      leaf eventTime {
         mandatory true;
         type yang:date-and-time;
      }

      // eventType and any data content goes here
   }  
}

