submodule ietf-snmp-notification {

  belongs-to ietf-snmp {
    prefix snmp;
  }

  include ietf-snmp-common;
  include ietf-snmp-target;

  organization
    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

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

     WG Chair: Thomas Nadeau
               <mailto:tnadeau@lucidvision.com>
     WG Chair: Juergen Schoenwaelder
               <mailto:j.schoenwaelder@jacobs-university.de>

     Editor:   Martin Bjorklund
               <mailto:mbj@tail-f.com>

     Editor:   Juergen Schoenwaelder
               <mailto:j.schoenwaelder@jacobs-university.de>";

  description
    "This submodule contains a collection of YANG definitions
     for configuring SNMP notifications.

     Copyright (c) 2014 IETF Trust and the persons identified as
     authors of the code.  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 7407; see
     the RFC itself for full legal notices.";

  reference
    "RFC 3413: Simple Network Management Protocol (SNMP)
       Applications";

  revision 2014-12-10 {
    description
      "Initial revision.";
    reference
      "RFC 7407: A YANG Data Model for SNMP Configuration";
  }

  feature notification-filter {
    description
      "A server implements this feature if it supports SNMP
      notification filtering.";
    reference
      "RFC 3413: Simple Network Management Protocol (SNMP)
         Applications";
  }

  augment /snmp:snmp {

    list notify {
      key name;
      description
        "Targets that will receive notifications.

         Entries in this list are mapped 1-1 to entries in
         snmpNotifyTable, except that if an entry in snmpNotifyTable
         has an snmpNotifyTag for which no snmpTargetAddrEntry
         exists, then the snmpNotifyTable entry is not mapped to an
         entry in this list.";
      reference
        "RFC 3413: Simple Network Management Protocol (SNMP).
           Applications.
           SNMP-NOTIFICATION-MIB.snmpNotifyTable";

      leaf name {
        type snmp:identifier;
        description
          "An arbitrary name for the list entry.";
        reference
          "RFC 3413: Simple Network Management Protocol (SNMP).
             Applications.
             SNMP-NOTIFICATION-MIB.snmpNotifyName";
      }
      leaf tag {
        type snmp:tag-value;
        mandatory true;
        description
          "Target tag, selects a set of notification targets.

           Implementations MAY restrict the values of this leaf
           to be one of the available values of /snmp/target/tag in
           a valid configuration.";
        reference
          "RFC 3413: Simple Network Management Protocol (SNMP).
             Applications.
             SNMP-NOTIFICATION-MIB.snmpNotifyTag";
      }
      leaf type {
        type enumeration {
          enum trap { value 1; }
          enum inform { value 2; }
        }
        default trap;
        description
          "Defines the notification type to be generated.";

        reference
          "RFC 3413: Simple Network Management Protocol (SNMP).
             Applications.
             SNMP-NOTIFICATION-MIB.snmpNotifyType";
      }
    }

    list notify-filter-profile {
      if-feature snmp:notification-filter;
      key name;

      description
        "Notification filter profiles.

         The leaf /snmp/target/notify-filter-profile is used
         to associate a filter profile with a target.

         If an entry in this list is referred to by one or more
         /snmp/target/notify-filter-profile items, each such
         notify-filter-profile is represented by one
         snmpNotifyFilterProfileEntry.

         If an entry in this list is not referred to by any
         /snmp/target/notify-filter-profile, the entry is not mapped
         to snmpNotifyFilterProfileTable.";
      reference
        "RFC 3413: Simple Network Management Protocol (SNMP).
           Applications.
           SNMP-NOTIFICATION-MIB.snmpNotifyFilterProfileTable
           SNMP-NOTIFICATION-MIB.snmpNotifyFilterTable";

      leaf name {
        type snmp:identifier;
        description
          "Name of the filter profile.";
        reference
          "RFC 3413: Simple Network Management Protocol (SNMP).
             Applications.
             SNMP-NOTIFICATION-MIB.snmpNotifyFilterProfileName";
      }

      leaf-list include {
        type snmp:wildcard-object-identifier;
        description
          "A family of subtrees included in this filter.";

        reference
          "RFC 3413: Simple Network Management Protocol (SNMP).
             Applications.
             SNMP-NOTIFICATION-MIB.snmpNotifyFilterSubtree
             SNMP-NOTIFICATION-MIB.snmpNotifyFilterMask
             SNMP-NOTIFICATION-MIB.snmpNotifyFilterType";
      }

      leaf-list exclude {
        type snmp:wildcard-object-identifier;
        description
          "A family of subtrees excluded from this filter.";
        reference
          "RFC 3413: Simple Network Management Protocol (SNMP).
             Applications.
             SNMP-NOTIFICATION-MIB.snmpNotifyFilterSubtree
             SNMP-NOTIFICATION-MIB.snmpNotifyFilterMask
             SNMP-NOTIFICATION-MIB.snmpNotifyFilterType";
      }
    }

  }

  augment /snmp:snmp/snmp:target-params {
    reference
      "RFC 3413: Simple Network Management Protocol (SNMP).
         Applications.
         SNMP-NOTIFICATION-MIB.snmpNotifyFilterProfileTable";
    leaf notify-filter-profile {
      if-feature snmp:notification-filter;
      type leafref {
        path "/snmp/notify-filter-profile/name";
      }
      description
        "This leafref leaf is used to represent the sparse
         relationship between the /snmp/target-params list and the
         /snmp/notify-filter-profile list.";
      reference
        "RFC 3413: Simple Network Management Protocol (SNMP).
           Applications.
           SNMP-NOTIFICATION-MIB.snmpNotifyFilterProfileName";
    }
  }

}
