Addition of common model.

Change-Id: If5fd6bae01a59ebf9d27f8369ac3403c83f70fad
diff --git a/models/common/src/main/yang/ietf-snmp-usm@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-usm@2014-12-10.yang
new file mode 100644
index 0000000..17024a3
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-usm@2014-12-10.yang
@@ -0,0 +1,216 @@
+submodule ietf-snmp-usm {
+
+  belongs-to ietf-snmp {
+    prefix snmp;
+  }
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import ietf-netconf-acm {
+    prefix nacm;
+  }
+
+  include ietf-snmp-common;
+  include ietf-snmp-target;
+  include ietf-snmp-proxy;
+
+  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 the User-based Security Model (USM) of SNMP.
+
+     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 3414: User-based Security Model (USM) for version 3 of the
+       Simple Network Management Protocol (SNMPv3)";
+
+  revision 2014-12-10 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+  }
+
+  grouping key {
+    leaf key {
+      type yang:hex-string;
+      mandatory true;
+      nacm:default-deny-all;
+      description
+        "Localized key specified as a list of colon-specified
+         hexadecimal octets.";
+    }
+  }
+
+  grouping user-list {
+    list user {
+      key "name";
+
+      reference
+        "RFC 3414: User-based Security Model (USM) for version 3
+           of the Simple Network Management Protocol (SNMPv3).
+           SNMP-USER-BASED-SM-MIB.usmUserTable";
+
+      leaf name {
+        type snmp:identifier;
+        reference
+          "RFC 3414: User-based Security Model (USM) for version 3
+             of the Simple Network Management Protocol (SNMPv3).
+             SNMP-USER-BASED-SM-MIB.usmUserName";
+      }
+      container auth {
+        presence "enables authentication";
+        description
+          "Enables authentication of the user.";
+        choice protocol {
+          mandatory true;
+          reference
+            "RFC 3414: User-based Security Model (USM) for version 3
+               of the Simple Network Management Protocol (SNMPv3).
+               SNMP-USER-BASED-SM-MIB.usmUserAuthProtocol";
+          container md5 {
+            uses key;
+            reference
+              "RFC 3414: User-based Security Model (USM) for
+                 version 3 of the Simple Network Management Protocol
+                 (SNMPv3).
+                 SNMP-USER-BASED-SM-MIB.usmHMACMD5AuthProtocol";
+          }
+          container sha {
+            uses key;
+            reference
+              "RFC 3414: User-based Security Model (USM) for
+                 version 3 of the Simple Network Management Protocol
+                 (SNMPv3).
+                 SNMP-USER-BASED-SM-MIB.usmHMACSHAAuthProtocol";
+          }
+        }
+      }
+      container priv {
+        must "../auth" {
+          error-message
+            "when privacy (confidentiality) is used, "
+          + "authentication must also be used";
+        }
+        presence "enables encryption";
+        description
+          "Enables encryption of SNMP messages.";
+
+        choice protocol {
+          mandatory true;
+          reference
+            "RFC 3414: User-based Security Model (USM) for version 3
+               of the Simple Network Management Protocol (SNMPv3).
+               SNMP-USER-BASED-SM-MIB.usmUserPrivProtocol";
+          container des {
+            uses key;
+            reference
+              "RFC 3414: User-based Security Model (USM) for
+                 version 3 of the Simple Network Management Protocol
+                 (SNMPv3).
+                 SNMP-USER-BASED-SM-MIB.usmDESPrivProtocol";
+          }
+          container aes {
+            uses key;
+
+            reference
+              "RFC 3826: The Advanced Encryption Standard (AES)
+                 Cipher Algorithm in the SNMP User-based Security
+                 Model.
+                 SNMP-USM-AES-MIB.usmAesCfb128Protocol";
+          }
+        }
+      }
+    }
+  }
+
+  augment /snmp:snmp {
+
+    container usm {
+      description
+        "Configuration of the User-based Security Model.";
+      container local {
+        uses user-list;
+      }
+
+      list remote {
+        key "engine-id";
+
+        leaf engine-id {
+          type snmp:engine-id;
+          reference
+            "RFC 3414: User-based Security Model (USM) for version 3
+               of the Simple Network Management Protocol (SNMPv3).
+               SNMP-USER-BASED-SM-MIB.usmUserEngineID";
+        }
+
+        uses user-list;
+      }
+    }
+  }
+
+  grouping usm-target-params {
+    container usm {
+      description
+        "User-based SNMPv3 parameters type.
+
+         Represents snmpTargetParamsMPModel '3' and
+         snmpTargetParamsSecurityModel '3'.";
+      leaf user-name {
+        type snmp:security-name;
+        mandatory true;
+
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetParamsSecurityName";
+      }
+      leaf security-level {
+        type snmp:security-level;
+        mandatory true;
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetParamsSecurityLevel";
+      }
+    }
+  }
+
+  augment /snmp:snmp/snmp:target-params/snmp:params {
+    case usm {
+      uses usm-target-params;
+    }
+  }
+
+}