submodule ietf-snmp-engine {

  belongs-to ietf-snmp {
    prefix snmp;
  }

  import ietf-inet-types {
    prefix inet;
  }

  include ietf-snmp-common;

  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 engines.

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

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

  augment /snmp:snmp {

    container engine {

      description
        "Configuration of the SNMP engine.";

      leaf enabled {
        type boolean;
        default "false";
        description
          "Enables the SNMP engine.";
      }

      list listen {
        key "name";
        description
          "Configuration of the transport endpoints on which the
           engine listens.";

        leaf name {
          type snmp:identifier;
          description
            "An arbitrary name for the list entry.";
        }

        choice transport {
          mandatory true;
          description
            "The transport-protocol-specific parameters for this
             endpoint.  Submodules providing configuration for
             additional transports are expected to augment this
             choice.";
          case udp {
            container udp {
              leaf ip {
                type inet:ip-address;
                mandatory true;
                description
                  "The IPv4 or IPv6 address on which the engine
                   listens.";
              }
              leaf port {
                type inet:port-number;
                description
                  "The UDP port on which the engine listens.

                   If the port is not configured, an engine that
                   acts as a Command Responder uses port 161, and
                   an engine that acts as a Notification Receiver
                   uses port 162.";
              }
            }
          }
        }
      }

      container version {
        description
          "SNMP version used by the engine.";
        leaf v1 {
          type empty;
        }
        leaf v2c {
          type empty;
        }
        leaf v3 {
          type empty;
        }
      }

      leaf engine-id {
        type snmp:engine-id;
        description
          "The local SNMP engine's administratively assigned unique
           identifier.

           If this leaf is not set, the device automatically
           calculates an engine ID, as described in RFC 3411.  A
           server MAY initialize this leaf with the automatically
           created value.";
        reference
          "RFC 3411: An Architecture for Describing Simple Network
             Management Protocol (SNMP) Management
             Frameworks.
             SNMP-FRAMEWORK-MIB.snmpEngineID";
      }

      leaf enable-authen-traps {
        type boolean;
        description
          "Indicates whether the SNMP entity is permitted to
           generate authenticationFailure traps.";
        reference
          "RFC 3418: Management Information Base (MIB) for the
             Simple Network Management Protocol (SNMP)
             SNMPv2-MIB.snmpEnableAuthenTraps";
      }
    }
  }
}
