diff --git a/models/common/src/main/yang/iana-crypt-hash@2014-08-06.yang b/models/common/src/main/yang/iana-crypt-hash@2014-08-06.yang
new file mode 100644
index 0000000..44c4674
--- /dev/null
+++ b/models/common/src/main/yang/iana-crypt-hash@2014-08-06.yang
@@ -0,0 +1,120 @@
+module iana-crypt-hash {
+  namespace "urn:ietf:params:xml:ns:yang:iana-crypt-hash";
+  prefix ianach;
+
+  organization "IANA";
+  contact
+    "        Internet Assigned Numbers Authority
+
+     Postal: ICANN
+             12025 Waterfront Drive, Suite 300
+             Los Angeles, CA  90094-2536
+             United States
+
+     Tel:    +1 310 301 5800
+     E-Mail: iana@iana.org>";
+  description
+    "This YANG module defines a type for storing passwords
+     using a hash function and features to indicate which hash
+     functions are supported by an implementation.
+
+     The latest revision of this YANG module can be obtained from
+     the IANA web site.
+
+     Requests for new values should be made to IANA via
+     email (iana@iana.org).
+
+     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).
+
+     The initial version of this YANG module is part of RFC 7317;
+     see the RFC itself for full legal notices.";
+
+  revision 2014-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7317: A YANG Data Model for System Management";
+  }
+
+  typedef crypt-hash {
+    type string {
+      pattern
+        '$0$.*'
+      + '|$1$[a-zA-Z0-9./]{1,8}$[a-zA-Z0-9./]{22}'
+      + '|$5$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{43}'
+      + '|$6$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{86}';
+    }
+    description
+      "The crypt-hash type is used to store passwords using
+       a hash function.  The algorithms for applying the hash
+       function and encoding the result are implemented in
+       various UNIX systems as the function crypt(3).
+
+       A value of this type matches one of the forms:
+
+         $0$<clear text password>
+         $<id>$<salt>$<password hash>
+         $<id>$<parameter>$<salt>$<password hash>
+
+       The '$0$' prefix signals that the value is clear text.  When
+       such a value is received by the server, a hash value is
+       calculated, and the string '$<id>$<salt>$' or
+       $<id>$<parameter>$<salt>$ is prepended to the result.  This
+       value is stored in the configuration data store.
+       If a value starting with '$<id>$', where <id> is not '0', is
+       received, the server knows that the value already represents a
+       hashed value and stores it 'as is' in the data store.
+
+       When a server needs to verify a password given by a user, it
+       finds the stored password hash string for that user, extracts
+       the salt, and calculates the hash with the salt and given
+       password as input.  If the calculated hash value is the same
+       as the stored value, the password given by the client is
+       accepted.
+
+       This type defines the following hash functions:
+
+         id | hash function | feature
+         ---+---------------+-------------------
+          1 | MD5           | crypt-hash-md5
+          5 | SHA-256       | crypt-hash-sha-256
+          6 | SHA-512       | crypt-hash-sha-512
+
+       The server indicates support for the different hash functions
+       by advertising the corresponding feature.";
+    reference
+      "IEEE Std 1003.1-2008 - crypt() function
+       RFC 1321: The MD5 Message-Digest Algorithm
+       FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+  feature crypt-hash-md5 {
+    description
+      "Indicates that the device supports the MD5
+       hash function in 'crypt-hash' values.";
+    reference "RFC 1321: The MD5 Message-Digest Algorithm";
+  }
+
+  feature crypt-hash-sha-256 {
+    description
+      "Indicates that the device supports the SHA-256
+       hash function in 'crypt-hash' values.";
+    reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+  feature crypt-hash-sha-512 {
+    description
+      "Indicates that the device supports the SHA-512
+       hash function in 'crypt-hash' values.";
+    reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-complex-types@2011-03-15.yang b/models/common/src/main/yang/ietf-complex-types@2011-03-15.yang
new file mode 100644
index 0000000..dd967ba
--- /dev/null
+++ b/models/common/src/main/yang/ietf-complex-types@2011-03-15.yang
@@ -0,0 +1,91 @@
+module ietf-complex-types {
+
+   namespace "urn:ietf:params:xml:ns:yang:ietf-complex-types";
+   prefix "ct";
+
+   organization
+     "NETMOD WG";
+
+   contact
+     "Editor:  Bernd Linowski
+               <bernd.linowski.ext@nsn.com>
+      Editor:  Mehmet Ersue
+               <mehmet.ersue@nsn.com>
+      Editor:  Siarhei Kuryla
+               <s.kuryla@gmail.com>";
+
+   description
+      "YANG extensions for complex types and typed instance
+      identifiers.
+
+      Copyright (c) 2011 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 6095; see
+      the RFC itself for full legal notices.";
+
+       revision 2011-03-15 {
+           description "Initial revision.";
+       }
+
+        extension complex-type {
+            description "Defines a complex-type.";
+            reference "Section 2.2, complex-type Extension Statement";
+            argument type-identifier {
+                yin-element true;
+            }
+        }
+
+        extension extends {
+            description "Defines the base type of a complex-type.";
+            reference "Section 2.5, extends Extension Statement";
+            argument base-type-identifier {
+                yin-element true;
+            }
+        }
+        extension abstract {
+            description "Makes the complex-type abstract.";
+            reference "Section 2.6, abstract Extension Statement";
+            argument status;
+        }
+
+        extension instance {
+            description "Declares an instance of the given
+                 complex type.";
+            reference "Section 2.3, instance Extension Statement";
+            argument ct-instance-identifier {
+                yin-element true;
+            }
+        }
+
+        extension instance-list {
+            description "Declares a list of instances of the given
+                 complex type";
+            reference "Section 2.4, instance-list Extension Statement";
+            argument ct-instance-identifier {
+                yin-element true;
+            }
+        }
+
+        extension instance-type {
+            description "Tells to which type instance the instance
+                         identifier refers.";
+            reference "Section 3.2, instance-type Extension Statement";
+            argument target-type-identifier {
+                yin-element true;
+            }
+        }
+
+        feature complex-types {
+            description "Indicates that the server supports
+                         complex types and instance identifiers.";
+        }
+
+   }
diff --git a/models/common/src/main/yang/ietf-inet-types@2013-07-15.yang b/models/common/src/main/yang/ietf-inet-types@2013-07-15.yang
new file mode 100644
index 0000000..eacefb6
--- /dev/null
+++ b/models/common/src/main/yang/ietf-inet-types@2013-07-15.yang
@@ -0,0 +1,458 @@
+module ietf-inet-types {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+  prefix "inet";
+
+  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: David Kessens
+              <mailto:david.kessens@nsn.com>
+
+    WG Chair: Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>
+
+    Editor:   Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>";
+
+  description
+   "This module contains a collection of generally useful derived
+    YANG data types for Internet addresses and related things.
+
+    Copyright (c) 2013 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 6991; see
+    the RFC itself for full legal notices.";
+
+  revision 2013-07-15 {
+    description
+     "This revision adds the following new data types:
+      - ip-address-no-zone
+      - ipv4-address-no-zone
+      - ipv6-address-no-zone";
+    reference
+     "RFC 6991: Common YANG Data Types";
+  }
+
+  revision 2010-09-24 {
+    description
+     "Initial revision.";
+    reference
+     "RFC 6021: Common YANG Data Types";
+  }
+
+  /*** collection of types related to protocol fields ***/
+
+  typedef ip-version {
+    type enumeration {
+      enum unknown {
+        value "0";
+        description
+         "An unknown or unspecified version of the Internet
+          protocol.";
+      }
+      enum ipv4 {
+        value "1";
+        description
+         "The IPv4 protocol as defined in RFC 791.";
+      }
+      enum ipv6 {
+        value "2";
+        description
+         "The IPv6 protocol as defined in RFC 2460.";
+      }
+    }
+    description
+     "This value represents the version of the IP protocol.
+
+      In the value set and its semantics, this type is equivalent
+      to the InetVersion textual convention of the SMIv2.";
+    reference
+     "RFC  791: Internet Protocol
+      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+      RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  typedef dscp {
+    type uint8 {
+      range "0..63";
+    }
+    description
+     "The dscp type represents a Differentiated Services Code Point
+      that may be used for marking packets in a traffic stream.
+      In the value set and its semantics, this type is equivalent
+      to the Dscp textual convention of the SMIv2.";
+    reference
+     "RFC 3289: Management Information Base for the Differentiated
+                Services Architecture
+      RFC 2474: Definition of the Differentiated Services Field
+                (DS Field) in the IPv4 and IPv6 Headers
+      RFC 2780: IANA Allocation Guidelines For Values In
+                the Internet Protocol and Related Headers";
+  }
+
+  typedef ipv6-flow-label {
+    type uint32 {
+      range "0..1048575";
+    }
+    description
+     "The ipv6-flow-label type represents the flow identifier or Flow
+      Label in an IPv6 packet header that may be used to
+      discriminate traffic flows.
+
+      In the value set and its semantics, this type is equivalent
+      to the IPv6FlowLabel textual convention of the SMIv2.";
+    reference
+     "RFC 3595: Textual Conventions for IPv6 Flow Label
+      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+  }
+
+  typedef port-number {
+    type uint16 {
+      range "0..65535";
+    }
+    description
+     "The port-number type represents a 16-bit port number of an
+      Internet transport-layer protocol such as UDP, TCP, DCCP, or
+      SCTP.  Port numbers are assigned by IANA.  A current list of
+      all assignments is available from <http://www.iana.org/>.
+
+      Note that the port number value zero is reserved by IANA.  In
+      situations where the value zero does not make sense, it can
+      be excluded by subtyping the port-number type.
+      In the value set and its semantics, this type is equivalent
+      to the InetPortNumber textual convention of the SMIv2.";
+    reference
+     "RFC  768: User Datagram Protocol
+      RFC  793: Transmission Control Protocol
+      RFC 4960: Stream Control Transmission Protocol
+      RFC 4340: Datagram Congestion Control Protocol (DCCP)
+      RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  /*** collection of types related to autonomous systems ***/
+
+  typedef as-number {
+    type uint32;
+    description
+     "The as-number type represents autonomous system numbers
+      which identify an Autonomous System (AS).  An AS is a set
+      of routers under a single technical administration, using
+      an interior gateway protocol and common metrics to route
+      packets within the AS, and using an exterior gateway
+      protocol to route packets to other ASes.  IANA maintains
+      the AS number space and has delegated large parts to the
+      regional registries.
+
+      Autonomous system numbers were originally limited to 16
+      bits.  BGP extensions have enlarged the autonomous system
+      number space to 32 bits.  This type therefore uses an uint32
+      base type without a range restriction in order to support
+      a larger autonomous system number space.
+
+      In the value set and its semantics, this type is equivalent
+      to the InetAutonomousSystemNumber textual convention of
+      the SMIv2.";
+    reference
+     "RFC 1930: Guidelines for creation, selection, and registration
+                of an Autonomous System (AS)
+      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+      RFC 4001: Textual Conventions for Internet Network Addresses
+      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
+                Number Space";
+  }
+
+  /*** collection of types related to IP addresses and hostnames ***/
+
+  typedef ip-address {
+    type union {
+      type inet:ipv4-address;
+      type inet:ipv6-address;
+    }
+    description
+     "The ip-address type represents an IP address and is IP
+      version neutral.  The format of the textual representation
+      implies the IP version.  This type supports scoped addresses
+      by allowing zone identifiers in the address format.";
+    reference
+     "RFC 4007: IPv6 Scoped Address Architecture";
+  }
+
+  typedef ipv4-address {
+    type string {
+      pattern
+        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+      + '(%[\p{N}\p{L}]+)?';
+    }
+    description
+      "The ipv4-address type represents an IPv4 address in
+       dotted-quad notation.  The IPv4 address may include a zone
+       index, separated by a % sign.
+
+       The zone index is used to disambiguate identical address
+       values.  For link-local addresses, the zone index will
+       typically be the interface index number or the name of an
+       interface.  If the zone index is not present, the default
+       zone of the device will be used.
+
+       The canonical format for the zone index is the numerical
+       format";
+  }
+
+  typedef ipv6-address {
+    type string {
+      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+            + '(%[\p{N}\p{L}]+)?';
+      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+            + '(%.+)?';
+    }
+    description
+     "The ipv6-address type represents an IPv6 address in full,
+      mixed, shortened, and shortened-mixed notation.  The IPv6
+      address may include a zone index, separated by a % sign.
+
+      The zone index is used to disambiguate identical address
+      values.  For link-local addresses, the zone index will
+      typically be the interface index number or the name of an
+      interface.  If the zone index is not present, the default
+      zone of the device will be used.
+
+      The canonical format of IPv6 addresses uses the textual
+      representation defined in Section 4 of RFC 5952.  The
+      canonical format for the zone index is the numerical
+      format as described in Section 11.2 of RFC 4007.";
+    reference
+     "RFC 4291: IP Version 6 Addressing Architecture
+      RFC 4007: IPv6 Scoped Address Architecture
+      RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  typedef ip-address-no-zone {
+    type union {
+      type inet:ipv4-address-no-zone;
+      type inet:ipv6-address-no-zone;
+    }
+    description
+     "The ip-address-no-zone type represents an IP address and is
+      IP version neutral.  The format of the textual representation
+      implies the IP version.  This type does not support scoped
+      addresses since it does not allow zone identifiers in the
+      address format.";
+    reference
+     "RFC 4007: IPv6 Scoped Address Architecture";
+  }
+
+  typedef ipv4-address-no-zone {
+    type inet:ipv4-address {
+      pattern '[0-9\.]*';
+    }
+    description
+      "An IPv4 address without a zone index.  This type, derived from
+       ipv4-address, may be used in situations where the zone is
+       known from the context and hence no zone index is needed.";
+  }
+
+  typedef ipv6-address-no-zone {
+    type inet:ipv6-address {
+      pattern '[0-9a-fA-F:\.]*';
+    }
+    description
+      "An IPv6 address without a zone index.  This type, derived from
+       ipv6-address, may be used in situations where the zone is
+       known from the context and hence no zone index is needed.";
+    reference
+     "RFC 4291: IP Version 6 Addressing Architecture
+      RFC 4007: IPv6 Scoped Address Architecture
+      RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  typedef ip-prefix {
+    type union {
+      type inet:ipv4-prefix;
+      type inet:ipv6-prefix;
+    }
+    description
+     "The ip-prefix type represents an IP prefix and is IP
+      version neutral.  The format of the textual representations
+      implies the IP version.";
+  }
+
+  typedef ipv4-prefix {
+    type string {
+      pattern
+         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
+    }
+    description
+     "The ipv4-prefix type represents an IPv4 address prefix.
+      The prefix length is given by the number following the
+      slash character and must be less than or equal to 32.
+
+      A prefix length value of n corresponds to an IP address
+      mask that has n contiguous 1-bits from the most
+      significant bit (MSB) and all other bits set to 0.
+
+      The canonical format of an IPv4 prefix has all bits of
+      the IPv4 address set to zero that are not part of the
+      IPv4 prefix.";
+  }
+
+  typedef ipv6-prefix {
+    type string {
+      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
+      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+            + '(/.+)';
+    }
+
+    description
+     "The ipv6-prefix type represents an IPv6 address prefix.
+      The prefix length is given by the number following the
+      slash character and must be less than or equal to 128.
+
+      A prefix length value of n corresponds to an IP address
+      mask that has n contiguous 1-bits from the most
+      significant bit (MSB) and all other bits set to 0.
+
+      The IPv6 address should have all bits that do not belong
+      to the prefix set to zero.
+
+      The canonical format of an IPv6 prefix has all bits of
+      the IPv6 address set to zero that are not part of the
+      IPv6 prefix.  Furthermore, the IPv6 address is represented
+      as defined in Section 4 of RFC 5952.";
+    reference
+     "RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  /*** collection of domain name and URI types ***/
+
+  typedef domain-name {
+    type string {
+      pattern
+        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+      + '|\.';
+      length "1..253";
+    }
+    description
+     "The domain-name type represents a DNS domain name.  The
+      name SHOULD be fully qualified whenever possible.
+
+      Internet domain names are only loosely specified.  Section
+      3.5 of RFC 1034 recommends a syntax (modified in Section
+      2.1 of RFC 1123).  The pattern above is intended to allow
+      for current practice in domain name use, and some possible
+      future expansion.  It is designed to hold various types of
+      domain names, including names used for A or AAAA records
+      (host names) and other records, such as SRV records.  Note
+      that Internet host names have a stricter syntax (described
+      in RFC 952) than the DNS recommendations in RFCs 1034 and
+      1123, and that systems that want to store host names in
+      schema nodes using the domain-name type are recommended to
+      adhere to this stricter standard to ensure interoperability.
+
+      The encoding of DNS names in the DNS protocol is limited
+      to 255 characters.  Since the encoding consists of labels
+      prefixed by a length bytes and there is a trailing NULL
+      byte, only 253 characters can appear in the textual dotted
+      notation.
+
+      The description clause of schema nodes using the domain-name
+      type MUST describe when and how these names are resolved to
+      IP addresses.  Note that the resolution of a domain-name value
+      may require to query multiple DNS records (e.g., A for IPv4
+      and AAAA for IPv6).  The order of the resolution process and
+      which DNS record takes precedence can either be defined
+      explicitly or may depend on the configuration of the
+      resolver.
+
+      Domain-name values use the US-ASCII encoding.  Their canonical
+      format uses lowercase US-ASCII characters.  Internationalized
+      domain names MUST be A-labels as per RFC 5890.";
+    reference
+     "RFC  952: DoD Internet Host Table Specification
+      RFC 1034: Domain Names - Concepts and Facilities
+      RFC 1123: Requirements for Internet Hosts -- Application
+                and Support
+      RFC 2782: A DNS RR for specifying the location of services
+                (DNS SRV)
+      RFC 5890: Internationalized Domain Names in Applications
+                (IDNA): Definitions and Document Framework";
+  }
+
+  typedef host {
+    type union {
+      type inet:ip-address;
+      type inet:domain-name;
+    }
+    description
+     "The host type represents either an IP address or a DNS
+      domain name.";
+  }
+
+  typedef uri {
+    type string;
+    description
+     "The uri type represents a Uniform Resource Identifier
+      (URI) as defined by STD 66.
+
+      Objects using the uri type MUST be in US-ASCII encoding,
+      and MUST be normalized as described by RFC 3986 Sections
+      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
+      percent-encoding is removed, and all case-insensitive
+      characters are set to lowercase except for hexadecimal
+      digits, which are normalized to uppercase as described in
+      Section 6.2.2.1.
+
+      The purpose of this normalization is to help provide
+      unique URIs.  Note that this normalization is not
+      sufficient to provide uniqueness.  Two URIs that are
+      textually distinct after this normalization may still be
+      equivalent.
+
+      Objects using the uri type may restrict the schemes that
+      they permit.  For example, 'data:' and 'urn:' schemes
+      might not be appropriate.
+
+      A zero-length URI is not a valid URI.  This can be used to
+      express 'URI absent' where required.
+
+      In the value set and its semantics, this type is equivalent
+      to the Uri SMIv2 textual convention defined in RFC 5017.";
+    reference
+     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+                Group: Uniform Resource Identifiers (URIs), URLs,
+                and Uniform Resource Names (URNs): Clarifications
+                and Recommendations
+      RFC 5017: MIB Textual Conventions for Uniform Resource
+                Identifiers (URIs)";
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-ipfix-psamp@2012-09-05.yang b/models/common/src/main/yang/ietf-ipfix-psamp@2012-09-05.yang
new file mode 100644
index 0000000..744f096
--- /dev/null
+++ b/models/common/src/main/yang/ietf-ipfix-psamp@2012-09-05.yang
@@ -0,0 +1,2232 @@
+module ietf-ipfix-psamp {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-ipfix-psamp";
+  prefix ipfix;
+
+  import ietf-yang-types { prefix yang; }
+  import ietf-inet-types { prefix inet; }
+
+  organization
+    "IETF IPFIX Working Group";
+
+  contact
+    "WG Web:  <http://tools.ietf.org/wg/ipfix/>
+    WG List:  <ipfix@ietf.org>
+
+    WG Chair: Nevil Brownlee
+              <n.brownlee@auckland.ac.nz>
+
+    WG Chair: Juergen Quittek
+              <quittek@neclab.eu>
+
+    Editor:   Gerhard Muenz
+              <muenz@net.in.tum.de>";
+
+  description
+    "IPFIX/PSAMP Configuration Data Model
+
+    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).";
+
+  revision 2012-09-05 {
+    description "Initial version";
+    reference "RFC 6728: Configuration Data Model for the IP Flow
+      Information Export (IPFIX) and Packet Sampling (PSAMP)
+      Protocols";
+  }
+
+  /*****************************************************************
+  * Features
+  *****************************************************************/
+
+  feature exporter {
+    description "If supported, the Monitoring Device can be used as
+      an Exporter.  Exporting Processes can be configured.";
+  }
+
+  feature collector {
+    description "If supported, the Monitoring Device can be used as
+      a Collector.  Collecting Processes can be configured.";
+  }
+
+  feature meter {
+    description "If supported, Observation Points, Selection
+      Processes, and Caches can be configured.";
+  }
+
+  feature psampSampCountBased {
+    description "If supported, the Monitoring Device supports
+      count-based Sampling.  The Selector method sampCountBased can
+      be configured.";
+  }
+
+  feature psampSampTimeBased {
+    description "If supported, the Monitoring Device supports
+      time-based Sampling.  The Selector method sampTimeBased can
+      be configured.";
+  }
+
+  feature psampSampRandOutOfN {
+    description "If supported, the Monitoring Device supports
+      random n-out-of-N Sampling.  The Selector method
+      sampRandOutOfN can be configured.";
+  }
+
+  feature psampSampUniProb {
+    description "If supported, the Monitoring Device supports
+      uniform probabilistic Sampling.  The Selector method
+      sampUniProb can be configured.";
+  }
+
+  feature psampFilterMatch {
+    description "If supported, the Monitoring Device supports
+      property match Filtering.  The Selector method filterMatch
+      can be configured.";
+  }
+
+  feature psampFilterHash {
+    description "If supported, the Monitoring Device supports
+      hash-based Filtering.  The Selector method filterHash can be
+      configured.";
+  }
+
+  feature immediateCache {
+    description "If supported, the Monitoring Device supports
+      Caches generating PSAMP Packet Reports by configuration with
+      immediateCache.";
+  }
+
+  feature timeoutCache {
+    description "If supported, the Monitoring Device supports
+      Caches generating IPFIX Flow Records by configuration with
+      timeoutCache.";
+  }
+
+  feature naturalCache {
+    description "If supported, the Monitoring Device supports
+      Caches generating IPFIX Flow Records by configuration with
+      naturalCache.";
+  }
+
+  feature permanentCache {
+    description "If supported, the Monitoring Device supports
+      Caches generating IPFIX Flow Records by configuration with
+      permanentCache.";
+  }
+
+  feature udpTransport {
+    description "If supported, the Monitoring Device supports UDP
+      as the transport protocol.";
+  }
+
+  feature tcpTransport {
+    description "If supported, the Monitoring Device supports TCP
+      as the transport protocol.";
+  }
+
+  feature fileReader {
+    description "If supported, the Monitoring Device supports the
+      configuration of Collecting Processes as File Readers.";
+  }
+
+  feature fileWriter {
+    description "If supported, the Monitoring Device supports the
+      configuration of Exporting Processes as File Writers.";
+  }
+
+  /*****************************************************************
+  * Identities
+  *****************************************************************/
+
+  /*** Hash function identities ***/
+  identity hashFunction {
+    description "Base identity for all hash functions used for
+      hash-based packet Filtering.  Identities derived from
+      this base are used by the leaf
+      /ipfix/selectionProcess/selector/filterHash/hashFunction.";
+  }
+  identity BOB {
+    base "hashFunction";
+    description "BOB hash function";
+    reference "RFC 5475, Section 6.2.4.1.";
+  }
+  identity IPSX {
+    base "hashFunction";
+    description "IPSX hash function";
+    reference "RFC 5475, Section 6.2.4.1.";
+  }
+  identity CRC {
+    base "hashFunction";
+    description "CRC hash function";
+    reference "RFC 5475, Section 6.2.4.1.";
+  }
+
+  /*** Export mode identities ***/
+  identity exportMode {
+    description "Base identity for different usages of export
+      destinations configured for an Exporting Process.
+      Identities derived from this base are used by the leaf
+      /ipfix/exportingProcess/exportMode.";
+  }
+  identity parallel {
+    base "exportMode";
+    description "Parallel export of Data Records to all
+      destinations configured for the Exporting Process.";
+  }
+  identity loadBalancing {
+    base "exportMode";
+    description "Load-balancing between the different destinations
+      configured for the Exporting Process.";
+  }
+  identity fallback {
+    base "exportMode";
+    description "Export to the primary destination (i.e., the first
+      SCTP, UDP, TCP, or file destination configured for the
+      Exporting Process).  If the export to the primary destination
+      fails, the Exporting Process tries to export to the secondary
+      destination.  If the secondary destination fails as well, it
+      continues with the tertiary, etc.";
+  }
+
+  /*** Options type identities ***/
+  identity optionsType {
+    description "Base identity for report types exported with
+      options.  Identities derived from this base are used by the leaf
+      /ipfix/exportingProcess/options/optionsType.";
+  }
+  identity meteringStatistics {
+    base "optionsType";
+    description "Metering Process Statistics.";
+    reference "RFC 5101, Section 4.1.";
+  }
+  identity meteringReliability {
+    base "optionsType";
+    description "Metering Process Reliability Statistics.";
+    reference "RFC 5101, Section 4.2.";
+  }
+  identity exportingReliability {
+    base "optionsType";
+    description "Exporting Process Reliability
+      Statistics.";
+    reference "RFC 5101, Section 4.3.";
+  }
+  identity flowKeys {
+    base "optionsType";
+    description "Flow Keys.";
+    reference "RFC 5101, Section 4.4.";
+  }
+  identity selectionSequence {
+    base "optionsType";
+    description "Selection Sequence and Selector Reports.";
+    reference "RFC 5476, Sections 6.5.1 and 6.5.2.";
+  }
+  identity selectionStatistics {
+    base "optionsType";
+    description "Selection Sequence Statistics Report.";
+    reference "RFC 5476, Sections 6.5.3.";
+  }
+  identity accuracy {
+    base "optionsType";
+    description "Accuracy Report.";
+    reference "RFC 5476, Section 6.5.4.";
+  }
+  identity reducingRedundancy {
+    base "optionsType";
+    description "Enables the utilization of Options Templates to
+      reduce redundancy in the exported Data Records.";
+    reference "RFC 5473.";
+  }
+  identity extendedTypeInformation {
+    base "optionsType";
+    description "Export of extended type information for
+      enterprise-specific Information Elements used in the
+      exported Templates.";
+    reference "RFC 5610.";
+  }
+
+  /*****************************************************************
+  * Type definitions
+  *****************************************************************/
+
+  typedef ieNameType {
+    type string {
+      length "1..max";
+      pattern "\S+";
+    }
+    description "Type for Information Element names.  Whitespaces
+      are not allowed.";
+  }
+
+  typedef ieIdType {
+    type uint16 {
+      range "1..32767" {
+        description "Valid range of Information Element
+            identifiers.";
+        reference "RFC 5102, Section 4.";
+      }
+    }
+    description "Type for Information Element identifiers.";
+  }
+
+  typedef nameType {
+    type string {
+      length "1..max";
+      pattern "\S(.*\S)?";
+    }
+    description "Type for 'name' leafs, which are used to identify
+      specific instances within lists, etc.
+      Leading and trailing whitespaces are not allowed.";
+  }
+
+  typedef ifNameType {
+    type string {
+      length "1..255";
+    }
+    description "This corresponds to the DisplayString textual
+      convention of SNMPv2-TC, which is used for ifName in the IF
+      MIB module.";
+    reference "RFC 2863 (ifName).";
+  }
+
+  typedef direction {
+    type enumeration {
+      enum ingress {
+        description "This value is used for monitoring incoming
+          packets.";
+      }
+      enum egress {
+        description "This value is used for monitoring outgoing
+          packets.";
+      }
+      enum both {
+        description "This value is used for monitoring incoming and
+          outgoing packets.";
+      }
+    }
+    description "Direction of packets going through an interface or
+      linecard.";
+  }
+
+  typedef transportSessionStatus {
+    type enumeration {
+      enum inactive {
+        description "This value MUST be used for Transport Sessions
+          that are specified in the system but currently not active.
+          The value can be used for Transport Sessions that are
+          backup (secondary) sessions.";
+      }
+      enum active {
+        description "This value MUST be used for Transport Sessions
+          that are currently active and transmitting or receiving
+          data.";
+      }
+      enum unknown {
+        description "This value MUST be used if the status of the
+          Transport Sessions cannot be detected by the device.  This
+          value should be avoided as far as possible.";
+      }
+    }
+    description "Status of a Transport Session.";
+    reference "RFC 6615, Section 8 (ipfixTransportSessionStatus).";
+  }
+
+  /*****************************************************************
+  * Groupings
+  *****************************************************************/
+
+  grouping observationPointParameters {
+    description "Interface as input to Observation Point.";
+    leaf observationPointId {
+      type uint32;
+      config false;
+      description "Observation Point ID (i.e., the value of the
+        Information Element observationPointId) assigned by the
+        Monitoring Device.";
+      reference "IANA registry for IPFIX Entities,
+        http://www.iana.org/assignments/ipfix.";
+    }
+    leaf observationDomainId {
+      type uint32;
+      mandatory true;
+      description "The Observation Domain ID associates the
+        Observation Point to an Observation Domain.  Observation
+        Points with identical Observation Domain IDs belong to the
+        same Observation Domain.
+        Note that this parameter corresponds to
+        ipfixObservationPointObservationDomainId in the IPFIX MIB
+        module.";
+      reference "RFC 5101; RFC 6615, Section 8
+        (ipfixObservationPointObservationDomainId).";
+    }
+    leaf-list ifName {
+      type ifNameType;
+      description "List of names identifying interfaces of the
+        Monitoring Device.  The Observation Point observes packets at
+        the specified interfaces.";
+    }
+    leaf-list ifIndex {
+      type uint32;
+      description "List of ifIndex values pointing to entries in the
+        ifTable of the IF-MIB module maintained by the Monitoring
+        Device.  The Observation Point observes packets at the
+        specified interfaces.
+        This parameter SHOULD only be used if an SNMP agent enables
+        access to the ifTable.
+        Note that this parameter corresponds to
+        ipfixObservationPointPhysicalInterface in the IPFIX MIB
+        module.";
+      reference "RFC 2863; RFC 6615, Section 8
+        (ipfixObservationPointPhysicalInterface).";
+    }
+    leaf-list entPhysicalName {
+      type string;
+      description "List of names identifying physical entities of the
+        Monitoring Device.  The Observation Point observes packets at
+        the specified entities.";
+    }
+    leaf-list entPhysicalIndex {
+      type uint32;
+      description "List of entPhysicalIndex values pointing to
+        entries in the entPhysicalTable of the ENTITY-MIB module
+        maintained by the Monitoring Device.  The Observation Point
+        observes packets at the specified entities.
+        This parameter SHOULD only be used if an SNMP agent enables
+        access to the entPhysicalTable.
+        Note that this parameter corresponds to
+        ipfixObservationPointPhysicalEntity in the IPFIX MIB
+        module.";
+      reference "RFC 4133; RFC 6615, Section 8
+        (ipfixObservationPointPhysicalInterface).";
+    }
+    leaf direction {
+      type direction;
+      default both;
+      description "Direction of packets.  If not applicable (e.g., in
+        the case of a sniffing interface in promiscuous mode), this
+        parameter is ignored.";
+    }
+  }
+
+  grouping sampCountBasedParameters {
+    description "Configuration parameters of a Selector applying
+      systematic count-based packet Sampling to the packet
+      stream.";
+    reference "RFC 5475, Section 5.1; RFC 5476, Section 6.5.2.1.";
+    leaf packetInterval {
+      type uint32;
+      units packets;
+      mandatory true;
+      description "The number of packets that are consecutively
+        sampled between gaps of length packetSpace.
+        This parameter corresponds to the Information Element
+        samplingPacketInterval and to psampSampCountBasedInterval
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.2.2; RFC 6727, Section 6
+        (psampSampCountBasedInterval).";
+    }
+    leaf packetSpace {
+      type uint32;
+      units packets;
+      mandatory true;
+      description "The number of unsampled packets between two
+        Sampling intervals.
+        This parameter corresponds to the Information Element
+        samplingPacketSpace and to psampSampCountBasedSpace
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.2.3; RFC 6727, Section 6
+        (psampSampCountBasedSpace).";
+    }
+  }
+
+  grouping sampTimeBasedParameters {
+    description "Configuration parameters of a Selector applying
+      systematic time-based packet Sampling to the packet
+      stream.";
+    reference "RFC 5475, Section 5.1; RFC 5476, Section 6.5.2.2.";
+    leaf timeInterval {
+      type uint32;
+      units microseconds;
+      mandatory true;
+      description "The time interval in microseconds during
+        which all arriving packets are sampled between gaps
+        of length timeSpace.
+        This parameter corresponds to the Information Element
+        samplingTimeInterval and to psampSampTimeBasedInterval
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.2.4; RFC 6727, Section 6
+        (psampSampTimeBasedInterval).";
+    }
+    leaf timeSpace {
+      type uint32;
+      units microseconds;
+      mandatory true;
+      description "The time interval in microseconds during
+        which no packets are sampled between two Sampling
+        intervals specified by timeInterval.
+        This parameter corresponds to the Information Element
+        samplingTimeInterval and to psampSampTimeBasedSpace
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.2.5; RFC 6727, Section 6
+        (psampSampTimeBasedSpace).";
+    }
+  }
+
+  grouping sampRandOutOfNParameters {
+    description "Configuration parameters of a Selector applying
+      n-out-of-N packet Sampling to the packet stream.";
+    reference "RFC 5475, Section 5.2.1; RFC 5476, Section 6.5.2.3.";
+    leaf size {
+      type uint32;
+      units packets;
+      mandatory true;
+      description "The number of elements taken from the parent
+        population.
+        This parameter corresponds to the Information Element
+        samplingSize and to psampSampRandOutOfNSize in the PSAMP
+        MIB module.";
+      reference "RFC 5477, Section 8.2.6; RFC 6727, Section 6
+        (psampSampRandOutOfNSize).";
+    }
+    leaf population {
+      type uint32;
+      units packets;
+      mandatory true;
+      description "The number of elements in the parent
+        population.
+        This parameter corresponds to the Information Element
+        samplingPopulation and to psampSampRandOutOfNPopulation
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.2.7; RFC 6727, Section 6
+        (psampSampRandOutOfNPopulation).";
+    }
+  }
+
+  grouping sampUniProbParameters {
+    description "Configuration parameters of a Selector applying
+      uniform probabilistic packet Sampling (with equal
+      probability per packet) to the packet stream.";
+    reference "RFC 5475, Section 5.2.2.1;
+      RFC 5476, Section 6.5.2.4.";
+    leaf probability {
+      type decimal64 {
+        fraction-digits 18;
+        range "0..1";
+      }
+      mandatory true;
+      description "Probability that a packet is sampled,
+        expressed as a value between 0 and 1.  The probability
+        is equal for every packet.
+        This parameter corresponds to the Information Element
+        samplingProbability and to psampSampUniProbProbability
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.2.8; RFC 6727, Section 6
+        (psampSampUniProbProbability).";
+    }
+  }
+
+  grouping filterMatchParameters {
+    description "Configuration parameters of a Selector applying
+      property match Filtering to the packet stream.
+      The field to be matched is specified as an Information
+      Element.";
+    reference "RFC 5475, Section 6.1; RFC 5476, Section 6.5.2.5.";
+    choice nameOrId {
+      mandatory true;
+      description "The field to be matched is specified by
+        either the name or the identifier of the Information
+        Element.";
+      leaf ieName {
+        type ieNameType;
+        description "Name of the Information Element.";
+      }
+      leaf ieId {
+        type ieIdType;
+        description "Identifier of the Information Element.";
+      }
+    }
+    leaf ieEnterpriseNumber {
+      type uint32;
+      default 0;
+      description "If this parameter is zero, the Information
+        Element is registered in the IANA registry of IPFIX
+        Information Elements.
+        If this parameter is configured with a non-zero private
+        enterprise number, the Information Element is
+        enterprise-specific.";
+      reference "IANA registry for Private Enterprise Numbers,
+        http://www.iana.org/assignments/enterprise-numbers;
+        IANA registry for IPFIX Entities,
+        http://www.iana.org/assignments/ipfix.";
+    }
+    leaf value {
+      type string;
+      mandatory true;
+      description "Matching value of the Information Element.";
+    }
+  }
+
+  grouping filterHashParameters {
+    description "Configuration parameters of a Selector applying
+      hash-based Filtering to the packet stream.";
+    reference "RFC 5475, Section 6.2; RFC 5476, Section 6.5.2.6.";
+    leaf hashFunction {
+      type identityref {
+        base "hashFunction";
+      }
+      default BOB;
+      description "Hash function to be applied.  According to
+        RFC 5475, Section 6.2.4.1, 'BOB' must be used in order to
+        be compliant with PSAMP.
+        This parameter functionally corresponds to
+        psampFiltHashFunction in the PSAMP MIB module.";
+      reference "RFC 6727, Section 6 (psampFiltHashFunction)";
+    }
+    leaf initializerValue {
+      type uint64;
+      description "Initializer value to the hash function.
+        If not configured by the user, the Monitoring Device
+        arbitrarily chooses an initializer value.
+        This parameter corresponds to the Information Element
+        hashInitialiserValue and to psampFiltHashInitializerValue
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.3.9; RFC 6727, Section 6
+        (psampFiltHashInitializerValue).";
+    }
+    leaf ipPayloadOffset {
+      type uint64;
+      units octets;
+      default 0;
+      description "IP payload offset indicating the position of
+        the first payload byte considered as input to the hash
+        function.
+        Default value 0 corresponds to the minimum offset that
+        must be configurable according to RFC 5476, Section
+        6.5.2.6.
+        This parameter corresponds to the Information Element
+        hashIPPayloadOffset and to psampFiltHashIpPayloadOffset
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.3.2; RFC 6727, Section 6
+        (psampFiltHashIpPayloadOffset).";
+    }
+    leaf ipPayloadSize {
+      type uint64;
+      units octets;
+      default 8;
+      description "Number of IP payload bytes used as input to
+        the hash function, counted from the payload offset.
+        If the IP payload is shorter than the payload range,
+        all available payload octets are used as input.
+        Default value 8 corresponds to the minimum IP payload
+        size that must be configurable according to RFC 5476,
+        Section 6.5.2.6.
+        This parameter corresponds to the Information Element
+        hashIPPayloadSize and to psampFiltHashIpPayloadSize
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.3.3; RFC 6727, Section 6
+        (psampFiltHashIpPayloadSize).";
+    }
+    leaf digestOutput {
+      type boolean;
+      default false;
+      description "If true, the output from this Selector is
+        included in the Packet Report as a packet digest.
+        Therefore, the configured Cache Layout needs to contain
+        a digestHashValue field.
+        This parameter corresponds to the Information Element
+        hashDigestOutput.";
+      reference "RFC 5477, Section 8.3.8.";
+    }
+    leaf outputRangeMin {
+      type uint64;
+      config false;
+      description "Beginning of the hash function's potential
+        range.
+        This parameter corresponds to the Information Element
+        hashOutputRangeMin and to psampFiltHashOutputRangeMin
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.3.4; RFC 6727, Section 6
+        (psampFiltHashOutputRangeMin).";
+    }
+    leaf outputRangeMax {
+      type uint64;
+      config false;
+      description "End of the hash function's potential range.
+        This parameter corresponds to the Information Element
+        hashOutputRangeMax and to psampFiltHashOutputRangeMax
+        in the PSAMP MIB module.";
+      reference "RFC 5477, Section 8.3.5; RFC 6727, Section 6
+        (psampFiltHashOutputRangeMax).";
+    }
+    list selectedRange {
+      key name;
+      min-elements 1;
+      description "List of hash function return ranges for
+        which packets are selected.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      leaf min {
+        type uint64;
+        description "Beginning of the hash function's selected
+          range.
+          This parameter corresponds to the Information Element
+          hashSelectedRangeMin and to psampFiltHashSelectedRangeMin
+          in the PSAMP MIB module.";
+        reference "RFC 5477, Section 8.3.6; RFC 6727, Section 6
+        (psampFiltHashSelectedRangeMin).";
+      }
+      leaf max {
+        type uint64;
+        description "End of the hash function's selected range.
+          This parameter corresponds to the Information Element
+          hashSelectedRangeMax and to psampFiltHashSelectedRangeMax
+          in the PSAMP MIB module.";
+        reference "RFC 5477, Section 8.3.7; RFC 6727, Section 6
+        (psampFiltHashSelectedRangeMax).";
+      }
+    }
+  }
+
+  grouping selectorParameters {
+    description "Configuration and state parameters of a Selector.";
+    choice Method {
+      mandatory true;
+      description "Packet selection method applied by the Selector.";
+      leaf selectAll {
+        type empty;
+        description "Method that selects all packets.";
+      }
+      container sampCountBased {
+        if-feature psampSampCountBased;
+        description "Systematic count-based packet Sampling.";
+        uses sampCountBasedParameters;
+      }
+      container sampTimeBased {
+        if-feature psampSampTimeBased;
+        description "Systematic time-based packet Sampling.";
+        uses sampTimeBasedParameters;
+      }
+      container sampRandOutOfN {
+        if-feature psampSampRandOutOfN;
+        description "n-out-of-N packet Sampling.";
+        uses sampRandOutOfNParameters;
+      }
+      container sampUniProb {
+        if-feature psampSampUniProb;
+        description "Uniform probabilistic packet Sampling.";
+        uses sampUniProbParameters;
+      }
+      container filterMatch {
+        if-feature psampFilterMatch;
+        description "Property match Filtering.";
+        uses filterMatchParameters;
+      }
+      container filterHash {
+        if-feature psampFilterHash;
+        description "Hash-based Filtering.";
+        uses filterHashParameters;
+      }
+    }
+    leaf packetsObserved {
+      type yang:counter64;
+      config false;
+      description "The number of packets observed at the input of
+        the Selector.
+        If this is the first Selector in the Selection Process,
+        this counter corresponds to the total number of packets in
+        all Observed Packet Streams at the input of the Selection
+        Process.  Otherwise, the counter corresponds to the total
+        number of packets at the output of the preceding Selector.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        selectorDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixSelectorStatsPacketsObserved in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixSelectorStatsPacketsObserved).";
+    }
+    leaf packetsDropped {
+      type yang:counter64;
+      config false;
+      description "The total number of packets discarded by the
+        Selector.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        selectorDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixSelectorStatsPacketsDropped in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixSelectorStatsPacketsDropped).";
+    }
+    leaf selectorDiscontinuityTime {
+      type yang:date-and-time;
+      config false;
+      description "Timestamp of the most recent occasion at which
+        one or more of the Selector counters suffered a
+        discontinuity.
+        Note that this parameter functionally corresponds to
+        ipfixSelectionProcessStatsDiscontinuityTime in the IPFIX
+        MIB module.  In contrast to
+        ipfixSelectionProcessStatsDiscontinuityTime, the time is
+        absolute and not relative to sysUpTime.";
+      reference "RFC 6615, Section 8
+        (ipfixSelectionProcessStatsDiscontinuityTime).";
+    }
+  }
+  grouping cacheLayoutParameters {
+    description "Cache Layout parameters used by immediateCache,
+      timeoutCache, naturalCache, and permanentCache.";
+    container cacheLayout {
+      description "Cache Layout parameters.";
+      list cacheField {
+        key name;
+        min-elements 1;
+        description "Superset of fields that are included in the
+          Packet Reports or Flow Records generated by the Cache.";
+        leaf name {
+          type nameType;
+          description "Key of this list.";
+        }
+        choice nameOrId {
+          mandatory true;
+          description "Name or identifier of the Information
+            Element.";
+          reference "RFC 5102, Section 2; IANA registry for IPFIX
+            Entities, http://www.iana.org/assignments/ipfix.";
+          leaf ieName {
+            type ieNameType;
+            description "Name of the Information Element.";
+          }
+          leaf ieId {
+            type ieIdType;
+            description "Identifier of the Information Element.";
+          }
+        }
+        leaf ieLength {
+          type uint16;
+          units octets;
+          description "Length of the field in which the Information
+            Element is encoded.  A value of 65535 specifies a
+            variable-length Information Element.  For Information
+            Elements of integer and float type, the field length MAY
+            be set to a smaller value than the standard length of
+            the abstract data type if the rules of reduced size
+            encoding are fulfilled.
+            If not configured by the user, this parameter is set by
+            the Monitoring Device.";
+          reference "RFC 5101, Section 6.2.";
+        }
+        leaf ieEnterpriseNumber {
+          type uint32;
+          default 0;
+          description "If this parameter is zero, the Information
+            Element is registered in the IANA registry of IPFIX
+            Information Elements.
+            If this parameter is configured with a non-zero private
+            enterprise number, the Information Element is
+            enterprise-specific.
+            If the enterprise number is set to 29305, this field
+            contains a Reverse Information Element.  In this case,
+            the Cache MUST generate Data Records in accordance to
+            RFC 5103.";
+          reference "RFC 5101; RFC 5103;
+            IANA registry for Private Enterprise Numbers,
+            http://www.iana.org/assignments/enterprise-numbers;
+            IANA registry for IPFIX Entities,
+            http://www.iana.org/assignments/ipfix.";
+        }
+        leaf isFlowKey {
+          when "(name(../../..) != 'immediateCache')
+            and
+            ((count(../ieEnterpriseNumber) = 0)
+            or
+            (../ieEnterpriseNumber != 29305))" {
+            description "This parameter is not available for
+              Reverse Information Elements (which have enterprise
+              number 29305).  It is also not available for
+              immediateCache.";
+          }
+          type empty;
+          description "If present, this is a flow key.";
+        }
+      }
+    }
+  }
+
+  grouping flowCacheParameters {
+    description "Configuration and state parameters of a Cache
+      generating Flow Records.";
+    leaf maxFlows {
+      type uint32;
+      units flows;
+      description "This parameter configures the maximum number of
+        Flows in the Cache, which is the maximum number of Flows
+        that can be measured simultaneously.
+        The Monitoring Device MUST ensure that sufficient resources
+        are available to store the configured maximum number of
+        Flows.
+        If the maximum number of Flows is measured, an additional
+        Flow can be measured only if an existing entry is removed.
+        However, traffic that pertains to existing Flows can
+        continue to be measured.";
+    }
+    leaf activeTimeout {
+      when "(name(..) = 'timeoutCache') or
+        (name(..) = 'naturalCache')" {
+        description "This parameter is only available for
+          timeoutCache and naturalCache.";
+      }
+      type uint32;
+      units seconds;
+      description "This parameter configures the time in
+        seconds after which a Flow is expired even though packets
+        matching this Flow are still received by the Cache.
+        The parameter value zero indicates infinity, meaning that
+        there is no active timeout.
+        If not configured by the user, the Monitoring Device sets
+        this parameter.
+        Note that this parameter corresponds to
+        ipfixMeteringProcessCacheActiveTimeout in the IPFIX
+        MIB module.";
+      reference "RFC 6615, Section 8
+        (ipfixMeteringProcessCacheActiveTimeout).";
+    }
+    leaf idleTimeout {
+      when "(name(..) = 'timeoutCache') or
+        (name(..) = 'naturalCache')" {
+        description "This parameter is only available for
+          timeoutCache and naturalCache.";
+      }
+      type uint32;
+      units seconds;
+      description "This parameter configures the time in
+        seconds after which a Flow is expired if no more packets
+        matching this Flow are received by the Cache.
+        The parameter value zero indicates infinity, meaning that
+        there is no idle timeout.
+        If not configured by the user, the Monitoring Device sets
+        this parameter.
+        Note that this parameter corresponds to
+        ipfixMeteringProcessCacheIdleTimeout in the IPFIX
+        MIB module.";
+      reference "RFC 6615, Section 8
+        (ipfixMeteringProcessCacheIdleTimeout).";
+    }
+    leaf exportInterval {
+      when "name(..) = 'permanentCache'" {
+        description "This parameter is only available for
+          permanentCache.";
+      }
+      type uint32;
+      units seconds;
+      description "This parameter configures the interval (in
+        seconds) for periodical export of Flow Records.
+        If not configured by the user, the Monitoring Device sets
+        this parameter.";
+    }
+    leaf activeFlows {
+      type yang:gauge32;
+      units flows;
+      config false;
+      description "The number of Flows currently active in this
+        Cache.
+        Note that this parameter corresponds to
+        ipfixMeteringProcessCacheActiveFlows in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixMeteringProcessCacheActiveFlows).";
+    }
+    leaf unusedCacheEntries {
+      type yang:gauge32;
+      units flows;
+      config false;
+      description "The number of unused Cache entries in this
+        Cache.
+        Note that this parameter corresponds to
+        ipfixMeteringProcessCacheUnusedCacheEntries in the IPFIX
+        MIB module.";
+      reference "RFC 6615, Section 8
+        (ipfixMeteringProcessCacheUnusedCacheEntries).";
+    }
+  }
+
+  grouping exportingProcessParameters {
+    description "Parameters of an Exporting Process.";
+    leaf exportingProcessId {
+      type uint32;
+      config false;
+      description "The identifier of the Exporting Process.
+        This parameter corresponds to the Information Element
+        exportingProcessId.  Its occurrence helps to associate
+        Exporting Process parameters with Exporing Process
+        statistics exported by the Monitoring Device using the
+        Exporting Process Reliability Statistics Template as
+        defined by the IPFIX protocol specification.";
+      reference "RFC 5101, Section 4.3; IANA registry for IPFIX
+        Entities, http://www.iana.org/assignments/ipfix.";
+    }
+    leaf exportMode {
+      type identityref {
+        base "exportMode";
+      }
+      default parallel;
+      description "This parameter determines to which configured
+        destination(s) the incoming Data Records are exported.";
+    }
+    list destination {
+      key name;
+      min-elements 1;
+      description "List of export destinations.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      choice DestinationParameters {
+        mandatory true;
+        description "Configuration parameters depend on whether
+          SCTP, UDP, or TCP is used as transport protocol, and
+          whether the destination is a file.";
+        container sctpExporter {
+          description "SCTP parameters.";
+          uses sctpExporterParameters;
+        }
+        container udpExporter {
+          if-feature udpTransport;
+          description "UDP parameters.";
+          uses udpExporterParameters;
+        }
+        container tcpExporter {
+          if-feature tcpTransport;
+          description "TCP parameters.";
+          uses tcpExporterParameters;
+        }
+        container fileWriter {
+          if-feature fileWriter;
+          description "File Writer parameters.";
+          uses fileWriterParameters;
+        }
+      }
+    }
+    list options {
+      key name;
+      description "List of options reported by the Exporting
+        Process.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      uses optionsParameters;
+    }
+  }
+
+  grouping commonExporterParameters {
+    description "Parameters of en export destination that are
+      common to all transport protocols.";
+    leaf ipfixVersion {
+      type uint16;
+      default 10;
+      description "IPFIX version number.";
+      reference "RFC 5101.";
+    }
+    leaf destinationPort {
+      type inet:port-number;
+      description "If not configured by the user, the Monitoring
+        Device uses the default port number for IPFIX, which is
+        4739 without TLS or DTLS and 4740 if TLS or DTLS is
+        activated.";
+    }
+    choice indexOrName {
+      description "Index or name of the interface as stored in the
+        ifTable of IF-MIB.
+        If configured, the Exporting Process MUST use the given
+        interface to export IPFIX Messages to the export
+        destination.
+        If omitted, the Exporting Process selects the outgoing
+        interface based on local routing decision and accepts
+        return traffic, such as transport-layer acknowledgments,
+        on all available interfaces.";
+      reference "RFC 2863.";
+      leaf ifIndex {
+        type uint32;
+        description "Index of an interface as stored in the ifTable
+          of IF-MIB.";
+        reference "RFC 2863.";
+      }
+      leaf ifName {
+        type string;
+        description "Name of an interface as stored in the ifTable
+          of IF-MIB.";
+        reference "RFC 2863.";
+      }
+    }
+    leaf sendBufferSize {
+      type uint32;
+      units bytes;
+      description "Size of the socket send buffer.
+        If not configured by the user, this parameter is set by
+        the Monitoring Device.";
+    }
+    leaf rateLimit {
+      type uint32;
+      units "bytes per second";
+      description "Maximum number of bytes per second the Exporting
+        Process may export to the given destination.  The number of
+        bytes is calculated from the lengths of the IPFIX Messages
+        exported.  If not configured, no rate limiting is performed.";
+      reference "RFC 5476, Section 6.3.";
+    }
+    container transportLayerSecurity {
+      presence "If transportLayerSecurity is present, DTLS is
+        enabled if the transport protocol is SCTP or UDP, and TLS
+        is enabled if the transport protocol is TCP.";
+      description "TLS or DTLS configuration.";
+      uses transportLayerSecurityParameters;
+    }
+    container transportSession {
+      config false;
+      description "State parameters of the Transport Session
+        directed to the given destination.";
+      uses transportSessionParameters;
+    }
+  }
+
+  grouping sctpExporterParameters {
+    description "SCTP-specific export destination parameters.";
+    uses commonExporterParameters;
+    leaf-list sourceIPAddress {
+      type inet:ip-address;
+      description "List of source IP addresses used by the
+        Exporting Process.
+        If configured, the specified addresses are eligible local
+        IP addresses of the multihomed SCTP endpoint.
+        If not configured, all locally assigned IP addresses are
+        eligible local IP addresses.";
+      reference "RFC 4960, Section 6.4.";
+    }
+    leaf-list destinationIPAddress {
+      type inet:ip-address;
+      min-elements 1;
+      description "One or more IP addresses of the Collecting
+        Process to which IPFIX Messages are sent.
+        The user MUST ensure that all configured IP addresses
+        belong to the same Collecting Process.
+        The Exporting Process tries to establish an SCTP
+        association to any of the configured destination IP
+        addresses.";
+      reference "RFC 4960, Section 6.4.";
+    }
+    leaf timedReliability {
+      type uint32;
+      units milliseconds;
+      default 0;
+      description "Lifetime in milliseconds until an IPFIX
+        Message containing Data Sets only is 'abandoned' due to
+        the timed reliability mechanism of PR-SCTP.
+        If this parameter is set to zero, reliable SCTP
+        transport is used for all Data Records.
+        Regardless of the value of this parameter, the Exporting
+        Process MAY use reliable SCTP transport for Data Sets
+        associated with Options Templates.";
+      reference "RFC 3758; RFC 4960.";
+    }
+  }
+
+  grouping udpExporterParameters {
+    description "Parameters of a UDP export destination.";
+    uses commonExporterParameters;
+    leaf sourceIPAddress {
+      type inet:ip-address;
+      description "Source IP address used by the Exporting Process.
+      If not configured, the IP address assigned to the outgoing
+      interface is used as source IP address.";
+    }
+    leaf destinationIPAddress {
+      type inet:ip-address;
+      mandatory true;
+      description "IP address of the Collection Process to which
+        IPFIX Messages are sent.";
+    }
+    leaf maxPacketSize {
+      type uint16;
+      units octets;
+      description "This parameter specifies the maximum size of
+        IP packets sent to the Collector.  If set to zero, the
+        Exporting Device MUST derive the maximum packet size
+        from path MTU discovery mechanisms.
+        If not configured by the user, this parameter is set by
+        the Monitoring Device.";
+    }
+    leaf templateRefreshTimeout {
+      type uint32;
+      units seconds;
+      default 600;
+      description "Sets time after which Templates are resent in the
+        UDP Transport Session.
+        Note that the configured lifetime MUST be adapted to the
+        templateLifeTime parameter value at the receiving Collecting
+        Process.
+        Note that this parameter corresponds to
+        ipfixTransportSessionTemplateRefreshTimeout in the IPFIX
+        MIB module.";
+      reference "RFC 5101, Section 10.3.6; RFC 6615, Section 8
+        (ipfixTransportSessionTemplateRefreshTimeout).";
+    }
+    leaf optionsTemplateRefreshTimeout {
+      type uint32;
+      units seconds;
+      default 600;
+      description "Sets time after which Options Templates are
+        resent in the UDP Transport Session.
+        Note that the configured lifetime MUST be adapted to the
+        optionsTemplateLifeTime parameter value at the receiving
+        Collecting Process.
+        Note that this parameter corresponds to
+        ipfixTransportSessionOptionsTemplateRefreshTimeout in the
+        IPFIX MIB module.";
+      reference "RFC 5101, Section 10.3.6; RFC 6615, Section 8
+        (ipfixTransportSessionOptionsTemplateRefreshTimeout).";
+    }
+    leaf templateRefreshPacket {
+      type uint32;
+      units "IPFIX Messages";
+      description "Sets number of IPFIX Messages after which
+        Templates are resent in the UDP Transport Session.
+        Note that this parameter corresponds to
+        ipfixTransportSessionTemplateRefreshPacket in the IPFIX
+        MIB module.
+        If omitted, Templates are only resent after timeout.";
+      reference "RFC 5101, Section 10.3.6; RFC 6615, Section 8
+        (ipfixTransportSessionTemplateRefreshPacket).";
+    }
+    leaf optionsTemplateRefreshPacket {
+      type uint32;
+      units "IPFIX Messages";
+      description "Sets number of IPFIX Messages after which
+        Options Templates are resent in the UDP Transport Session
+        protocol.
+        Note that this parameter corresponds to
+        ipfixTransportSessionOptionsTemplateRefreshPacket in the
+        IPFIX MIB module.
+        If omitted, Templates are only resent after timeout.";
+      reference "RFC 5101, Section 10.3.6; RFC 6615, Section 8
+        (ipfixTransportSessionOptionsTemplateRefreshPacket).";
+    }
+  }
+
+  grouping tcpExporterParameters {
+    description "Parameters of a TCP export destination.";
+    uses commonExporterParameters;
+    leaf sourceIPAddress {
+      type inet:ip-address;
+      description "Source IP address used by the Exporting Process.
+        If not configured by the user, this parameter is set by
+        the Monitoring Device to an IP address assigned to the
+        outgoing interface.";
+    }
+    leaf destinationIPAddress {
+      type inet:ip-address;
+      mandatory true;
+      description "IP address of the Collection Process to which
+        IPFIX Messages are sent.";
+    }
+  }
+
+  grouping fileWriterParameters {
+    description "File Writer parameters.";
+    leaf ipfixVersion {
+      type uint16;
+      default 10;
+      description "IPFIX version number.";
+      reference "RFC 5101.";
+    }
+    leaf file {
+      type inet:uri;
+      mandatory true;
+      description "URI specifying the location of the file.";
+    }
+    leaf bytes {
+      type yang:counter64;
+      units octets;
+      config false;
+      description "The number of bytes written by the File Writer.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileWriterDiscontinuityTime.";
+    }
+    leaf messages {
+      type yang:counter64;
+      units "IPFIX Messages";
+      config false;
+      description "The number of IPFIX Messages written by the File
+        Writer.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileWriterDiscontinuityTime.";
+    }
+    leaf discardedMessages {
+      type yang:counter64;
+      units "IPFIX Messages";
+      config false;
+      description "The number of IPFIX Messages that could not be
+        written by the File Writer due to internal buffer
+        overflows, limited storage capacity, etc.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileWriterDiscontinuityTime.";
+    }
+    leaf records {
+      type yang:counter64;
+      units "Data Records";
+      config false;
+      description "The number of Data Records written by the File
+        Writer.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileWriterDiscontinuityTime.";
+    }
+    leaf templates {
+      type yang:counter32;
+      units "Templates";
+      config false;
+      description "The number of Template Records (excluding
+        Options Template Records) written by the File Writer.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileWriterDiscontinuityTime.";
+    }
+    leaf optionsTemplates {
+      type yang:counter32;
+      units "Options Templates";
+      config false;
+      description "The number of Options Template Records written
+        by the File Writer.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileWriterDiscontinuityTime.";
+    }
+    leaf fileWriterDiscontinuityTime {
+      type yang:date-and-time;
+      config false;
+      description "Timestamp of the most recent occasion at which
+        one or more File Writer counters suffered a discontinuity.
+        In contrast to discontinuity times in the IPFIX MIB module,
+        the time is absolute and not relative to sysUpTime.";
+    }
+    list template {
+      config false;
+      description "This list contains the Templates and Options
+        Templates that have been written by the File Reader.
+        Withdrawn or invalidated (Options) Templates MUST be removed
+        from this list.";
+      uses templateParameters;
+    }
+  }
+
+  grouping optionsParameters {
+    description "Parameters specifying the data export using an
+      Options Template.";
+    leaf optionsType {
+      type identityref {
+        base "optionsType";
+      }
+      mandatory true;
+      description "Type of the exported options data.";
+    }
+    leaf optionsTimeout {
+      type uint32;
+      units milliseconds;
+      description "Time interval for periodic export of the options
+        data.  If set to zero, the export is triggered when the
+        options data has changed.
+        If not configured by the user, this parameter is set by the
+        Monitoring Device.";
+    }
+  }
+
+  grouping collectingProcessParameters {
+    description "Parameters of a Collecting Process.";
+    list sctpCollector {
+      key name;
+      description "List of SCTP receivers (sockets) on which the
+        Collecting Process receives IPFIX Messages.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      uses sctpCollectorParameters;
+    }
+    list udpCollector {
+      if-feature udpTransport;
+      key name;
+      description "List of UDP receivers (sockets) on which the
+        Collecting Process receives IPFIX Messages.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      uses udpCollectorParameters;
+    }
+    list tcpCollector {
+      if-feature tcpTransport;
+      key name;
+      description "List of TCP receivers (sockets) on which the
+        Collecting Process receives IPFIX Messages.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      uses tcpCollectorParameters;
+    }
+    list fileReader {
+      if-feature fileReader;
+      key name;
+      description "List of File Readers from which the Collecting
+        Process reads IPFIX Messages.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      uses fileReaderParameters;
+    }
+  }
+
+  grouping commonCollectorParameters {
+    description "Parameters of a Collecting Process that are
+      common to all transport protocols.";
+    leaf localPort {
+      type inet:port-number;
+      description "If not configured, the Monitoring Device uses the
+        default port number for IPFIX, which is 4739 without
+        TLS or DTLS and 4740 if TLS or DTLS is activated.";
+    }
+    container transportLayerSecurity {
+      presence "If transportLayerSecurity is present, DTLS is enabled
+        if the transport protocol is SCTP or UDP, and TLS is enabled
+        if the transport protocol is TCP.";
+      description "TLS or DTLS configuration.";
+      uses transportLayerSecurityParameters;
+    }
+    list transportSession {
+      config false;
+      description "This list contains the currently established
+        Transport Sessions terminating at the given socket.";
+      uses transportSessionParameters;
+    }
+  }
+
+  grouping sctpCollectorParameters {
+    description "Parameters of a listening SCTP socket at a
+      Collecting Process.";
+    uses commonCollectorParameters;
+    leaf-list localIPAddress {
+      type inet:ip-address;
+      description "List of local IP addresses on which the
+        Collecting Process listens for IPFIX Messages.  The IP
+        addresses are used as eligible local IP addresses of the
+        multihomed SCTP endpoint.";
+      reference "RFC 4960, Section 6.4.";
+    }
+  }
+
+  grouping udpCollectorParameters {
+    description "Parameters of a listening UDP socket at a
+      Collecting Process.";
+    uses commonCollectorParameters;
+    leaf-list localIPAddress {
+      type inet:ip-address;
+      description "List of local IP addresses on which the Collecting
+        Process listens for IPFIX Messages.";
+    }
+    leaf templateLifeTime {
+      type uint32;
+      units seconds;
+      default 1800;
+      description "Sets the lifetime of Templates for all UDP
+        Transport Sessions terminating at this UDP socket.
+        Templates that are not received again within the configured
+        lifetime become invalid at the Collecting Process.
+        As specified in RFC 5101, the Template lifetime MUST be at
+        least three times higher than the templateRefreshTimeout
+        parameter value configured on the corresponding Exporting
+        Processes.
+        Note that this parameter corresponds to
+        ipfixTransportSessionTemplateRefreshTimeout in the IPFIX
+        MIB module.";
+      reference "RFC 5101, Section 10.3.7; RFC 6615, Section 8
+        (ipfixTransportSessionTemplateRefreshTimeout).";
+    }
+    leaf optionsTemplateLifeTime {
+      type uint32;
+      units seconds;
+      default 1800;
+      description "Sets the lifetime of Options Templates for all
+        UDP Transport Sessions terminating at this UDP socket.
+        Options Templates that are not received again within the
+        configured lifetime become invalid at the Collecting
+        Process.
+        As specified in RFC 5101, the Options Template lifetime MUST
+        be at least three times higher than the
+        optionsTemplateRefreshTimeout parameter value configured on
+        the corresponding Exporting Processes.
+        Note that this parameter corresponds to
+        ipfixTransportSessionOptionsTemplateRefreshTimeout in the
+        IPFIX MIB module.";
+      reference "RFC 5101, Section 10.3.7; RFC 6615, Section 8
+        (ipfixTransportSessionOptionsTemplateRefreshTimeout).";
+    }
+    leaf templateLifePacket {
+      type uint32;
+      units "IPFIX Messages";
+      description "If this parameter is configured, Templates
+        defined in a UDP Transport Session become invalid if they
+        are neither included in a sequence of more than this number
+        of IPFIX Messages nor received again within the period of
+        time specified by templateLifeTime.
+        Note that this parameter corresponds to
+        ipfixTransportSessionTemplateRefreshPacket in the IPFIX
+        MIB module.";
+      reference "RFC 5101, Section 10.3.7; RFC 6615, Section 8
+        (ipfixTransportSessionTemplateRefreshPacket).";
+    }
+    leaf optionsTemplateLifePacket {
+      type uint32;
+      units "IPFIX Messages";
+      description "If this parameter is configured, Options
+        Templates defined in a UDP Transport Session become
+        invalid if they are neither included in a sequence of more
+        than this number of IPFIX Messages nor received again
+        within the period of time specified by
+        optionsTemplateLifeTime.
+        Note that this parameter corresponds to
+        ipfixTransportSessionOptionsTemplateRefreshPacket in the
+        IPFIX MIB module.";
+      reference "RFC 5101, Section 10.3.7; RFC 6615, Section 8
+        (ipfixTransportSessionOptionsTemplateRefreshPacket).";
+    }
+  }
+
+  grouping tcpCollectorParameters {
+    description "Parameters of a listening TCP socket at a
+      Collecting Process.";
+    uses commonCollectorParameters;
+    leaf-list localIPAddress {
+      type inet:ip-address;
+      description "List of local IP addresses on which the Collecting
+        Process listens for IPFIX Messages.";
+    }
+  }
+
+  grouping fileReaderParameters {
+    description "File Reader parameters.";
+    leaf file {
+      type inet:uri;
+      mandatory true;
+      description "URI specifying the location of the file.";
+    }
+    leaf bytes {
+      type yang:counter64;
+      units octets;
+      config false;
+      description "The number of bytes read by the File Reader.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileReaderDiscontinuityTime.";
+    }
+    leaf messages {
+      type yang:counter64;
+      units "IPFIX Messages";
+      config false;
+      description "The number of IPFIX Messages read by the File
+        Reader.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileReaderDiscontinuityTime.";
+    }
+    leaf records {
+      type yang:counter64;
+      units "Data Records";
+      config false;
+      description "The number of Data Records read by the File
+        Reader.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileReaderDiscontinuityTime.";
+    }
+    leaf templates {
+      type yang:counter32;
+      units "Templates";
+      config false;
+      description "The number of Template Records (excluding
+        Options Template Records) read by the File Reader.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileReaderDiscontinuityTime.";
+    }
+    leaf optionsTemplates {
+      type yang:counter32;
+      units "Options Templates";
+      config false;
+      description "The number of Options Template Records read by
+        the File Reader.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        fileReaderDiscontinuityTime.";
+    }
+    leaf fileReaderDiscontinuityTime {
+      type yang:date-and-time;
+      config false;
+      description "Timestamp of the most recent occasion at which
+        one or more File Reader counters suffered a discontinuity.
+        In contrast to discontinuity times in the IPFIX MIB module,
+        the time is absolute and not relative to sysUpTime.";
+    }
+    list template {
+      config false;
+      description "This list contains the Templates and Options
+        Templates that have been read by the File Reader.
+        Withdrawn or invalidated (Options) Template MUST be removed
+        from this list.";
+      uses templateParameters;
+    }
+  }
+
+  grouping transportLayerSecurityParameters {
+    description "TLS or DTLS parameters.";
+    leaf-list localCertificationAuthorityDN {
+      type string;
+      description "Distinguished names of certification authorities
+        whose certificates may be used to identify the local
+        endpoint.";
+      reference "RFC 5280.";
+    }
+    leaf-list localSubjectDN {
+      type string;
+      description "Distinguished names that may be used in the
+        certificates to identify the local endpoint.";
+      reference "RFC 5280.";
+    }
+    leaf-list localSubjectFQDN {
+      type inet:domain-name;
+      description "Fully qualified domain names that may be used to
+        in the certificates to identify the local endpoint.";
+      reference "RFC 5280.";
+    }
+    leaf-list remoteCertificationAuthorityDN {
+      type string;
+      description "Distinguished names of certification authorities
+        whose certificates are accepted to authorize remote
+        endpoints.";
+      reference "RFC 5280.";
+    }
+    leaf-list remoteSubjectDN {
+      type string;
+      description "Distinguished names which are accepted in
+        certificates to authorize remote endpoints.";
+      reference "RFC 5280.";
+    }
+    leaf-list remoteSubjectFQDN {
+      type inet:domain-name;
+      description "Fully qualified domain names that are accepted in
+        certificates to authorize remote endpoints.";
+      reference "RFC 5280.";
+    }
+  }
+
+  grouping templateParameters {
+    description "State parameters of a Template used by an Exporting
+      Process or received by a Collecting Process in a specific
+      Transport Session.  Parameter names and semantics correspond to
+      the managed objects in IPFIX-MIB";
+    reference "RFC 5101; RFC 6615, Section 8 (ipfixTemplateEntry,
+      ipfixTemplateDefinitionEntry, ipfixTemplateStatsEntry)";
+    leaf observationDomainId {
+      type uint32;
+      description "The ID of the Observation Domain for which this
+        Template is defined.
+        Note that this parameter corresponds to
+        ipfixTemplateObservationDomainId in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8
+        (ipfixTemplateObservationDomainId).";
+    }
+    leaf templateId {
+      type uint16 {
+        range "256..65535" {
+          description "Valid range of Template IDs.";
+          reference "RFC 5101";
+        }
+      }
+      description "This number indicates the Template ID in the IPFIX
+        message.
+        Note that this parameter corresponds to ipfixTemplateId in
+        the IPFIX MIB module.";
+      reference "RFC 6615, Section 8 (ipfixTemplateId).";
+    }
+    leaf setId {
+      type uint16;
+      description "This number indicates the Set ID of the Template.
+        Currently, there are two values defined.  The value 2 is used
+        for Sets containing Template definitions.  The value 3 is
+        used for Sets containing Options Template definitions.
+        Note that this parameter corresponds to ipfixTemplateSetId
+        in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8 (ipfixTemplateSetId).";
+    }
+    leaf accessTime {
+      type yang:date-and-time;
+      description "Used for Exporting Processes, this parameter
+        contains the time when this (Options) Template was last
+        sent to the Collector(s) or written to the file.
+        Used for Collecting Processes, this parameter contains the
+        time when this (Options) Template was last received from the
+        Exporter or read from the file.
+        Note that this parameter corresponds to
+        ipfixTemplateAccessTime in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8 (ipfixTemplateAccessTime).";
+    }
+    leaf templateDataRecords {
+      type yang:counter64;
+      description "The number of transmitted or received Data
+        Records defined by this (Options) Template.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        templateDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixTemplateDataRecords in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8 (ipfixTemplateDataRecords).";
+    }
+    leaf templateDiscontinuityTime {
+      type yang:date-and-time;
+      description "Timestamp of the most recent occasion at which
+        the counter templateDataRecords suffered a discontinuity.
+        Note that this parameter functionally corresponds to
+        ipfixTemplateDiscontinuityTime in the IPFIX MIB module.
+        In contrast to ipfixTemplateDiscontinuityTime, the time
+        is absolute and not relative to sysUpTime.";
+      reference "RFC 6615, Section 8
+        (ipfixTemplateDiscontinuityTime).";
+    }
+    list field {
+      description "This list contains the (Options) Template
+        fields of which the (Options) Template is defined.
+        The order of the list corresponds to the order of the fields
+        in the (Option) Template Record.";
+      leaf ieId {
+        type ieIdType;
+        description "This parameter indicates the Information
+          Element identifier of the field.
+          Note that this parameter corresponds to
+          ipfixTemplateDefinitionIeId in the IPFIX MIB module.";
+        reference "RFC 5101; RFC 6615, Section 8
+          (ipfixTemplateDefinitionIeId).";
+      }
+      leaf ieLength {
+        type uint16;
+        units octets;
+        description "This parameter indicates the length of the
+          Information Element of the field.
+          Note that this parameter corresponds to
+          ipfixTemplateDefinitionIeLength in the IPFIX MIB
+          module.";
+        reference "RFC 5101; RFC 6615, Section 8
+          (ipfixTemplateDefinitionIeLength).";
+      }
+      leaf ieEnterpriseNumber {
+        type uint32;
+        description "This parameter indicates the IANA enterprise
+          number of the authority defining the Information Element
+          identifier.
+          If the Information Element is not enterprise-specific,
+          this state parameter is zero.
+          Note that this parameter corresponds to
+          ipfixTemplateDefinitionIeEnterpriseNumber in the IPFIX
+          MIB module.";
+        reference "RFC 6615, Section 8
+          (ipfixTemplateDefinitionIeEnterpriseNumber);
+          IANA registry for Private Enterprise Numbers,
+          http://www.iana.org/assignments/enterprise-numbers.";
+      }
+      leaf isFlowKey {
+        when "../../setId = 2" {
+          description "This parameter is available for non-Options
+            Templates (Set ID is 2).";
+        }
+        type empty;
+        description "If present, this is a Flow Key field.
+          Note that this corresponds to flowKey(1) being set in
+          ipfixTemplateDefinitionFlags.";
+        reference "RFC 6615, Section 8
+          (ipfixTemplateDefinitionFlags).";
+      }
+      leaf isScope {
+        when "../../setId = 3" {
+          description "This parameter is available for Options
+            Templates (Set ID is 3).";
+        }
+        type empty;
+        description "If present, this is a scope field.
+          Note that this corresponds to scope(0) being set in
+          ipfixTemplateDefinitionFlags.";
+        reference "RFC 6615, Section 8
+          (ipfixTemplateDefinitionFlags).";
+      }
+    }
+  }
+
+  grouping transportSessionParameters {
+    description "State parameters of a Transport Session originating
+      from an Exporting Process or terminating at a Collecting
+      Process.  Parameter names and semantics correspond to the
+      managed objects in IPFIX-MIB.";
+    reference "RFC 5101; RFC 6615, Section 8
+      (ipfixTransportSessionEntry,
+       ipfixTransportSessionStatsEntry).";
+    leaf ipfixVersion {
+      type uint16;
+      description "Used for Exporting Processes, this parameter
+        contains the version number of the IPFIX protocol that the
+        Exporter uses to export its data in this Transport Session.
+        Hence, it is identical to the value of the configuration
+        parameter ipfixVersion of the outer SctpExporter,
+        UdpExporter, or TcpExporter node.
+        Used for Collecting Processes, this parameter contains the
+        version number of the IPFIX protocol it receives for
+        this Transport Session.  If IPFIX Messages of different
+        IPFIX protocol versions are received, this parameter
+        contains the maximum version number.
+        Note that this parameter corresponds to
+        ipfixTransportSessionIpfixVersion in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionIpfixVersion).";
+    }
+    leaf sourceAddress {
+      type inet:ip-address;
+      description "The source address of the Exporter of the
+        IPFIX Transport Session.
+        If the transport protocol is SCTP, this is one of the
+        potentially many IP addresses of the Exporter.
+        Preferably, the source IP address of the path that is
+        usually selected by the Exporter to send IPFIX Messages to
+        the Collector SHOULD be used.
+        Note that this parameter functionally corresponds to
+        ipfixTransportSessionSourceAddressType and
+        ipfixTransportSessionSourceAddress in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionSourceAddressType,
+        ipfixTransportSessionSourceAddress);
+        RFC 4960, Section 6.4.";
+    }
+    leaf destinationAddress {
+      type inet:ip-address;
+      description "The destination address of the Collector of
+        the IPFIX Transport Session.
+        If the transport protocol is SCTP, this is one of the
+        potentially many IP addresses of the Collector.
+        Preferably, the destination IP address of the path that is
+        usually selected by the Exporter to send IPFIX Messages to
+        the Collector SHOULD be used.
+        Note that this parameter functionally corresponds to
+        ipfixTransportSessionDestinationAddressType and
+        ipfixTransportSessionDestinationAddress in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionDestinationAddressType,
+        ipfixTransportSessionDestinationAddress);
+        RFC 4960, Section 6.4.";
+    }
+    leaf sourcePort {
+      type inet:port-number;
+      description "The transport-protocol port number of the
+        Exporter of the IPFIX Transport Session.
+        Note that this parameter corresponds to
+        ipfixTransportSessionSourcePort in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionSourcePort).";
+    }
+    leaf destinationPort {
+      type inet:port-number;
+      description "The transport-protocol port number of the
+        Collector of the IPFIX Transport Session.
+        Note that this parameter corresponds to
+        ipfixTransportSessionDestinationPort in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionDestinationPort).";
+    }
+    leaf sctpAssocId {
+      type uint32;
+      description "The association ID used for the SCTP session
+        between the Exporter and the Collector of the IPFIX
+        Transport Session.  It is equal to the sctpAssocId entry
+        in the sctpAssocTable defined in the SCTP-MIB.
+        This parameter is only available if the transport protocol
+        is SCTP and if an SNMP agent on the same Monitoring Device
+        enables access to the corresponding MIB objects in the
+        sctpAssocTable.
+        Note that this parameter corresponds to
+        ipfixTransportSessionSctpAssocId in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionSctpAssocId);
+        RFC 3871";
+    }
+    leaf status {
+      type transportSessionStatus;
+      description "Status of the Transport Session.
+        Note that this parameter corresponds to
+        ipfixTransportSessionStatus in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8 (ipfixTransportSessionStatus).";
+    }
+    leaf rate {
+      type yang:gauge32;
+      units "bytes per second";
+      description "The number of bytes per second transmitted by the
+        Exporting Process or received by the Collecting Process.
+        This parameter is updated every second.
+        Note that this parameter corresponds to
+        ipfixTransportSessionRate in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8 (ipfixTransportSessionRate).";
+    }
+    leaf bytes {
+      type yang:counter64;
+      units bytes;
+      description "The number of bytes transmitted by the
+        Exporting Process or received by the Collecting Process.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        transportSessionDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixTransportSessionBytes in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8 (ipfixTransportSessionBytes).";
+    }
+    leaf messages {
+      type yang:counter64;
+      units "IPFIX Messages";
+      description "The number of messages transmitted by the
+        Exporting Process or received by the Collecting Process.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        transportSessionDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixTransportSessionMessages in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionMessages).";
+    }
+    leaf discardedMessages {
+      type yang:counter64;
+      units "IPFIX Messages";
+      description "Used for Exporting Processes, this parameter
+        indicates the number of messages that could not be sent due
+        to internal buffer overflows, network congestion, routing
+        issues, etc.  Used for Collecting Process, this parameter
+        indicates the number of received IPFIX Message that are
+        malformed, cannot be decoded, are received in the wrong
+        order or are missing according to the sequence number.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        transportSessionDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixTransportSessionDiscardedMessages in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionDiscardedMessages).";
+    }
+    leaf records {
+      type yang:counter64;
+      units "Data Records";
+      description "The number of Data Records transmitted by the
+        Exporting Process or received by the Collecting Process.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        transportSessionDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixTransportSessionRecords in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionRecords).";
+    }
+    leaf templates {
+      type yang:counter32;
+      units "Templates";
+      description "The number of Templates transmitted by the
+        Exporting Process or received by the Collecting Process.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        transportSessionDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixTransportSessionTemplates in the IPFIX MIB module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionTemplates).";
+    }
+    leaf optionsTemplates {
+      type yang:counter32;
+      units "Options Templates";
+      description "The number of Option Templates transmitted by the
+        Exporting Process or received by the Collecting Process.
+        Discontinuities in the value of this counter can occur at
+        re-initialization of the management system, and at other
+        times as indicated by the value of
+        transportSessionDiscontinuityTime.
+        Note that this parameter corresponds to
+        ipfixTransportSessionOptionsTemplates in the IPFIX MIB
+        module.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionOptionsTemplates).";
+    }
+    leaf transportSessionStartTime {
+      type yang:date-and-time;
+      description "Timestamp of the start of the given Transport
+        Session.
+        This state parameter does not correspond to any object in
+        the IPFIX MIB module.";
+    }
+    leaf transportSessionDiscontinuityTime {
+      type yang:date-and-time;
+      description "Timestamp of the most recent occasion at which
+        one or more of the Transport Session counters suffered a
+        discontinuity.
+        Note that this parameter functionally corresponds to
+        ipfixTransportSessionDiscontinuityTime in the IPFIX MIB
+        module.  In contrast to
+        ipfixTransportSessionDiscontinuityTime, the time is
+        absolute and not relative to sysUpTime.";
+      reference "RFC 6615, Section 8
+        (ipfixTransportSessionDiscontinuityTime).";
+    }
+    list template {
+      description "This list contains the Templates and Options
+        Templates that are transmitted by the Exporting Process
+        or received by the Collecting Process.
+        Withdrawn or invalidated (Options) Templates MUST be removed
+        from this list.";
+      uses templateParameters;
+    }
+  }
+
+  /*****************************************************************
+  * Main container
+  *****************************************************************/
+
+  container ipfix {
+    description "Top-level node of the IPFIX/PSAMP configuration
+      data model.";
+    list collectingProcess {
+      if-feature collector;
+      key name;
+      description "Collecting Process of the Monitoring Device.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      uses collectingProcessParameters;
+      leaf-list exportingProcess {
+        if-feature exporter;
+        type leafref { path "/ipfix/exportingProcess/name"; }
+        description "Export of received records without any
+          modifications.  Records are processed by all Exporting
+          Processes in the list.";
+      }
+    }
+
+    list observationPoint {
+      if-feature meter;
+      key name;
+      description "Observation Point of the Monitoring Device.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      uses observationPointParameters;
+      leaf-list selectionProcess {
+        type leafref { path "/ipfix/selectionProcess/name"; }
+        description "Selection Processes in this list process
+          packets in parallel.";
+      }
+    }
+
+    list selectionProcess {
+      if-feature meter;
+      key name;
+      description "Selection Process of the Monitoring Device.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      list selector {
+        key name;
+        min-elements 1;
+        ordered-by user;
+        description "List of Selectors that define the action of the
+          Selection Process on a single packet.  The Selectors are
+          serially invoked in the same order as they appear in this
+          list.";
+        leaf name {
+          type nameType;
+          description "Key of this list.";
+        }
+        uses selectorParameters;
+      }
+      list selectionSequence {
+        config false;
+        description "This list contains the Selection Sequence IDs
+          that are assigned by the Monitoring Device to distinguish
+          different Selection Sequences passing through the
+          Selection Process.
+          As Selection Sequence IDs are unique per Observation
+          Domain, the corresponding Observation Domain IDs are
+          included as well.
+          With this information, it is possible to associate
+          Selection Sequence (Statistics) Report Interpretations
+          exported according to the PSAMP protocol with a Selection
+          Process in the configuration data.";
+        reference "RFC 5476.";
+        leaf observationDomainId {
+          type uint32;
+          description "Observation Domain ID for which the
+            Selection Sequence ID is assigned.";
+        }
+        leaf selectionSequenceId {
+          type uint64;
+          description "Selection Sequence ID used in the Selection
+            Sequence (Statistics) Report Interpretation.";
+        }
+      }
+      leaf cache {
+        type leafref { path "/ipfix/cache/name"; }
+        description "Cache that receives the output of the
+          Selection Process.";
+      }
+    }
+
+    list cache {
+      if-feature meter;
+      key name;
+      description "Cache of the Monitoring Device.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      leaf meteringProcessId {
+        type uint32;
+        config false;
+        description "The identifier of the Metering Process this
+          Cache belongs to.
+          This parameter corresponds to the Information Element
+          meteringProcessId.  Its occurrence helps to associate
+          Cache parameters with Metering Process statistics
+          exported by the Monitoring Device using the Metering
+          Process (Reliability) Statistics Template as
+          defined by the IPFIX protocol specification.";
+        reference "RFC 5101, Sections 4.1 and 4.2;
+          IANA registry for IPFIX Entities,
+          http://www.iana.org/assignments/ipfix.";
+      }
+      leaf dataRecords {
+        type yang:counter64;
+        units "Data Records";
+        config false;
+        description "The number of Data Records generated by this
+          Cache.
+          Discontinuities in the value of this counter can occur at
+          re-initialization of the management system, and at other
+          times as indicated by the value of
+          cacheDiscontinuityTime.
+          Note that this parameter corresponds to
+          ipfixMeteringProcessDataRecords in the IPFIX MIB
+          module.";
+        reference "RFC 6615, Section 8
+          (ipfixMeteringProcessDataRecords).";
+      }
+      leaf cacheDiscontinuityTime {
+        type yang:date-and-time;
+        config false;
+        description "Timestamp of the most recent occasion at which
+          the counter dataRecords suffered a discontinuity.
+          Note that this parameter functionally corresponds to
+          ipfixMeteringProcessDiscontinuityTime in the IPFIX MIB
+          module.  In contrast to
+          ipfixMeteringProcessDiscontinuityTime, the time is
+          absolute and not relative to sysUpTime.";
+        reference "RFC 6615, Section 8
+          (ipfixMeteringProcessDiscontinuityTime).";
+      }
+      choice CacheType {
+        mandatory true;
+        description "Type of Cache and specific parameters.";
+        container immediateCache {
+          if-feature immediateCache;
+          description "Flow expiration after the first packet;
+            generation of Packet Records.";
+          uses cacheLayoutParameters;
+        }
+        container timeoutCache {
+          if-feature timeoutCache;
+          description "Flow expiration after active and idle
+            timeout; generation of Flow Records.";
+          uses flowCacheParameters;
+          uses cacheLayoutParameters;
+        }
+        container naturalCache {
+          if-feature naturalCache;
+          description "Flow expiration after active and idle
+            timeout, or on natural termination (e.g., TCP FIN or
+            TCP RST) of the Flow; generation of Flow Records.";
+          uses flowCacheParameters;
+          uses cacheLayoutParameters;
+        }
+        container permanentCache {
+          if-feature permanentCache;
+          description "No flow expiration, periodical export with
+            time interval exportInterval; generation of Flow
+            Records.";
+          uses flowCacheParameters;
+          uses cacheLayoutParameters;
+        }
+      }
+      leaf-list exportingProcess {
+        if-feature exporter;
+        type leafref { path "/ipfix/exportingProcess/name"; }
+        description "Records are exported by all Exporting Processes
+          in the list.";
+      }
+    }
+
+    list exportingProcess {
+      if-feature exporter;
+      key name;
+      description "Exporting Process of the Monitoring Device.";
+      leaf name {
+        type nameType;
+        description "Key of this list.";
+      }
+      uses exportingProcessParameters;
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-netconf-acm@2012-02-22.yang b/models/common/src/main/yang/ietf-netconf-acm@2012-02-22.yang
new file mode 100644
index 0000000..93ac229
--- /dev/null
+++ b/models/common/src/main/yang/ietf-netconf-acm@2012-02-22.yang
@@ -0,0 +1,449 @@
+module ietf-netconf-acm {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
+
+  prefix "nacm";
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <mailto:netconf@ietf.org>
+
+     WG Chair: Mehmet Ersue
+               <mailto:mehmet.ersue@nsn.com>
+
+     WG Chair: Bert Wijnen
+               <mailto:bertietf@bwijnen.net>
+
+     Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "NETCONF Access Control Model.
+
+     Copyright (c) 2012 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 6536; see
+     the RFC itself for full legal notices.";
+
+  revision "2012-02-22" {
+    description
+      "Initial version";
+    reference
+      "RFC 6536: Network Configuration Protocol (NETCONF)
+                 Access Control Model";
+  }
+
+  /*
+   * Extension statements
+   */
+
+  extension default-deny-write {
+    description
+      "Used to indicate that the data model node
+       represents a sensitive security system parameter.
+
+       If present, and the NACM module is enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), the NETCONF server
+       will only allow the designated 'recovery session' to have
+       write access to the node.  An explicit access control rule is
+       required for all other users.
+
+       The 'default-deny-write' extension MAY appear within a data
+       definition statement.  It is ignored otherwise.";
+  }
+
+  extension default-deny-all {
+    description
+      "Used to indicate that the data model node
+       controls a very sensitive security system parameter.
+
+       If present, and the NACM module is enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), the NETCONF server
+       will only allow the designated 'recovery session' to have
+       read, write, or execute access to the node.  An explicit
+       access control rule is required for all other users.
+
+       The 'default-deny-all' extension MAY appear within a data
+       definition statement, 'rpc' statement, or 'notification'
+       statement.  It is ignored otherwise.";
+  }
+
+  /*
+   * Derived types
+   */
+
+  typedef user-name-type {
+    type string {
+      length "1..max";
+    }
+    description
+      "General Purpose Username string.";
+  }
+
+  typedef matchall-string-type {
+    type string {
+      pattern "\*";
+    }
+    description
+      "The string containing a single asterisk '*' is used
+       to conceptually represent all possible values
+       for the particular leaf using this data type.";
+  }
+
+  typedef access-operations-type {
+    type bits {
+      bit create {
+        description
+          "Any protocol operation that creates a
+           new data node.";
+      }
+      bit read {
+        description
+          "Any protocol operation or notification that
+           returns the value of a data node.";
+      }
+      bit update {
+        description
+          "Any protocol operation that alters an existing
+           data node.";
+      }
+      bit delete {
+        description
+          "Any protocol operation that removes a data node.";
+      }
+      bit exec {
+        description
+          "Execution access to the specified protocol operation.";
+      }
+    }
+    description
+      "NETCONF Access Operation.";
+  }
+
+  typedef group-name-type {
+    type string {
+      length "1..max";
+      pattern "[^\*].*";
+    }
+    description
+      "Name of administrative group to which
+       users can be assigned.";
+  }
+
+  typedef action-type {
+    type enumeration {
+      enum permit {
+        description
+          "Requested action is permitted.";
+      }
+      enum deny {
+        description
+          "Requested action is denied.";
+      }
+    }
+    description
+      "Action taken by the server when a particular
+       rule matches.";
+  }
+
+  typedef node-instance-identifier {
+    type yang:xpath1.0;
+    description
+      "Path expression used to represent a special
+       data node instance identifier string.
+
+       A node-instance-identifier value is an
+       unrestricted YANG instance-identifier expression.
+       All the same rules as an instance-identifier apply
+       except predicates for keys are optional.  If a key
+       predicate is missing, then the node-instance-identifier
+       represents all possible server instances for that key.
+
+       This XPath expression is evaluated in the following context:
+
+        o  The set of namespace declarations are those in scope on
+           the leaf element where this type is used.
+
+        o  The set of variable bindings contains one variable,
+           'USER', which contains the name of the user of the current
+            session.
+
+        o  The function library is the core function library, but
+           note that due to the syntax restrictions of an
+           instance-identifier, no functions are allowed.
+
+        o  The context node is the root node in the data tree.";
+  }
+
+  /*
+   * Data definition statements
+   */
+
+  container nacm {
+    nacm:default-deny-all;
+
+    description
+      "Parameters for NETCONF Access Control Model.";
+
+    leaf enable-nacm {
+      type boolean;
+      default true;
+      description
+        "Enables or disables all NETCONF access control
+         enforcement.  If 'true', then enforcement
+         is enabled.  If 'false', then enforcement
+         is disabled.";
+    }
+
+    leaf read-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether read access is granted if
+         no appropriate rule is found for a
+         particular read request.";
+    }
+
+    leaf write-default {
+      type action-type;
+      default "deny";
+      description
+        "Controls whether create, update, or delete access
+         is granted if no appropriate rule is found for a
+         particular write request.";
+    }
+
+    leaf exec-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether exec access is granted if no appropriate
+         rule is found for a particular protocol operation request.";
+    }
+
+    leaf enable-external-groups {
+      type boolean;
+      default true;
+      description
+        "Controls whether the server uses the groups reported by the
+         NETCONF transport layer when it assigns the user to a set of
+         NACM groups.  If this leaf has the value 'false', any group
+         names reported by the transport layer are ignored by the
+         server.";
+    }
+
+    leaf denied-operations {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request was denied.";
+    }
+
+    leaf denied-data-writes {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request to alter
+         a configuration datastore was denied.";
+    }
+
+    leaf denied-notifications {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that
+         a notification was dropped for a subscription because
+         access to the event type was denied.";
+    }
+
+    container groups {
+      description
+        "NETCONF Access Control Groups.";
+
+      list group {
+        key name;
+
+        description
+          "One NACM Group Entry.  This list will only contain
+           configured entries, not any entries learned from
+           any transport protocols.";
+
+        leaf name {
+          type group-name-type;
+          description
+            "Group name associated with this entry.";
+        }
+
+        leaf-list user-name {
+          type user-name-type;
+          description
+            "Each entry identifies the username of
+             a member of the group associated with
+             this entry.";
+        }
+      }
+    }
+
+    list rule-list {
+      key "name";
+      ordered-by user;
+      description
+        "An ordered collection of access control rules.";
+
+      leaf name {
+        type string {
+          length "1..max";
+        }
+        description
+          "Arbitrary name assigned to the rule-list.";
+      }
+      leaf-list group {
+        type union {
+          type matchall-string-type;
+          type group-name-type;
+        }
+        description
+          "List of administrative groups that will be
+           assigned the associated access rights
+           defined by the 'rule' list.
+
+           The string '*' indicates that all groups apply to the
+           entry.";
+      }
+
+      list rule {
+        key "name";
+        ordered-by user;
+        description
+          "One access control rule.
+
+           Rules are processed in user-defined order until a match is
+           found.  A rule matches if 'module-name', 'rule-type', and
+           'access-operations' match the request.  If a rule
+           matches, the 'action' leaf determines if access is granted
+           or not.";
+
+        leaf name {
+          type string {
+            length "1..max";
+          }
+          description
+            "Arbitrary name assigned to the rule.";
+        }
+
+        leaf module-name {
+          type union {
+            type matchall-string-type;
+            type string;
+          }
+          default "*";
+          description
+            "Name of the module associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             object being accessed is defined in the module with the
+             specified module name.";
+        }
+        choice rule-type {
+          description
+            "This choice matches if all leafs present in the rule
+             match the request.  If no leafs are present, the
+             choice matches all requests.";
+          case protocol-operation {
+            leaf rpc-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if
+                 its value equals the requested protocol operation
+                 name.";
+            }
+          }
+          case notification {
+            leaf notification-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if its
+                 value equals the requested notification name.";
+            }
+          }
+          case data-node {
+            leaf path {
+              type node-instance-identifier;
+              mandatory true;
+              description
+                "Data Node Instance Identifier associated with the
+                 data node controlled by this rule.
+
+                 Configuration data or state data instance
+                 identifiers start with a top-level data node.  A
+                 complete instance identifier is required for this
+                 type of path value.
+
+                 The special value '/' refers to all possible
+                 datastore contents.";
+            }
+          }
+        }
+
+        leaf access-operations {
+          type union {
+            type matchall-string-type;
+            type access-operations-type;
+          }
+          default "*";
+          description
+            "Access operations associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             bit corresponding to the requested operation is set.";
+        }
+
+        leaf action {
+          type action-type;
+          mandatory true;
+          description
+            "The access control action associated with the
+             rule.  If a rule is determined to match a
+             particular request, then this object is used
+             to determine whether to permit or deny the
+             request.";
+        }
+
+        leaf comment {
+          type string;
+          description
+            "A textual description of the access rule.";
+        }
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-netconf-monitoring@2010-10-04.yang b/models/common/src/main/yang/ietf-netconf-monitoring@2010-10-04.yang
new file mode 100644
index 0000000..8193cf3
--- /dev/null
+++ b/models/common/src/main/yang/ietf-netconf-monitoring@2010-10-04.yang
@@ -0,0 +1,561 @@
+module ietf-netconf-monitoring {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
+  prefix "ncm";
+
+  import ietf-yang-types { prefix yang; }
+  import ietf-inet-types { prefix inet; }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <mailto:netconf@ietf.org>
+
+     WG Chair: Mehmet Ersue
+               <mailto:mehmet.ersue@nsn.com>
+
+     WG Chair: Bert Wijnen
+               <mailto:bertietf@bwijnen.net>
+
+     Editor:   Mark Scott
+               <mailto:mark.scott@ericsson.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "NETCONF Monitoring Module.
+     All elements in this module are read-only.
+
+     Copyright (c) 2010 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 6022; see
+     the RFC itself for full legal notices.";
+
+  revision 2010-10-04 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 6022: YANG Module for NETCONF Monitoring";
+  }
+
+  typedef netconf-datastore-type {
+    type enumeration {
+      enum running;
+      enum candidate;
+      enum startup;
+    }
+    description
+      "Enumeration of possible NETCONF datastore types.";
+    reference
+      "RFC 4741: NETCONF Configuration Protocol";
+  }
+
+  identity transport {
+    description
+      "Base identity for NETCONF transport types.";
+  }
+
+  identity netconf-ssh {
+    base transport;
+    description
+      "NETCONF over Secure Shell (SSH).";
+    reference
+      "RFC 4742: Using the NETCONF Configuration Protocol
+                 over Secure SHell (SSH)";
+  }
+
+  identity netconf-soap-over-beep {
+    base transport;
+    description
+      "NETCONF over Simple Object Access Protocol (SOAP) over
+       Blocks Extensible Exchange Protocol (BEEP).";
+
+    reference
+      "RFC 4743: Using NETCONF over the Simple Object
+                 Access Protocol (SOAP)";
+  }
+
+  identity netconf-soap-over-https {
+    base transport;
+    description
+      "NETCONF over Simple Object Access Protocol (SOAP)
+      over Hypertext Transfer Protocol Secure (HTTPS).";
+    reference
+      "RFC 4743: Using NETCONF over the Simple Object
+                 Access Protocol (SOAP)";
+  }
+
+  identity netconf-beep {
+    base transport;
+    description
+      "NETCONF over Blocks Extensible Exchange Protocol (BEEP).";
+    reference
+      "RFC 4744: Using the NETCONF Protocol over the
+                 Blocks Extensible Exchange Protocol (BEEP)";
+  }
+
+  identity netconf-tls {
+    base transport;
+    description
+      "NETCONF over Transport Layer Security (TLS).";
+    reference
+      "RFC 5539: NETCONF over Transport Layer Security (TLS)";
+  }
+
+  identity schema-format {
+    description
+      "Base identity for data model schema languages.";
+  }
+
+  identity xsd {
+    base schema-format;
+    description
+      "W3C XML Schema Definition.";
+    reference
+      "W3C REC REC-xmlschema-1-20041028:
+         XML Schema Part 1: Structures";
+  }
+
+  identity yang {
+    base schema-format;
+    description
+      "The YANG data modeling language for NETCONF.";
+    reference
+      "RFC 6020:  YANG - A Data Modeling Language for the
+                  Network Configuration Protocol (NETCONF)";
+  }
+
+  identity yin {
+    base schema-format;
+    description
+      "The YIN syntax for YANG.";
+    reference
+      "RFC 6020:  YANG - A Data Modeling Language for the
+                  Network Configuration Protocol (NETCONF)";
+  }
+
+  identity rng {
+    base schema-format;
+    description
+      "Regular Language for XML Next Generation (RELAX NG).";
+    reference
+      "ISO/IEC 19757-2:2008: RELAX NG";
+  }
+
+  identity rnc {
+    base schema-format;
+    description
+      "Relax NG Compact Syntax";
+    reference
+      "ISO/IEC 19757-2:2008: RELAX NG";
+  }
+
+  grouping common-counters {
+    description
+      "Counters that exist both per session, and also globally,
+       accumulated from all sessions.";
+
+    leaf in-rpcs {
+      type yang:zero-based-counter32;
+      description
+        "Number of correct <rpc> messages received.";
+    }
+    leaf in-bad-rpcs {
+      type yang:zero-based-counter32;
+
+      description
+        "Number of messages received when an <rpc> message was expected,
+         that were not correct <rpc> messages.  This includes XML parse
+         errors and errors on the rpc layer.";
+    }
+    leaf out-rpc-errors {
+      type yang:zero-based-counter32;
+      description
+        "Number of <rpc-reply> messages sent that contained an
+         <rpc-error> element.";
+    }
+    leaf out-notifications {
+      type yang:zero-based-counter32;
+      description
+        "Number of <notification> messages sent.";
+    }
+  }
+
+  container netconf-state {
+    config false;
+    description
+      "The netconf-state container is the root of the monitoring
+       data model.";
+
+    container capabilities {
+      description
+        "Contains the list of NETCONF capabilities supported by the
+         server.";
+
+      leaf-list capability {
+        type inet:uri;
+        description
+          "List of NETCONF capabilities supported by the server.";
+      }
+    }
+
+    container datastores {
+      description
+        "Contains the list of NETCONF configuration datastores.";
+
+      list datastore {
+        key name;
+        description
+          "List of NETCONF configuration datastores supported by
+           the NETCONF server and related information.";
+
+        leaf name {
+          type netconf-datastore-type;
+          description
+            "Name of the datastore associated with this list entry.";
+        }
+        container locks {
+          presence
+            "This container is present only if the datastore
+             is locked.";
+          description
+            "The NETCONF <lock> and <partial-lock> operations allow
+             a client to lock specific resources in a datastore.  The
+             NETCONF server will prevent changes to the locked
+             resources by all sessions except the one that acquired
+             the lock(s).
+
+             Monitoring information is provided for each datastore
+             entry including details such as the session that acquired
+             the lock, the type of lock (global or partial) and the
+             list of locked resources.  Multiple locks per datastore
+             are supported.";
+
+          grouping lock-info {
+            description
+              "Lock related parameters, common to both global and
+               partial locks.";
+
+            leaf locked-by-session {
+              type uint32;
+              mandatory true;
+              description
+                "The session ID of the session that has locked
+                 this resource.  Both a global lock and a partial
+                 lock MUST contain the NETCONF session-id.
+
+                 If the lock is held by a session that is not managed
+                 by the NETCONF server (e.g., a CLI session), a session
+                 id of 0 (zero) is reported.";
+              reference
+                "RFC 4741: NETCONF Configuration Protocol";
+            }
+            leaf locked-time {
+              type yang:date-and-time;
+              mandatory true;
+              description
+                "The date and time of when the resource was
+                 locked.";
+            }
+          }
+
+          choice lock-type {
+            description
+              "Indicates if a global lock or a set of partial locks
+               are set.";
+
+            container global-lock {
+              description
+                "Present if the global lock is set.";
+              uses lock-info;
+            }
+
+            list partial-lock {
+              key lock-id;
+              description
+                "List of partial locks.";
+              reference
+                "RFC 5717: Partial Lock Remote Procedure Call (RPC) for
+                           NETCONF";
+
+              leaf lock-id {
+                type uint32;
+                description
+                  "This is the lock id returned in the <partial-lock>
+                   response.";
+              }
+              uses lock-info;
+              leaf-list select {
+                type yang:xpath1.0;
+                min-elements 1;
+                description
+                  "The xpath expression that was used to request
+                   the lock.  The select expression indicates the
+                   original intended scope of the lock.";
+              }
+              leaf-list locked-node {
+                type instance-identifier;
+                description
+                  "The list of instance-identifiers (i.e., the
+                   locked nodes).
+
+                   The scope of the partial lock is defined by the list
+                   of locked nodes.";
+              }
+            }
+          }
+        }
+      }
+    }
+    container schemas {
+      description
+        "Contains the list of data model schemas supported by the
+         server.";
+
+      list schema {
+        key "identifier version format";
+
+        description
+          "List of data model schemas supported by the server.";
+
+        leaf identifier {
+          type string;
+          description
+            "Identifier to uniquely reference the schema.  The
+             identifier is used in the <get-schema> operation and may
+             be used for other purposes such as file retrieval.
+
+             For modeling languages that support or require a data
+             model name (e.g., YANG module name) the identifier MUST
+             match that name.  For YANG data models, the identifier is
+             the name of the module or submodule.  In other cases, an
+             identifier such as a filename MAY be used instead.";
+        }
+        leaf version {
+          type string;
+          description
+            "Version of the schema supported.  Multiple versions MAY be
+             supported simultaneously by a NETCONF server.  Each
+             version MUST be reported individually in the schema list,
+             i.e., with same identifier, possibly different location,
+             but different version.
+
+             For YANG data models, version is the value of the most
+             recent YANG 'revision' statement in the module or
+             submodule, or the empty string if no 'revision' statement
+             is present.";
+        }
+        leaf format {
+          type identityref {
+            base schema-format;
+          }
+          description
+            "The data modeling language the schema is written
+             in (currently xsd, yang, yin, rng, or rnc).
+
+             For YANG data models, 'yang' format MUST be supported and
+             'yin' format MAY also be provided.";
+        }
+        leaf namespace {
+          type inet:uri;
+          mandatory true;
+          description
+            "The XML namespace defined by the data model.
+
+             For YANG data models, this is the module's namespace.
+             If the list entry describes a submodule, this field
+             contains the namespace of the module to which the
+             submodule belongs.";
+        }
+        leaf-list location {
+          type union {
+            type enumeration {
+              enum "NETCONF";
+            }
+            type inet:uri;
+          }
+          description
+            "One or more locations from which the schema can be
+             retrieved.  This list SHOULD contain at least one
+             entry per schema.
+
+             A schema entry may be located on a remote file system
+             (e.g., reference to file system for ftp retrieval) or
+             retrieved directly from a server supporting the
+             <get-schema> operation (denoted by the value 'NETCONF').";
+        }
+      }
+    }
+
+    container sessions {
+      description
+        "The sessions container includes session-specific data for
+         NETCONF management sessions.  The session list MUST include
+         all currently active NETCONF sessions.";
+
+      list session {
+        key session-id;
+        description
+          "All NETCONF sessions managed by the NETCONF server
+           MUST be reported in this list.";
+
+        leaf session-id {
+          type uint32 {
+            range "1..max";
+          }
+          description
+            "Unique identifier for the session.  This value is the
+             NETCONF session identifier, as defined in RFC 4741.";
+          reference
+            "RFC 4741: NETCONF Configuration Protocol";
+        }
+        leaf transport {
+          type identityref {
+            base transport;
+          }
+          mandatory true;
+          description
+            "Identifies the transport for each session, e.g.,
+            'netconf-ssh', 'netconf-soap', etc.";
+        }
+        leaf username  {
+          type string;
+          mandatory true;
+          description
+            "The username is the client identity that was authenticated
+            by the NETCONF transport protocol.  The algorithm used to
+            derive the username is NETCONF transport protocol specific
+            and in addition specific to the authentication mechanism
+            used by the NETCONF transport protocol.";
+        }
+        leaf source-host {
+          type inet:host;
+          description
+            "Host identifier of the NETCONF client.  The value
+             returned is implementation specific (e.g., hostname,
+             IPv4 address, IPv6 address)";
+        }
+        leaf login-time {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "Time at the server at which the session was established.";
+        }
+        uses common-counters {
+          description
+            "Per-session counters.  Zero based with following reset
+             behaviour:
+               - at start of a session
+               - when max value is reached";
+        }
+      }
+    }
+
+    container statistics {
+      description
+        "Statistical data pertaining to the NETCONF server.";
+
+      leaf netconf-start-time {
+        type yang:date-and-time;
+        description
+          "Date and time at which the management subsystem was
+           started.";
+      }
+      leaf in-bad-hellos {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions silently dropped because an
+          invalid <hello> message was received.  This includes <hello>
+          messages with a 'session-id' attribute, bad namespace, and
+          bad capability declarations.";
+      }
+      leaf in-sessions {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions started.  This counter is incremented
+           when a <hello> message with a <session-id> is sent.
+
+          'in-sessions' - 'in-bad-hellos' =
+              'number of correctly started netconf sessions'";
+      }
+      leaf dropped-sessions {
+        type yang:zero-based-counter32;
+
+        description
+          "Number of sessions that were abnormally terminated, e.g.,
+           due to idle timeout or transport close.  This counter is not
+           incremented when a session is properly closed by a
+           <close-session> operation, or killed by a <kill-session>
+           operation.";
+      }
+      uses common-counters {
+        description
+          "Global counters, accumulated from all sessions.
+           Zero based with following reset behaviour:
+             - re-initialization of NETCONF server
+             - when max value is reached";
+      }
+    }
+  }
+
+  rpc get-schema {
+    description
+      "This operation is used to retrieve a schema from the
+       NETCONF server.
+
+       Positive Response:
+         The NETCONF server returns the requested schema.
+
+       Negative Response:
+         If requested schema does not exist, the <error-tag> is
+         'invalid-value'.
+
+         If more than one schema matches the requested parameters, the
+         <error-tag> is 'operation-failed', and <error-app-tag> is
+         'data-not-unique'.";
+
+    input {
+      leaf identifier {
+        type string;
+        mandatory true;
+        description
+          "Identifier for the schema list entry.";
+      }
+      leaf version {
+        type string;
+        description
+          "Version of the schema requested.  If this parameter is not
+           present, and more than one version of the schema exists on
+           the server, a 'data-not-unique' error is returned, as
+           described above.";
+      }
+      leaf format {
+        type identityref {
+          base schema-format;
+        }
+        description
+           "The data modeling language of the schema.  If this
+            parameter is not present, and more than one formats of
+            the schema exists on the server, a 'data-not-unique' error
+            is returned, as described above.";
+      }
+    }
+    output {
+        anyxml data {
+          description
+            "Contains the schema content.";
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-netconf-notifications@2012-02-06.yang b/models/common/src/main/yang/ietf-netconf-notifications@2012-02-06.yang
new file mode 100644
index 0000000..e0b49a6
--- /dev/null
+++ b/models/common/src/main/yang/ietf-netconf-notifications@2012-02-06.yang
@@ -0,0 +1,336 @@
+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
+
+}
diff --git a/models/common/src/main/yang/ietf-netconf-partial-lock@2009-10-19.yang b/models/common/src/main/yang/ietf-netconf-partial-lock@2009-10-19.yang
new file mode 100644
index 0000000..31b6e73
--- /dev/null
+++ b/models/common/src/main/yang/ietf-netconf-partial-lock@2009-10-19.yang
@@ -0,0 +1,77 @@
+module ietf-netconf-partial-lock {
+
+  namespace urn:ietf:params:xml:ns:netconf:partial-lock:1.0;
+  prefix pl;
+
+  organization "IETF Network Configuration (netconf) Working Group";
+
+  contact
+   "Netconf Working Group
+    Mailing list: netconf@ietf.org
+    Web: http://www.ietf.org/html.charters/netconf-charter.html
+
+    Balazs Lengyel
+    Ericsson
+    balazs.lengyel@ericsson.com";
+
+  description
+   "This YANG module defines the <partial-lock> and
+    <partial-unlock> operations.";
+
+  revision 2009-10-19 {
+    description
+     "Initial version, published as RFC 5717.";
+  }
+
+  typedef lock-id-type {
+    type uint32;
+    description
+     "A number identifying a specific partial-lock granted to a session.
+      It is allocated by the system, and SHOULD be used in the
+      partial-unlock operation.";
+  }
+
+  rpc partial-lock {
+    description
+     "A NETCONF operation that locks parts of the running datastore.";
+    input {
+      leaf-list select {
+        type string;
+        min-elements 1;
+        description
+         "XPath expression that specifies the scope of the lock.
+          An Instance Identifier expression MUST be used unless the
+          :xpath capability is supported, in which case any XPath 1.0
+          expression is allowed.";
+      }
+    }
+    output {
+      leaf lock-id {
+        type lock-id-type;
+        description
+         "Identifies the lock, if granted.  The lock-id SHOULD be
+          used in the partial-unlock rpc.";
+      }
+      leaf-list locked-node {
+        type instance-identifier;
+        min-elements 1;
+        description
+         "List of locked nodes in the running datastore";
+      }
+    }
+  }
+
+  rpc partial-unlock {
+    description
+     "A NETCONF operation that releases a previously acquired
+      partial-lock.";
+    input {
+      leaf lock-id {
+        type lock-id-type;
+        description
+         "Identifies the lock to be released.  MUST be the value
+          received in the response to a partial-lock operation.";
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-netconf-with-defaults@2011-06-01.yang b/models/common/src/main/yang/ietf-netconf-with-defaults@2011-06-01.yang
new file mode 100644
index 0000000..8a7be8c
--- /dev/null
+++ b/models/common/src/main/yang/ietf-netconf-with-defaults@2011-06-01.yang
@@ -0,0 +1,138 @@
+module ietf-netconf-with-defaults {
+
+   namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults";
+
+   prefix ncwd;
+
+   import ietf-netconf { prefix nc; }
+
+   organization
+    "IETF NETCONF (Network Configuration Protocol) Working Group";
+
+   contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+
+     WG List:  <netconf@ietf.org>
+
+     WG Chair: Bert Wijnen
+               <bertietf@bwijnen.net>
+
+     WG Chair: Mehmet Ersue
+               <mehmet.ersue@nsn.com>
+
+     Editor: Andy Bierman
+             <andy.bierman@brocade.com>
+
+     Editor: Balazs Lengyel
+             <balazs.lengyel@ericsson.com>";
+
+   description
+    "This module defines an extension to the NETCONF protocol
+     that allows the NETCONF client to control how default
+     values are handled by the server in particular NETCONF
+     operations.
+
+     Copyright (c) 2011 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 6243; see
+     the RFC itself for full legal notices.";
+   revision 2011-06-01 {
+     description
+       "Initial version.";
+     reference
+      "RFC 6243: With-defaults Capability for NETCONF";
+   }
+
+   typedef with-defaults-mode {
+      description
+        "Possible modes to report default data.";
+      reference
+         "RFC 6243; Section 3.";
+      type enumeration {
+         enum report-all {
+             description
+               "All default data is reported.";
+             reference
+               "RFC 6243; Section 3.1";
+         }
+         enum report-all-tagged {
+             description
+               "All default data is reported.
+                Any nodes considered to be default data
+                will contain a 'default' XML attribute,
+                set to 'true' or '1'.";
+             reference
+               "RFC 6243; Section 3.4";
+         }
+         enum trim {
+             description
+               "Values are not reported if they contain the default.";
+             reference
+               "RFC 6243; Section 3.2";
+         }
+         enum explicit {
+             description
+               "Report values that contain the definition of
+                explicitly set data.";
+             reference
+               "RFC 6243; Section 3.3";
+         }
+     }
+   }
+
+   grouping with-defaults-parameters {
+     description
+       "Contains the <with-defaults> parameter for control
+        of defaults in NETCONF retrieval operations.";
+     leaf with-defaults {
+       description
+         "The explicit defaults processing mode requested.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       type with-defaults-mode;
+     }
+   }
+
+   // extending the get-config operation
+   augment /nc:get-config/nc:input {
+       description
+         "Adds the <with-defaults> parameter to the
+          input of the NETCONF <get-config> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+   // extending the get operation
+   augment /nc:get/nc:input {
+       description
+         "Adds the <with-defaults> parameter to
+          the input of the NETCONF <get> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+   // extending the copy-config operation
+   augment /nc:copy-config/nc:input {
+       description
+         "Adds the <with-defaults> parameter to
+          the input of the NETCONF <copy-config> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+}
diff --git a/models/common/src/main/yang/ietf-netconf@2011-06-01.yang b/models/common/src/main/yang/ietf-netconf@2011-06-01.yang
new file mode 100644
index 0000000..44c19c3
--- /dev/null
+++ b/models/common/src/main/yang/ietf-netconf@2011-06-01.yang
@@ -0,0 +1,927 @@
+module ietf-netconf {
+
+  // the namespace for NETCONF XML definitions is unchanged
+  // from RFC 4741, which this document replaces
+  namespace "urn:ietf:params:xml:ns:netconf:base:1.0";
+
+  prefix nc;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <netconf@ietf.org>
+
+     WG Chair: Bert Wijnen
+               <bertietf@bwijnen.net>
+
+     WG Chair: Mehmet Ersue
+               <mehmet.ersue@nsn.com>
+
+     Editor:   Martin Bjorklund
+               <mbj@tail-f.com>
+
+     Editor:   Juergen Schoenwaelder
+               <j.schoenwaelder@jacobs-university.de>
+
+     Editor:   Andy Bierman
+               <andy.bierman@brocade.com>";
+  description
+    "NETCONF Protocol Data Types and Protocol Operations.
+
+     Copyright (c) 2011 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 6241; see
+     the RFC itself for full legal notices.";
+  revision 2011-06-01 {
+    description
+      "Initial revision";
+    reference
+      "RFC 6241: Network Configuration Protocol";
+  }
+
+  extension get-filter-element-attributes {
+    description
+      "If this extension is present within an 'anyxml'
+       statement named 'filter', which must be conceptually
+       defined within the RPC input section for the <get>
+       and <get-config> protocol operations, then the
+       following unqualified XML attribute is supported
+       within the <filter> element, within a <get> or
+       <get-config> protocol operation:
+
+         type : optional attribute with allowed
+                value strings 'subtree' and 'xpath'.
+                If missing, the default value is 'subtree'.
+
+       If the 'xpath' feature is supported, then the
+       following unqualified XML attribute is
+       also supported:
+
+         select: optional attribute containing a
+                 string representing an XPath expression.
+                 The 'type' attribute must be equal to 'xpath'
+                 if this attribute is present.";
+  }
+
+  // NETCONF capabilities defined as features
+  feature writable-running {
+    description
+      "NETCONF :writable-running capability;
+       If the server advertises the :writable-running
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.2";
+  }
+
+  feature candidate {
+    description
+      "NETCONF :candidate capability;
+       If the server advertises the :candidate
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.3";
+  }
+
+  feature confirmed-commit {
+    if-feature candidate;
+    description
+      "NETCONF :confirmed-commit:1.1 capability;
+       If the server advertises the :confirmed-commit:1.1
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+
+    reference "RFC 6241, Section 8.4";
+  }
+
+  feature rollback-on-error {
+    description
+      "NETCONF :rollback-on-error capability;
+       If the server advertises the :rollback-on-error
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.5";
+  }
+
+  feature validate {
+    description
+      "NETCONF :validate:1.1 capability;
+       If the server advertises the :validate:1.1
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.6";
+  }
+
+  feature startup {
+    description
+      "NETCONF :startup capability;
+       If the server advertises the :startup
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.7";
+  }
+
+  feature url {
+    description
+      "NETCONF :url capability;
+       If the server advertises the :url
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.8";
+  }
+
+  feature xpath {
+    description
+      "NETCONF :xpath capability;
+       If the server advertises the :xpath
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.9";
+  }
+
+  // NETCONF Simple Types
+
+  typedef session-id-type {
+    type uint32 {
+      range "1..max";
+    }
+    description
+      "NETCONF Session Id";
+  }
+
+  typedef session-id-or-zero-type {
+    type uint32;
+    description
+      "NETCONF Session Id or Zero to indicate none";
+  }
+  typedef error-tag-type {
+    type enumeration {
+       enum in-use {
+         description
+           "The request requires a resource that
+            already is in use.";
+       }
+       enum invalid-value {
+         description
+           "The request specifies an unacceptable value for one
+            or more parameters.";
+       }
+       enum too-big {
+         description
+           "The request or response (that would be generated) is
+            too large for the implementation to handle.";
+       }
+       enum missing-attribute {
+         description
+           "An expected attribute is missing.";
+       }
+       enum bad-attribute {
+         description
+           "An attribute value is not correct; e.g., wrong type,
+            out of range, pattern mismatch.";
+       }
+       enum unknown-attribute {
+         description
+           "An unexpected attribute is present.";
+       }
+       enum missing-element {
+         description
+           "An expected element is missing.";
+       }
+       enum bad-element {
+         description
+           "An element value is not correct; e.g., wrong type,
+            out of range, pattern mismatch.";
+       }
+       enum unknown-element {
+         description
+           "An unexpected element is present.";
+       }
+       enum unknown-namespace {
+         description
+           "An unexpected namespace is present.";
+       }
+       enum access-denied {
+         description
+           "Access to the requested protocol operation or
+            data model is denied because authorization failed.";
+       }
+       enum lock-denied {
+         description
+           "Access to the requested lock is denied because the
+            lock is currently held by another entity.";
+       }
+       enum resource-denied {
+         description
+           "Request could not be completed because of
+            insufficient resources.";
+       }
+       enum rollback-failed {
+         description
+           "Request to roll back some configuration change (via
+            rollback-on-error or <discard-changes> operations)
+            was not completed for some reason.";
+
+       }
+       enum data-exists {
+         description
+           "Request could not be completed because the relevant
+            data model content already exists.  For example,
+            a 'create' operation was attempted on data that
+            already exists.";
+       }
+       enum data-missing {
+         description
+           "Request could not be completed because the relevant
+            data model content does not exist.  For example,
+            a 'delete' operation was attempted on
+            data that does not exist.";
+       }
+       enum operation-not-supported {
+         description
+           "Request could not be completed because the requested
+            operation is not supported by this implementation.";
+       }
+       enum operation-failed {
+         description
+           "Request could not be completed because the requested
+            operation failed for some reason not covered by
+            any other error condition.";
+       }
+       enum partial-operation {
+         description
+           "This error-tag is obsolete, and SHOULD NOT be sent
+            by servers conforming to this document.";
+       }
+       enum malformed-message {
+         description
+           "A message could not be handled because it failed to
+            be parsed correctly.  For example, the message is not
+            well-formed XML or it uses an invalid character set.";
+       }
+     }
+     description "NETCONF Error Tag";
+     reference "RFC 6241, Appendix A";
+  }
+
+  typedef error-severity-type {
+    type enumeration {
+      enum error {
+        description "Error severity";
+      }
+      enum warning {
+        description "Warning severity";
+      }
+    }
+    description "NETCONF Error Severity";
+    reference "RFC 6241, Section 4.3";
+  }
+
+  typedef edit-operation-type {
+    type enumeration {
+      enum merge {
+        description
+          "The configuration data identified by the
+           element containing this attribute is merged
+           with the configuration at the corresponding
+           level in the configuration datastore identified
+           by the target parameter.";
+      }
+      enum replace {
+        description
+          "The configuration data identified by the element
+           containing this attribute replaces any related
+           configuration in the configuration datastore
+           identified by the target parameter.  If no such
+           configuration data exists in the configuration
+           datastore, it is created.  Unlike a
+           <copy-config> operation, which replaces the
+           entire target configuration, only the configuration
+           actually present in the config parameter is affected.";
+      }
+      enum create {
+        description
+          "The configuration data identified by the element
+           containing this attribute is added to the
+           configuration if and only if the configuration
+           data does not already exist in the configuration
+           datastore.  If the configuration data exists, an
+           <rpc-error> element is returned with an
+           <error-tag> value of 'data-exists'.";
+      }
+      enum delete {
+        description
+          "The configuration data identified by the element
+           containing this attribute is deleted from the
+           configuration if and only if the configuration
+           data currently exists in the configuration
+           datastore.  If the configuration data does not
+           exist, an <rpc-error> element is returned with
+           an <error-tag> value of 'data-missing'.";
+      }
+      enum remove {
+        description
+          "The configuration data identified by the element
+           containing this attribute is deleted from the
+           configuration if the configuration
+           data currently exists in the configuration
+           datastore.  If the configuration data does not
+           exist, the 'remove' operation is silently ignored
+           by the server.";
+      }
+    }
+    default "merge";
+    description "NETCONF 'operation' attribute values";
+    reference "RFC 6241, Section 7.2";
+  }
+
+  // NETCONF Standard Protocol Operations
+
+  rpc get-config {
+    description
+      "Retrieve all or part of a specified configuration.";
+
+    reference "RFC 6241, Section 7.1";
+
+    input {
+      container source {
+        description
+          "Particular configuration to retrieve.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration to retrieve.";
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.
+               This is optional-to-implement on the server because
+               not all servers will support filtering for this
+               datastore.";
+          }
+        }
+      }
+
+      anyxml filter {
+        description
+          "Subtree or XPath filter to use.";
+        nc:get-filter-element-attributes;
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Copy of the source datastore subset that matched
+           the filter criteria (if any).  An empty data container
+           indicates that the request did not produce any results.";
+      }
+    }
+  }
+
+  rpc edit-config {
+    description
+      "The <edit-config> operation loads all or part of a specified
+       configuration to the specified target configuration.";
+
+    reference "RFC 6241, Section 7.2";
+
+    input {
+      container target {
+        description
+          "Particular configuration to edit.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            if-feature writable-running;
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+        }
+      }
+
+      leaf default-operation {
+        type enumeration {
+          enum merge {
+            description
+              "The default operation is merge.";
+          }
+          enum replace {
+            description
+              "The default operation is replace.";
+          }
+          enum none {
+            description
+              "There is no default operation.";
+          }
+        }
+        default "merge";
+        description
+          "The default operation to use.";
+      }
+
+      leaf test-option {
+        if-feature validate;
+        type enumeration {
+          enum test-then-set {
+            description
+              "The server will test and then set if no errors.";
+          }
+          enum set {
+            description
+              "The server will set without a test first.";
+          }
+
+          enum test-only {
+            description
+              "The server will only test and not set, even
+               if there are no errors.";
+          }
+        }
+        default "test-then-set";
+        description
+          "The test option to use.";
+      }
+
+      leaf error-option {
+        type enumeration {
+          enum stop-on-error {
+            description
+              "The server will stop on errors.";
+          }
+          enum continue-on-error {
+            description
+              "The server may continue on errors.";
+          }
+          enum rollback-on-error {
+            description
+              "The server will roll back on errors.
+               This value can only be used if the 'rollback-on-error'
+               feature is supported.";
+          }
+        }
+        default "stop-on-error";
+        description
+          "The error option to use.";
+      }
+
+      choice edit-content {
+        mandatory true;
+        description
+          "The content for the edit operation.";
+
+        anyxml config {
+          description
+            "Inline Config content.";
+        }
+        leaf url {
+          if-feature url;
+          type inet:uri;
+          description
+            "URL-based config content.";
+        }
+      }
+    }
+  }
+
+  rpc copy-config {
+    description
+      "Create or replace an entire configuration datastore with the
+       contents of another complete configuration datastore.";
+
+    reference "RFC 6241, Section 7.3";
+
+    input {
+      container target {
+        description
+          "Particular configuration to copy to.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target of the copy operation.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            if-feature writable-running;
+            type empty;
+            description
+              "The running configuration is the config target.
+               This is optional-to-implement on the server.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config target.";
+          }
+        }
+      }
+
+      container source {
+        description
+          "Particular configuration to copy from.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration source for the copy operation.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config source.";
+          }
+          anyxml config {
+            description
+              "Inline Config content: <config> element.  Represents
+               an entire configuration datastore, not
+               a subset of the running datastore.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc delete-config {
+    description
+      "Delete a configuration datastore.";
+
+    reference "RFC 6241, Section 7.4";
+
+    input {
+      container target {
+        description
+          "Particular configuration to delete.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to delete.";
+
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc lock {
+    description
+      "The lock operation allows the client to lock the configuration
+       system of a device.";
+
+    reference "RFC 6241, Section 7.5";
+
+    input {
+      container target {
+        description
+          "Particular configuration to lock.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to lock.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config target.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc unlock {
+    description
+      "The unlock operation is used to release a configuration lock,
+       previously obtained with the 'lock' operation.";
+
+    reference "RFC 6241, Section 7.6";
+
+    input {
+      container target {
+        description
+          "Particular configuration to unlock.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to unlock.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config target.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc get {
+    description
+      "Retrieve running configuration and device state information.";
+
+    reference "RFC 6241, Section 7.7";
+
+    input {
+      anyxml filter {
+        description
+          "This parameter specifies the portion of the system
+           configuration and state data to retrieve.";
+        nc:get-filter-element-attributes;
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Copy of the running datastore subset and/or state
+           data that matched the filter criteria (if any).
+           An empty data container indicates that the request did not
+           produce any results.";
+      }
+    }
+  }
+
+  rpc close-session {
+    description
+      "Request graceful termination of a NETCONF session.";
+
+    reference "RFC 6241, Section 7.8";
+  }
+
+  rpc kill-session {
+    description
+      "Force the termination of a NETCONF session.";
+
+    reference "RFC 6241, Section 7.9";
+
+    input {
+      leaf session-id {
+        type session-id-type;
+        mandatory true;
+        description
+          "Particular session to kill.";
+      }
+    }
+  }
+
+  rpc commit {
+    if-feature candidate;
+
+    description
+      "Commit the candidate configuration as the device's new
+       current configuration.";
+
+    reference "RFC 6241, Section 8.3.4.1";
+
+    input {
+      leaf confirmed {
+        if-feature confirmed-commit;
+        type empty;
+        description
+          "Requests a confirmed commit.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf confirm-timeout {
+        if-feature confirmed-commit;
+        type uint32 {
+          range "1..max";
+        }
+        units "seconds";
+        default "600";   // 10 minutes
+        description
+          "The timeout interval for a confirmed commit.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf persist {
+        if-feature confirmed-commit;
+        type string;
+        description
+          "This parameter is used to make a confirmed commit
+           persistent.  A persistent confirmed commit is not aborted
+           if the NETCONF session terminates.  The only way to abort
+           a persistent confirmed commit is to let the timer expire,
+           or to use the <cancel-commit> operation.
+
+           The value of this parameter is a token that must be given
+           in the 'persist-id' parameter of <commit> or
+           <cancel-commit> operations in order to confirm or cancel
+           the persistent confirmed commit.
+
+           The token should be a random string.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf persist-id {
+        if-feature confirmed-commit;
+        type string;
+        description
+          "This parameter is given in order to commit a persistent
+           confirmed commit.  The value must be equal to the value
+           given in the 'persist' parameter to the <commit> operation.
+           If it does not match, the operation fails with an
+          'invalid-value' error.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+    }
+  }
+
+  rpc discard-changes {
+    if-feature candidate;
+
+    description
+      "Revert the candidate configuration to the current
+       running configuration.";
+    reference "RFC 6241, Section 8.3.4.2";
+  }
+
+  rpc cancel-commit {
+    if-feature confirmed-commit;
+    description
+      "This operation is used to cancel an ongoing confirmed commit.
+       If the confirmed commit is persistent, the parameter
+       'persist-id' must be given, and it must match the value of the
+       'persist' parameter.";
+    reference "RFC 6241, Section 8.4.4.1";
+
+    input {
+      leaf persist-id {
+        type string;
+        description
+          "This parameter is given in order to cancel a persistent
+           confirmed commit.  The value must be equal to the value
+           given in the 'persist' parameter to the <commit> operation.
+           If it does not match, the operation fails with an
+          'invalid-value' error.";
+      }
+    }
+  }
+
+  rpc validate {
+    if-feature validate;
+
+    description
+      "Validates the contents of the specified configuration.";
+
+    reference "RFC 6241, Section 8.6.4.1";
+
+    input {
+      container source {
+        description
+          "Particular configuration to validate.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration source to validate.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config source.";
+          }
+          anyxml config {
+            description
+              "Inline Config content: <config> element.  Represents
+               an entire configuration datastore, not
+               a subset of the running datastore.";
+          }
+        }
+      }
+    }
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-snmp-common@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-common@2014-12-10.yang
new file mode 100644
index 0000000..a7d27c2
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-common@2014-12-10.yang
@@ -0,0 +1,184 @@
+submodule ietf-snmp-common {
+
+  belongs-to ietf-snmp {
+    prefix snmp;
+  }
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  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 common 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";
+  }
+
+  /* Collection of SNMP-specific data types */
+
+  typedef admin-string {
+    type string {
+      length "0..255";
+    }
+    description
+      "Represents SnmpAdminString as defined in RFC 3411.
+
+      Note that the size of an SnmpAdminString is measured in
+      octets, not characters.";
+
+    reference
+      "RFC 3411: An Architecture for Describing Simple Network
+         Management Protocol (SNMP) Management Frameworks.
+         SNMP-FRAMEWORK-MIB.SnmpAdminString";
+  }
+
+  typedef identifier {
+    type admin-string {
+      length "1..32";
+    }
+    description
+      "Identifiers are used to name items in the SNMP configuration
+      datastore.";
+  }
+
+  typedef context-name {
+    type admin-string {
+      length "0..32";
+    }
+    description
+      "The context type represents an SNMP context name.";
+    reference
+      "RFC 3411: An Architecture for Describing Simple Network
+         Management Protocol (SNMP) Management Frameworks";
+  }
+
+  typedef security-name {
+    type admin-string {
+      length "1..32";
+    }
+    description
+      "The security-name type represents an SNMP security name.";
+    reference
+      "RFC 3411: An Architecture for Describing Simple Network
+         Management Protocol (SNMP) Management Frameworks";
+  }
+
+  typedef security-model {
+    type union {
+      type enumeration {
+        enum v1  { value 1; }
+        enum v2c { value 2; }
+        enum usm { value 3; }
+        enum tsm { value 4; }
+      }
+      type int32 {
+        range "1..2147483647";
+      }
+    }
+    reference
+      "RFC 3411: An Architecture for Describing Simple Network
+         Management Protocol (SNMP) Management Frameworks";
+  }
+
+  typedef security-model-or-any {
+    type union {
+      type enumeration {
+        enum any { value 0; }
+      }
+      type security-model;
+    }
+    reference
+      "RFC 3411: An Architecture for Describing Simple Network
+         Management Protocol (SNMP) Management Frameworks";
+  }
+
+  typedef security-level {
+    type enumeration {
+      enum no-auth-no-priv { value 1; }
+      enum auth-no-priv    { value 2; }
+      enum auth-priv       { value 3; }
+    }
+    reference
+      "RFC 3411: An Architecture for Describing Simple Network
+         Management Protocol (SNMP) Management Frameworks";
+  }
+
+  typedef engine-id {
+    type yang:hex-string {
+      pattern '([0-9a-fA-F]){2}(:([0-9a-fA-F]){2}){4,31}';
+    }
+    description
+      "The engine ID specified as a list of colon-specified
+      hexadecimal octets, e.g., '80:00:02:b8:04:61:62:63'.";
+    reference
+      "RFC 3411: An Architecture for Describing Simple Network
+         Management Protocol (SNMP) Management Frameworks";
+  }
+
+  typedef wildcard-object-identifier {
+    type string;
+    description
+      "The wildcard-object-identifier type represents an SNMP object
+      identifier where subidentifiers can be given either as a label,
+      in numeric form, or a wildcard, represented by an asterisk
+      ('*').";
+  }
+
+  typedef tag-value {
+    type string {
+      length "0..255";
+    }
+    description
+      "Represents SnmpTagValue as defined in RFC 3413.
+
+      Note that the size of an SnmpTagValue is measured in
+      octets, not characters.";
+    reference
+      "RFC 3413: Simple Network Management Protocol (SNMP)
+         Applications.
+         SNMP-TARGET-MIB.SnmpTagValue";
+  }
+
+  container snmp {
+    description
+      "Top-level container for SNMP-related configuration and
+      status objects.";
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-snmp-community@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-community@2014-12-10.yang
new file mode 100644
index 0000000..6bddf1a
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-community@2014-12-10.yang
@@ -0,0 +1,241 @@
+submodule ietf-snmp-community {
+
+  belongs-to ietf-snmp {
+    prefix snmp;
+  }
+
+  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 community-based 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 3584: Coexistence between Version 1, Version 2, and
+       Version 3 of the Internet-standard Network
+       Management Framework";
+
+  revision 2014-12-10 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+  }
+
+  augment /snmp:snmp {
+
+    list community {
+      key index;
+
+      description
+        "List of communities.";
+      reference
+        "RFC 3584: Coexistence between Version 1, Version 2,
+           and Version 3 of the Internet-standard
+           Network Management Framework.
+           SNMP-COMMUNITY-MIB.snmpCommunityTable";
+
+      leaf index {
+        type snmp:identifier;
+        description
+          "Index into the community list.";
+        reference
+          "RFC 3584: Coexistence between Version 1, Version 2,
+             and Version 3 of the Internet-standard
+             Network Management Framework.
+             SNMP-COMMUNITY-MIB.snmpCommunityIndex";
+      }
+      choice name {
+        nacm:default-deny-all;
+        description
+          "The community name, specified as either a string or
+           a binary value.  The binary name is used when the
+           community name contains characters that are not legal
+           in a string.
+
+           If not set, the value of 'security-name' is operationally
+           used as the snmpCommunityName.";
+        reference
+          "RFC 3584: Coexistence between Version 1, Version 2,
+             and Version 3 of the Internet-standard
+             Network Management Framework.
+             SNMP-COMMUNITY-MIB.snmpCommunityName";
+        leaf text-name {
+          type string;
+          description
+            "A community name that can be represented as a
+             YANG string.";
+        }
+        leaf binary-name {
+          type binary;
+          description
+            "A community name represented as a binary value.";
+        }
+      }
+      leaf security-name {
+        type snmp:security-name;
+        mandatory true;
+        nacm:default-deny-all;
+        description
+          "The snmpCommunitySecurityName of this entry.";
+        reference
+          "RFC 3584: Coexistence between Version 1, Version 2,
+             and Version 3 of the Internet-standard
+             Network Management Framework.
+             SNMP-COMMUNITY-MIB.snmpCommunitySecurityName";
+      }
+      leaf engine-id {
+        if-feature snmp:proxy;
+        type snmp:engine-id;
+        description
+          "If not set, the value of the local SNMP engine is
+           operationally used by the device.";
+        reference
+          "RFC 3584: Coexistence between Version 1, Version 2,
+             and Version 3 of the Internet-standard
+             Network Management Framework.
+             SNMP-COMMUNITY-MIB.snmpCommunityContextEngineID";
+      }
+      leaf context {
+        type snmp:context-name;
+        default "";
+        description
+          "The context in which management information is accessed
+           when using the community string specified by this entry.";
+        reference
+          "RFC 3584: Coexistence between Version 1, Version 2,
+             and Version 3 of the Internet-standard
+             Network Management Framework.
+             SNMP-COMMUNITY-MIB.snmpCommunityContextName";
+      }
+      leaf target-tag {
+        type snmp:tag-value;
+        description
+          "Used to limit access for this community to the specified
+           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 3584: Coexistence between Version 1, Version 2,
+             and Version 3 of the Internet-standard
+             Network Management Framework.
+             SNMP-COMMUNITY-MIB.snmpCommunityTransportTag";
+      }
+    }
+  }
+
+  grouping v1-target-params {
+    container v1 {
+      description
+        "SNMPv1 parameters type.
+         Represents snmpTargetParamsMPModel '0',
+         snmpTargetParamsSecurityModel '1', and
+         snmpTargetParamsSecurityLevel 'noAuthNoPriv'.";
+      leaf security-name {
+        type snmp:security-name;
+        mandatory true;
+        description
+          "Implementations MAY restrict the values of this leaf
+           to be one of the available values of
+           /snmp/community/security-name in a valid configuration.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetParamsSecurityName";
+      }
+    }
+  }
+
+  grouping v2c-target-params {
+    container v2c {
+      description
+        "SNMPv2 community parameters type.
+         Represents snmpTargetParamsMPModel '1',
+         snmpTargetParamsSecurityModel '2', and
+         snmpTargetParamsSecurityLevel 'noAuthNoPriv'.";
+      leaf security-name {
+        type snmp:security-name;
+        mandatory true;
+        description
+          "Implementations MAY restrict the values of this leaf
+           to be one of the available values of
+           /snmp/community/security-name in a valid configuration.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetParamsSecurityName";
+      }
+    }
+  }
+
+  augment /snmp:snmp/snmp:target-params/snmp:params {
+    case v1 {
+      uses v1-target-params;
+    }
+    case v2c {
+      uses v2c-target-params;
+    }
+  }
+
+  augment /snmp:snmp/snmp:target {
+    when "snmp:v1 or snmp:v2c";
+    leaf mms {
+      type union {
+        type enumeration {
+          enum "unknown" { value 0; }
+        }
+        type int32 {
+          range "484..max";
+        }
+      }
+      default "484";
+      description
+        "The maximum message size.";
+      reference
+        "RFC 3584: Coexistence between Version 1, Version 2,
+           and Version 3 of the Internet-standard
+           Network Management Framework.
+           SNMP-COMMUNITY-MIB.snmpTargetAddrMMS";
+    }
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-snmp-engine@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-engine@2014-12-10.yang
new file mode 100644
index 0000000..4b412ae
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-engine@2014-12-10.yang
@@ -0,0 +1,155 @@
+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";
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-snmp-notification@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-notification@2014-12-10.yang
new file mode 100644
index 0000000..ea4a86c
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-notification@2014-12-10.yang
@@ -0,0 +1,204 @@
+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";
+    }
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-snmp-proxy@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-proxy@2014-12-10.yang
new file mode 100644
index 0000000..a28ff5c
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-proxy@2014-12-10.yang
@@ -0,0 +1,155 @@
+submodule ietf-snmp-proxy {
+
+  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 proxies.
+
+     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 proxy {
+    description
+      "A server implements this feature if it can act as an
+      SNMP proxy.";
+    reference
+      "RFC 3413: Simple Network Management Protocol (SNMP)
+         Applications";
+  }
+
+  augment /snmp:snmp {
+    if-feature snmp:proxy;
+
+    list proxy {
+      key name;
+
+      description
+        "List of proxy parameters.";
+      reference
+        "RFC 3413: Simple Network Management Protocol (SNMP).
+           Applications.
+           SNMP-PROXY-MIB.snmpProxyTable";
+
+      leaf name {
+        type snmp:identifier;
+        description
+          "Identifies the proxy parameter entry.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-PROXY-MIB.snmpProxyName";
+      }
+      leaf type {
+        type enumeration {
+          enum read { value 1; }
+          enum write { value 2; }
+          enum trap { value 3; }
+          enum inform { value 4; }
+        }
+        mandatory true;
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-PROXY-MIB.snmpProxyType";
+      }
+      leaf context-engine-id {
+        type snmp:engine-id;
+        mandatory true;
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-PROXY-MIB.snmpProxyContextEngineID";
+      }
+      leaf context-name {
+        type snmp:context-name;
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-PROXY-MIB.snmpProxyContextName";
+      }
+      leaf target-params-in {
+        type snmp:identifier;
+        description
+          "The name of a target parameters list entry.
+
+           Implementations MAY restrict the values of this
+           leaf to be one of the available values of
+           /snmp/target-params/name in a valid configuration.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-PROXY-MIB.snmpProxyTargetParamsIn";
+      }
+      leaf single-target-out {
+        when "../type = 'read' or ../type = 'write'";
+        type snmp:identifier;
+        description
+          "Implementations MAY restrict the values of this leaf
+           to be one of the available values of /snmp/target/name in
+           a valid configuration.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-PROXY-MIB.snmpProxySingleTargetOut";
+      }
+
+      leaf multiple-target-out {
+        when "../type = 'trap' or ../type = 'inform'";
+        type snmp:tag-value;
+        description
+          "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-PROXY-MIB.snmpProxyMultipleTargetOut";
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-snmp-ssh@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-ssh@2014-12-10.yang
new file mode 100644
index 0000000..e7a5eac
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-ssh@2014-12-10.yang
@@ -0,0 +1,145 @@
+submodule ietf-snmp-ssh {
+
+  belongs-to ietf-snmp {
+    prefix snmp;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  include ietf-snmp-common;
+  include ietf-snmp-engine;
+  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 the Secure Shell Transport Model (SSHTM)
+     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 5592: Secure Shell Transport Model for the
+       Simple Network Management Protocol (SNMP)";
+
+  revision 2014-12-10 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+  }
+
+  feature sshtm {
+    description
+      "A server implements this feature if it supports the
+      Secure Shell Transport Model for SNMP.";
+    reference
+      "RFC 5592: Secure Shell Transport Model for the
+         Simple Network Management Protocol (SNMP)";
+  }
+
+  augment /snmp:snmp/snmp:engine/snmp:listen/snmp:transport {
+    if-feature sshtm;
+    case ssh {
+      container ssh {
+        description
+          "The IPv4 or IPv6 address and port to which the
+           engine listens for SNMP messages over SSH.";
+
+        leaf ip {
+          type inet:ip-address;
+          mandatory true;
+          description
+            "The IPv4 or IPv6 address on which the engine listens
+             for SNMP messages over SSH.";
+        }
+        leaf port {
+          type inet:port-number;
+          description
+            "The TCP port on which the engine listens for SNMP
+             messages over SSH.
+
+             If the port is not configured, an engine that
+             acts as a Command Responder uses port 5161, and
+             an engine that acts as a Notification Receiver
+             uses port 5162.";
+        }
+      }
+    }
+  }
+
+  augment /snmp:snmp/snmp:target/snmp:transport {
+    if-feature sshtm;
+    case ssh {
+      reference
+        "RFC 5592: Secure Shell Transport Model for the
+           Simple Network Management Protocol (SNMP).
+           SNMP-SSH-TM-MIB.snmpSSHDomain";
+      container ssh {
+        leaf ip {
+          type inet:host;
+          mandatory true;
+          reference
+            "RFC 3413: Simple Network Management Protocol (SNMP).
+               Applications.
+               SNMP-TARGET-MIB.snmpTargetAddrTAddress
+             RFC 5592: Secure Shell Transport Model for the
+               Simple Network Management Protocol (SNMP).
+               SNMP-SSH-TM-MIB.SnmpSSHAddress";
+        }
+        leaf port {
+          type inet:port-number;
+          default 5161;
+          reference
+            "RFC 3413: Simple Network Management Protocol (SNMP).
+               Applications.
+               SNMP-TARGET-MIB.snmpTargetAddrTAddress
+             RFC 5592: Secure Shell Transport Model for the
+               Simple Network Management Protocol (SNMP).
+               SNMP-SSH-TM-MIB.SnmpSSHAddress";
+        }
+        leaf username {
+          type string;
+          reference
+            "RFC 3413: Simple Network Management Protocol (SNMP).
+               Applications.
+               SNMP-TARGET-MIB.snmpTargetAddrTAddress
+             RFC 5592: Secure Shell Transport Model for the
+               Simple Network Management Protocol (SNMP).
+               SNMP-SSH-TM-MIB.SnmpSSHAddress";
+        }
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-snmp-target@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-target@2014-12-10.yang
new file mode 100644
index 0000000..9b1d6d1
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-target@2014-12-10.yang
@@ -0,0 +1,207 @@
+submodule ietf-snmp-target {
+
+  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 targets.
+
+     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";
+  }
+
+  augment /snmp:snmp {
+
+    list target {
+      key name;
+      description
+        "List of targets.";
+      reference
+        "RFC 3413: Simple Network Management Protocol (SNMP)
+           Applications.
+           SNMP-TARGET-MIB.snmpTargetAddrTable";
+
+      leaf name {
+        type snmp:identifier;
+        description
+          "Identifies the target.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP)
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetAddrName";
+      }
+      choice transport {
+        mandatory true;
+        description
+          "Transport address of the target.
+
+           The snmpTargetAddrTDomain and snmpTargetAddrTAddress
+           objects are mapped to transport-specific YANG nodes.  Each
+           transport is configured as a separate case in this
+           choice.  Submodules providing configuration for additional
+           transports are expected to augment this choice.";
+
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP)
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetAddrTDomain
+             SNMP-TARGET-MIB.snmpTargetAddrTAddress";
+        case udp {
+          reference
+           "RFC 3417: Transport Mappings for the Simple Network
+              Management Protocol (SNMP).
+              SNMPv2-TM.snmpUDPDomain
+            RFC 3419: Textual Conventions for Transport Addresses.
+              TRANSPORT-ADDRESS-MIB.transportDomainUdpIpv4
+              TRANSPORT-ADDRESS-MIB.transportDomainUdpIpv4z
+              TRANSPORT-ADDRESS-MIB.transportDomainUdpIpv6
+              TRANSPORT-ADDRESS-MIB.transportDomainUdpIpv6z";
+          container udp {
+            leaf ip {
+              type inet:ip-address;
+              mandatory true;
+              reference
+                "RFC 3413: Simple Network Management Protocol (SNMP).
+                   SNMP-TARGET-MIB.snmpTargetAddrTAddress";
+            }
+            leaf port {
+              type inet:port-number;
+              default 162;
+              description
+                "UDP port number.";
+              reference
+                "RFC 3413: Simple Network Management Protocol (SNMP).
+                   SNMP-TARGET-MIB.snmpTargetAddrTAddress";
+            }
+            leaf prefix-length {
+              type uint8;
+              description
+                "The value of this leaf must match the value of
+                 ../snmp:ip.  If ../snmp:ip contains an IPv4 address,
+                 this leaf must be less than or equal to 32.  If it
+                 contains an IPv6 address, it must be less than or
+                 equal to 128.
+
+                 Note that the prefix-length is currently only used
+                 by the Community-based Security Model to filter
+                 incoming messages.  Furthermore, the prefix-length
+                 filtering does not cover all possible filters
+                 supported by the corresponding MIB object.";
+
+              reference
+                "RFC 3584: Coexistence between Version 1, Version 2,
+                   and Version 3 of the Internet-standard
+                   Network Management Framework.
+                   SNMP-COMMUNITY-MIB.snmpTargetAddrTMask";
+            }
+          }
+        }
+      }
+      leaf-list tag {
+        type snmp:tag-value;
+        description
+          "List of tag values used to select target addresses.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetAddrTagList";
+      }
+      leaf timeout {
+        type uint32;
+        units "0.01 seconds";
+        default 1500;
+        description
+          "Needed only if this target can receive
+           InformRequest-PDUs.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetAddrTimeout";
+      }
+      leaf retries {
+        type uint8;
+        default 3;
+        description
+          "Needed only if this target can receive
+           InformRequest-PDUs.";
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetAddrRetryCount";
+      }
+      leaf target-params {
+        type snmp:identifier;
+        mandatory true;
+        reference
+          "RFC 3413: Simple Network Management Protocol (SNMP).
+             Applications.
+             SNMP-TARGET-MIB.snmpTargetAddrParams";
+      }
+    }
+
+    list target-params {
+      key name;
+      description
+        "List of target parameters.";
+      reference
+        "RFC 3413: Simple Network Management Protocol (SNMP).
+           Applications.
+           SNMP-TARGET-MIB.snmpTargetParamsTable";
+
+      leaf name {
+        type snmp:identifier;
+      }
+      choice params {
+        description
+          "This choice is augmented with case nodes containing
+           configuration parameters specific to the security model.";
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-snmp-tls@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-tls@2014-12-10.yang
new file mode 100644
index 0000000..e8ed5f7
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-tls@2014-12-10.yang
@@ -0,0 +1,222 @@
+submodule ietf-snmp-tls {
+
+  belongs-to ietf-snmp {
+    prefix snmp;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+  import ietf-x509-cert-to-name {
+    prefix x509c2n;
+  }
+
+  include ietf-snmp-common;
+  include ietf-snmp-engine;
+  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 the Transport Layer Security Transport Model (TLSTM)
+     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 6353: Transport Layer Security (TLS) Transport Model for
+       the Simple Network Management Protocol (SNMP)";
+
+  revision 2014-12-10 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+  }
+
+  feature tlstm {
+    description
+      "A server implements this feature if it supports the
+      Transport Layer Security Transport Model for SNMP.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model for
+         the Simple Network Management Protocol (SNMP)";
+  }
+
+  augment /snmp:snmp/snmp:engine/snmp:listen/snmp:transport {
+    if-feature tlstm;
+    case tls {
+      container tls {
+        description
+          "A list of IPv4 and IPv6 addresses and ports to which the
+           engine listens for SNMP messages over TLS.";
+
+        leaf ip {
+          type inet:ip-address;
+          mandatory true;
+          description
+            "The IPv4 or IPv6 address on which the engine listens
+             for SNMP messages over TLS.";
+        }
+        leaf port {
+          type inet:port-number;
+          description
+            "The TCP port on which the engine listens for SNMP
+             messages over TLS.
+
+             If the port is not configured, an engine that
+             acts as a Command Responder uses port 10161, and
+             an engine that acts as a Notification Receiver
+             uses port 10162.";
+        }
+      }
+    }
+    case dtls {
+      container dtls {
+        description
+          "A list of IPv4 and IPv6 addresses and ports to which the
+           engine listens for SNMP messages over DTLS.";
+
+        leaf ip {
+          type inet:ip-address;
+          mandatory true;
+          description
+            "The IPv4 or IPv6 address on which the engine listens
+             for SNMP messages over DTLS.";
+        }
+        leaf port {
+          type inet:port-number;
+          description
+            "The UDP port on which the engine listens for SNMP
+             messages over DTLS.
+
+             If the port is not configured, an engine that
+             acts as a Command Responder uses port 10161, and
+             an engine that acts as a Notification Receiver
+             uses port 10162.";
+        }
+      }
+    }
+  }
+
+  augment /snmp:snmp {
+    if-feature tlstm;
+    container tlstm {
+      uses x509c2n:cert-to-name {
+        description
+          "Defines how certificates are mapped to names.  The
+           resulting name is used as a security name.";
+        refine cert-to-name/map-type {
+          description
+            "Mappings that use the snmpTlstmCertToTSNData column
+             need to augment the cert-to-name list with
+             additional configuration objects corresponding
+             to the snmpTlstmCertToTSNData value.  Such objects
+             should use the 'when' statement to make them
+             conditional based on the map-type.";
+        }
+      }
+    }
+  }
+
+  grouping tls-transport {
+    leaf ip {
+      type inet:host;
+      mandatory true;
+      reference
+        "RFC 3413: Simple Network Management Protocol (SNMP).
+           Applications.
+           SNMP-TARGET-MIB.snmpTargetAddrTAddress
+         RFC 6353: Transport Layer Security (TLS) Transport Model
+           for the Simple Network Management Protocol (SNMP).
+           SNMP-TLS-TM-MIB.SnmpTLSAddress";
+    }
+    leaf port {
+      type inet:port-number;
+      default 10161;
+      reference
+        "RFC 3413: Simple Network Management Protocol (SNMP).
+           Applications.
+           SNMP-TARGET-MIB.snmpTargetAddrTAddress
+         RFC 6353: Transport Layer Security (TLS) Transport Model
+           for the Simple Network Management Protocol (SNMP).
+           SNMP-TLS-TM-MIB.SnmpTLSAddress";
+    }
+    leaf client-fingerprint {
+      type x509c2n:tls-fingerprint;
+      reference
+        "RFC 6353: Transport Layer Security (TLS) Transport Model
+           for the Simple Network Management Protocol (SNMP).
+           SNMP-TLS-TM-MIB.snmpTlstmParamsClientFingerprint";
+    }
+    leaf server-fingerprint {
+      type x509c2n:tls-fingerprint;
+      reference
+        "RFC 6353: Transport Layer Security (TLS) Transport Model
+           for the Simple Network Management Protocol (SNMP).
+           SNMP-TLS-TM-MIB.snmpTlstmAddrServerFingerprint";
+    }
+    leaf server-identity {
+      type snmp:admin-string;
+      reference
+        "RFC 6353: Transport Layer Security (TLS) Transport Model
+           for the Simple Network Management Protocol (SNMP).
+           SNMP-TLS-TM-MIB.snmpTlstmAddrServerIdentity";
+    }
+  }
+
+  augment /snmp:snmp/snmp:target/snmp:transport {
+    if-feature tlstm;
+    case tls {
+      reference
+        "RFC 6353: Transport Layer Security (TLS) Transport Model
+           for the Simple Network Management Protocol (SNMP).
+           SNMP-TLS-TM-MIB.snmpTLSTCPDomain";
+      container tls {
+        uses tls-transport;
+      }
+    }
+  }
+
+  augment /snmp:snmp/snmp:target/snmp:transport {
+    if-feature tlstm;
+    case dtls {
+      reference
+        "RFC 6353: Transport Layer Security (TLS) Transport Model
+           for the Simple Network Management Protocol (SNMP).
+           SNMP-TLS-TM-MIB.snmpDTLSUDPDomain";
+      container dtls {
+        uses tls-transport;
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-snmp-tsm@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-tsm@2014-12-10.yang
new file mode 100644
index 0000000..3bf9699
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-tsm@2014-12-10.yang
@@ -0,0 +1,116 @@
+submodule ietf-snmp-tsm {
+
+  belongs-to ietf-snmp {
+    prefix snmp;
+  }
+
+  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 Transport Security Model (TSM) 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 5591: Transport Security Model for the
+       Simple Network Management Protocol (SNMP)";
+
+  revision 2014-12-10 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+  }
+
+  feature tsm {
+    description
+      "A server implements this feature if it supports the
+      Transport Security Model for SNMP.";
+    reference
+      "RFC 5591: Transport Security Model for the
+         Simple Network Management Protocol (SNMP)";
+  }
+  augment /snmp:snmp {
+    if-feature tsm;
+    container tsm {
+      description
+        "Configuration of the Transport Security Model.";
+
+      leaf use-prefix {
+        type boolean;
+        default false;
+        reference
+          "RFC 5591: Transport Security Model for the Simple
+             Network Management Protocol (SNMP).
+             SNMP-TSM-MIB.snmpTsmConfigurationUsePrefix";
+      }
+    }
+  }
+
+  grouping tsm-target-params {
+    container tsm {
+      description
+        "Transport-based security SNMPv3 parameters type.
+
+         Represents snmpTargetParamsMPModel '3' and
+         snmpTargetParamsSecurityModel '4'.";
+      leaf security-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 {
+    if-feature tsm;
+    case tsm {
+      uses tsm-target-params;
+    }
+  }
+
+}
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;
+    }
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-snmp-vacm@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp-vacm@2014-12-10.yang
new file mode 100644
index 0000000..c3e659c
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp-vacm@2014-12-10.yang
@@ -0,0 +1,291 @@
+submodule ietf-snmp-vacm {
+
+  belongs-to ietf-snmp {
+    prefix snmp;
+  }
+
+  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 the View-based Access Control Model (VACM)
+     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 3415: View-based Access Control Model (VACM) for the
+       Simple Network Management Protocol (SNMP)";
+
+  revision 2014-12-10 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+  }
+
+  typedef view-name {
+    type snmp:identifier;
+    description
+      "The view-name type represents an SNMP VACM view name.";
+  }
+
+  typedef group-name {
+    type snmp:identifier;
+    description
+      "The group-name type represents an SNMP VACM group name.";
+  }
+
+  augment /snmp:snmp {
+
+    container vacm {
+      description
+        "Configuration of the View-based Access Control Model.";
+
+      list group {
+        key name;
+        description
+          "VACM groups.
+
+           This data model has a different structure than the MIB.
+           Groups are explicitly defined in this list, and group
+           members are defined in the 'member' list (mapped to
+           vacmSecurityToGroupTable), and access for the group is
+           defined in the 'access' list (mapped to
+           vacmAccessTable).";
+        reference
+          "RFC 3415: View-based Access Control Model (VACM) for the
+             Simple Network Management Protocol (SNMP).
+             SNMP-VIEW-BASED-ACM-MIB.vacmSecurityToGroupTable
+             SNMP-VIEW-BASED-ACM-MIB.vacmAccessTable";
+
+        leaf name {
+          type group-name;
+          description
+            "The name of this VACM group.";
+          reference
+            "RFC 3415: View-based Access Control Model (VACM) for the
+               Simple Network Management Protocol (SNMP).
+               SNMP-VIEW-BASED-ACM-MIB.vacmGroupName";
+        }
+
+        list member {
+          key "security-name";
+          description
+            "A member of this VACM group.
+
+             A specific combination of security-name and
+             security-model MUST NOT be present in more than
+             one group.";
+          reference
+            "RFC 3415: View-based Access Control Model (VACM) for the
+               Simple Network Management Protocol (SNMP).
+               SNMP-VIEW-BASED-ACM-MIB.vacmSecurityToGroupTable";
+
+          leaf security-name {
+            type snmp:security-name;
+            description
+              "The securityName of a group member.";
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmSecurityName";
+          }
+
+          leaf-list security-model {
+            type snmp:security-model;
+            min-elements 1;
+            description
+              "The security models under which this security-name
+               is a member of this group.";
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmSecurityModel";
+          }
+        }
+
+        list access {
+          key "context security-model security-level";
+          description
+            "Definition of access right for groups.";
+          reference
+            "RFC 3415: View-based Access Control Model (VACM) for
+               the Simple Network Management Protocol (SNMP).
+               SNMP-VIEW-BASED-ACM-MIB.vacmAccessTable";
+
+          leaf context {
+            type snmp:context-name;
+            description
+              "The context (prefix) under which the access rights
+               apply.";
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmAccessContextPrefix";
+          }
+
+          leaf context-match {
+            type enumeration {
+              enum exact { value 1; }
+              enum prefix { value 2; }
+            }
+            default exact;
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmAccessContextMatch";
+          }
+
+          leaf security-model {
+            type snmp:security-model-or-any;
+            description
+              "The security model under which the access rights
+              apply.";
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmAccessSecurityModel";
+          }
+
+          leaf security-level {
+            type snmp:security-level;
+            description
+              "The minimum security level under which the access
+               rights apply.";
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmAccessSecurityLevel";
+          }
+
+          leaf read-view {
+            type view-name;
+            description
+              "The name of the MIB view of the SNMP context
+               authorizing read access.  If this leaf does not
+               exist in a configuration, it maps to a zero-length
+               vacmAccessReadViewName.
+
+               Implementations MAY restrict the values of this
+               leaf to be one of the available values of
+               /snmp/vacm/view/name in a valid configuration.";
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmAccessReadViewName";
+          }
+
+          leaf write-view {
+            type view-name;
+            description
+              "The name of the MIB view of the SNMP context
+               authorizing write access.  If this leaf does not
+               exist in a configuration, it maps to a zero-length
+               vacmAccessWriteViewName.
+
+               Implementations MAY restrict the values of this
+               leaf to be one of the available values of
+               /snmp/vacm/view/name in a valid configuration.";
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmAccessWriteViewName";
+          }
+
+          leaf notify-view {
+            type view-name;
+            description
+              "The name of the MIB view of the SNMP context
+               authorizing notify access.  If this leaf does not
+               exist in a configuration, it maps to a zero-length
+               vacmAccessNotifyViewName.
+
+               Implementations MAY restrict the values of this
+               leaf to be one of the available values of
+               /snmp/vacm/view/name in a valid configuration.";
+            reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                   the Simple Network Management Protocol (SNMP).
+                   SNMP-VIEW-BASED-ACM-MIB.vacmAccessNotifyViewName";
+          }
+        }
+      }
+
+      list view {
+        key name;
+        description
+          "Definition of MIB views.";
+        reference
+          "RFC 3415: View-based Access Control Model (VACM) for
+             the Simple Network Management Protocol (SNMP).
+             SNMP-VIEW-BASED-ACM-MIB.vacmViewTreeFamilyTable";
+
+        leaf name {
+          type view-name;
+          description
+            "The name of this VACM MIB view.";
+
+          reference
+            "RFC 3415: View-based Access Control Model (VACM) for
+               the Simple Network Management Protocol (SNMP).
+               SNMP-VIEW-BASED-ACM-MIB.vacmViewTreeFamilyName";
+        }
+
+        leaf-list include {
+          type snmp:wildcard-object-identifier;
+          description
+            "A family of subtrees included in this MIB view.";
+          reference
+              "RFC 3415: View-based Access Control Model (VACM) for
+                 the Simple Network Management Protocol (SNMP).
+                 SNMP-VIEW-BASED-ACM-MIB.vacmViewTreeFamilySubtree
+                 SNMP-VIEW-BASED-ACM-MIB.vacmViewTreeFamilyMask
+                 SNMP-VIEW-BASED-ACM-MIB.vacmViewTreeFamilyType";
+        }
+
+        leaf-list exclude {
+          type snmp:wildcard-object-identifier;
+          description
+            "A family of subtrees excluded from this MIB view.";
+          reference
+            "RFC 3415: View-based Access Control Model (VACM) for
+               the Simple Network Management Protocol (SNMP).
+               SNMP-VIEW-BASED-ACM-MIB.vacmViewTreeFamilySubtree
+               SNMP-VIEW-BASED-ACM-MIB.vacmViewTreeFamilyMask
+               SNMP-VIEW-BASED-ACM-MIB.vacmViewTreeFamilyType";
+        }
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-snmp@2014-12-10.yang b/models/common/src/main/yang/ietf-snmp@2014-12-10.yang
new file mode 100644
index 0000000..60237a6
--- /dev/null
+++ b/models/common/src/main/yang/ietf-snmp@2014-12-10.yang
@@ -0,0 +1,82 @@
+module ietf-snmp {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-snmp";
+  prefix snmp;
+
+  include ietf-snmp-common {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-engine {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-target {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-notification {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-proxy {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-community {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-usm {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-tsm {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-vacm {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-tls {
+    revision-date 2014-12-10;
+  }
+  include ietf-snmp-ssh {
+    revision-date 2014-12-10;
+  }
+
+  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 module 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";
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-system@2014-08-06.yang b/models/common/src/main/yang/ietf-system@2014-08-06.yang
new file mode 100644
index 0000000..1618242
--- /dev/null
+++ b/models/common/src/main/yang/ietf-system@2014-08-06.yang
@@ -0,0 +1,800 @@
+module ietf-system {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-system";
+  prefix "sys";
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-netconf-acm {
+    prefix nacm;
+  }
+
+  import iana-crypt-hash {
+    prefix ianach;
+  }
+
+  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:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "This module contains a collection of YANG definitions for the
+     configuration and identification of some common system
+     properties within a device containing a NETCONF server.  This
+     includes data node definitions for system identification,
+     time-of-day management, user management, DNS resolver
+     configuration, and some protocol operations for system
+     management.
+
+     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 7317; see
+     the RFC itself for full legal notices.";
+
+  revision 2014-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7317: A YANG Data Model for System Management";
+  }
+
+ /*
+  * Typedefs
+  */
+
+  typedef timezone-name {
+    type string;
+    description
+      "A time zone name as used by the Time Zone Database,
+       sometimes referred to as the 'Olson Database'.
+
+       The exact set of valid values is an implementation-specific
+       matter.  Client discovery of the exact set of time zone names
+       for a particular server is out of scope.";
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database";
+   }
+
+  /*
+   * Features
+   */
+
+  feature radius {
+    description
+      "Indicates that the device can be configured as a RADIUS
+       client.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  feature authentication {
+    description
+      "Indicates that the device supports configuration of
+       user authentication.";
+  }
+
+  feature local-users {
+    if-feature authentication;
+    description
+      "Indicates that the device supports configuration of
+       local user authentication.";
+  }
+
+  feature radius-authentication {
+    if-feature radius;
+    if-feature authentication;
+    description
+      "Indicates that the device supports configuration of user
+       authentication over RADIUS.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+                 Authorization for Network Access Server (NAS)
+                 Management";
+  }
+
+  feature ntp {
+    description
+      "Indicates that the device can be configured to use one or
+       more NTP servers to set the system date and time.";
+  }
+
+  feature ntp-udp-port {
+    if-feature ntp;
+    description
+      "Indicates that the device supports the configuration of
+       the UDP port for NTP servers.
+
+       This is a 'feature', since many implementations do not support
+       any port other than the default port.";
+  }
+
+  feature timezone-name {
+    description
+      "Indicates that the local time zone on the device
+       can be configured to use the TZ database
+       to set the time zone and manage daylight saving time.";
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database";
+  }
+
+  feature dns-udp-tcp-port {
+    description
+      "Indicates that the device supports the configuration of
+       the UDP and TCP port for DNS servers.
+
+       This is a 'feature', since many implementations do not support
+       any port other than the default port.";
+  }
+
+  /*
+   * Identities
+   */
+
+  identity authentication-method {
+    description
+      "Base identity for user authentication methods.";
+  }
+
+  identity radius {
+    base authentication-method;
+    description
+      "Indicates user authentication using RADIUS.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+                 Authorization for Network Access Server (NAS)
+                 Management";
+  }
+
+  identity local-users {
+    base authentication-method;
+    description
+      "Indicates password-based authentication of locally
+       configured users.";
+  }
+
+  identity radius-authentication-type {
+    description
+      "Base identity for RADIUS authentication types.";
+  }
+
+  identity radius-pap {
+    base radius-authentication-type;
+    description
+      "The device requests Password Authentication Protocol (PAP)
+       authentication from the RADIUS server.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  identity radius-chap {
+    base radius-authentication-type;
+    description
+      "The device requests Challenge Handshake Authentication
+       Protocol (CHAP) authentication from the RADIUS server.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  /*
+   * Configuration data nodes
+   */
+
+  container system {
+    description
+      "System group configuration.";
+
+    leaf contact {
+      type string;
+      description
+        "The administrator contact information for the system.
+
+         A server implementation MAY map this leaf to the sysContact
+         MIB object.  Such an implementation needs to use some
+         mechanism to handle the differences in size and characters
+         allowed between this leaf and sysContact.  The definition of
+         such a mechanism is outside the scope of this document.";
+      reference
+        "RFC 3418: Management Information Base (MIB) for the
+                   Simple Network Management Protocol (SNMP)
+                   SNMPv2-MIB.sysContact";
+    }
+    leaf hostname {
+      type inet:domain-name;
+     description
+       "The name of the host.  This name can be a single domain
+        label or the fully qualified domain name of the host.";
+    }
+    leaf location {
+      type string;
+      description
+        "The system location.
+
+         A server implementation MAY map this leaf to the sysLocation
+         MIB object.  Such an implementation needs to use some
+         mechanism to handle the differences in size and characters
+         allowed between this leaf and sysLocation.  The definition
+         of such a mechanism is outside the scope of this document.";
+      reference
+        "RFC 3418: Management Information Base (MIB) for the
+                   Simple Network Management Protocol (SNMP)
+                   SNMPv2-MIB.sysLocation";
+    }
+
+    container clock {
+      description
+        "Configuration of the system date and time properties.";
+
+      choice timezone {
+        description
+          "The system time zone information.";
+
+        case timezone-name {
+          if-feature timezone-name;
+          leaf timezone-name {
+            type timezone-name;
+            description
+              "The TZ database name to use for the system, such
+               as 'Europe/Stockholm'.";
+          }
+        }
+        case timezone-utc-offset {
+          leaf timezone-utc-offset {
+            type int16 {
+              range "-1500 .. 1500";
+            }
+            units "minutes";
+            description
+              "The number of minutes to add to UTC time to
+               identify the time zone for this system.  For example,
+               'UTC - 8:00 hours' would be represented as '-480'.
+               Note that automatic daylight saving time adjustment
+               is not provided if this object is used.";
+          }
+        }
+      }
+    }
+
+    container ntp {
+      if-feature ntp;
+      presence
+        "Enables the NTP client unless the 'enabled' leaf
+         (which defaults to 'true') is set to 'false'";
+      description
+        "Configuration of the NTP client.";
+
+      leaf enabled {
+        type boolean;
+        default true;
+        description
+          "Indicates that the system should attempt to
+           synchronize the system clock with an NTP server
+           from the 'ntp/server' list.";
+      }
+      list server {
+        key name;
+        description
+          "List of NTP servers to use for system clock
+           synchronization.  If '/system/ntp/enabled'
+           is 'true', then the system will attempt to
+           contact and utilize the specified NTP servers.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the NTP server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp {
+            container udp {
+              description
+                "Contains UDP-specific configuration parameters
+                 for NTP.";
+              leaf address {
+                type inet:host;
+                mandatory true;
+                description
+                  "The address of the NTP server.";
+              }
+              leaf port {
+                if-feature ntp-udp-port;
+                type inet:port-number;
+                default 123;
+                description
+                  "The port number of the NTP server.";
+              }
+            }
+          }
+        }
+        leaf association-type {
+          type enumeration {
+            enum server {
+              description
+                "Use client association mode.  This device
+                 will not provide synchronization to the
+                 configured NTP server.";
+            }
+            enum peer {
+              description
+                "Use symmetric active association mode.
+                 This device may provide synchronization
+                 to the configured NTP server.";
+            }
+            enum pool {
+              description
+                "Use client association mode with one or
+                 more of the NTP servers found by DNS
+                 resolution of the domain name given by
+                 the 'address' leaf.  This device will not
+                 provide synchronization to the servers.";
+            }
+          }
+          default server;
+          description
+            "The desired association type for this NTP server.";
+        }
+        leaf iburst {
+          type boolean;
+          default false;
+          description
+            "Indicates whether this server should enable burst
+             synchronization or not.";
+        }
+        leaf prefer {
+          type boolean;
+          default false;
+          description
+            "Indicates whether this server should be preferred
+             or not.";
+        }
+      }
+    }
+
+    container dns-resolver {
+      description
+        "Configuration of the DNS resolver.";
+
+      leaf-list search {
+        type inet:domain-name;
+        ordered-by user;
+        description
+          "An ordered list of domains to search when resolving
+           a host name.";
+      }
+      list server {
+        key name;
+        ordered-by user;
+        description
+          "List of the DNS servers that the resolver should query.
+
+           When the resolver is invoked by a calling application, it
+           sends the query to the first name server in this list.  If
+           no response has been received within 'timeout' seconds,
+           the resolver continues with the next server in the list.
+           If no response is received from any server, the resolver
+           continues with the first server again.  When the resolver
+           has traversed the list 'attempts' times without receiving
+           any response, it gives up and returns an error to the
+           calling application.
+
+           Implementations MAY limit the number of entries in this
+           list.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the DNS server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp-and-tcp {
+            container udp-and-tcp {
+              description
+                "Contains UDP- and TCP-specific configuration
+                 parameters for DNS.";
+              reference
+                "RFC 1035: Domain Names - Implementation and
+                           Specification
+                 RFC 5966: DNS Transport over TCP - Implementation
+                           Requirements";
+
+              leaf address {
+                type inet:ip-address;
+                mandatory true;
+                description
+                  "The address of the DNS server.";
+              }
+              leaf port {
+                if-feature dns-udp-tcp-port;
+                type inet:port-number;
+                default 53;
+                description
+                  "The UDP and TCP port number of the DNS server.";
+              }
+            }
+          }
+        }
+      }
+      container options {
+        description
+          "Resolver options.  The set of available options has been
+           limited to those that are generally available across
+           different resolver implementations and generally useful.";
+        leaf timeout {
+          type uint8 {
+            range "1..max";
+          }
+          units "seconds";
+          default "5";
+          description
+            "The amount of time the resolver will wait for a
+             response from each remote name server before
+             retrying the query via a different name server.";
+        }
+        leaf attempts {
+          type uint8 {
+            range "1..max";
+          }
+          default "2";
+          description
+            "The number of times the resolver will send a query to
+             all of its name servers before giving up and returning
+             an error to the calling application.";
+        }
+      }
+    }
+
+    container radius {
+      if-feature radius;
+
+      description
+        "Configuration of the RADIUS client.";
+
+      list server {
+        key name;
+        ordered-by user;
+        description
+          "List of RADIUS servers used by the device.
+
+           When the RADIUS client is invoked by a calling
+           application, it sends the query to the first server in
+           this list.  If no response has been received within
+           'timeout' seconds, the client continues with the next
+           server in the list.  If no response is received from any
+           server, the client continues with the first server again.
+           When the client has traversed the list 'attempts' times
+           without receiving any response, it gives up and returns an
+           error to the calling application.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the RADIUS server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp {
+            container udp {
+              description
+                "Contains UDP-specific configuration parameters
+                 for RADIUS.";
+              leaf address {
+                type inet:host;
+                mandatory true;
+                description
+                  "The address of the RADIUS server.";
+              }
+
+              leaf authentication-port {
+                type inet:port-number;
+                default "1812";
+                description
+                  "The port number of the RADIUS server.";
+              }
+              leaf shared-secret {
+                type string;
+                mandatory true;
+                nacm:default-deny-all;
+                description
+                  "The shared secret, which is known to both the
+                   RADIUS client and server.";
+                reference
+                  "RFC 2865: Remote Authentication Dial In User
+                             Service (RADIUS)";
+              }
+            }
+          }
+        }
+        leaf authentication-type {
+          type identityref {
+            base radius-authentication-type;
+          }
+          default radius-pap;
+          description
+            "The authentication type requested from the RADIUS
+             server.";
+        }
+      }
+      container options {
+        description
+          "RADIUS client options.";
+
+        leaf timeout {
+          type uint8 {
+            range "1..max";
+          }
+          units "seconds";
+          default "5";
+          description
+            "The number of seconds the device will wait for a
+             response from each RADIUS server before trying with a
+             different server.";
+        }
+
+        leaf attempts {
+          type uint8 {
+            range "1..max";
+          }
+          default "2";
+          description
+            "The number of times the device will send a query to
+             all of its RADIUS servers before giving up.";
+        }
+      }
+    }
+
+    container authentication {
+      nacm:default-deny-write;
+      if-feature authentication;
+
+       description
+         "The authentication configuration subtree.";
+
+       leaf-list user-authentication-order {
+         type identityref {
+           base authentication-method;
+         }
+         must '(. != "sys:radius" or ../../radius/server)' {
+           error-message
+             "When 'radius' is used, a RADIUS server"
+           + " must be configured.";
+           description
+             "When 'radius' is used as an authentication method,
+              a RADIUS server must be configured.";
+         }
+         ordered-by user;
+
+         description
+           "When the device authenticates a user with a password,
+            it tries the authentication methods in this leaf-list in
+            order.  If authentication with one method fails, the next
+            method is used.  If no method succeeds, the user is
+            denied access.
+
+            An empty user-authentication-order leaf-list still allows
+            authentication of users using mechanisms that do not
+            involve a password.
+
+            If the 'radius-authentication' feature is advertised by
+            the NETCONF server, the 'radius' identity can be added to
+            this list.
+
+            If the 'local-users' feature is advertised by the
+            NETCONF server, the 'local-users' identity can be
+            added to this list.";
+       }
+
+       list user {
+         if-feature local-users;
+         key name;
+         description
+           "The list of local users configured on this device.";
+
+         leaf name {
+           type string;
+           description
+            "The user name string identifying this entry.";
+         }
+         leaf password {
+           type ianach:crypt-hash;
+           description
+             "The password for this entry.";
+         }
+         list authorized-key {
+           key name;
+           description
+             "A list of public SSH keys for this user.  These keys
+              are allowed for SSH authentication, as described in
+              RFC 4253.";
+           reference
+             "RFC 4253: The Secure Shell (SSH) Transport Layer
+                        Protocol";
+
+           leaf name {
+             type string;
+             description
+               "An arbitrary name for the SSH key.";
+           }
+
+           leaf algorithm {
+             type string;
+             mandatory true;
+             description
+               "The public key algorithm name for this SSH key.
+
+                Valid values are the values in the IANA 'Secure Shell
+                (SSH) Protocol Parameters' registry, Public Key
+                Algorithm Names.";
+             reference
+               "IANA 'Secure Shell (SSH) Protocol Parameters'
+                registry, Public Key Algorithm Names";
+           }
+           leaf key-data {
+             type binary;
+             mandatory true;
+             description
+               "The binary public key data for this SSH key, as
+                specified by RFC 4253, Section 6.6, i.e.:
+
+                  string    certificate or public key format
+                            identifier
+                  byte[n]   key/certificate data.";
+             reference
+               "RFC 4253: The Secure Shell (SSH) Transport Layer
+                          Protocol";
+           }
+         }
+       }
+     }
+  }
+
+  /*
+   * Operational state data nodes
+   */
+
+  container system-state {
+    config false;
+    description
+      "System group operational state.";
+
+    container platform {
+      description
+        "Contains vendor-specific information for
+         identifying the system platform and operating system.";
+      reference
+        "IEEE Std 1003.1-2008 - sys/utsname.h";
+
+      leaf os-name {
+        type string;
+        description
+          "The name of the operating system in use -
+           for example, 'Linux'.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.sysname";
+      }
+      leaf os-release {
+        type string;
+        description
+          "The current release level of the operating
+           system in use.  This string MAY indicate
+           the OS source code revision.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.release";
+      }
+      leaf os-version {
+        type string;
+        description
+          "The current version level of the operating
+           system in use.  This string MAY indicate
+           the specific OS build date and target variant
+           information.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.version";
+      }
+      leaf machine {
+        type string;
+        description
+          "A vendor-specific identifier string representing
+           the hardware in use.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.machine";
+      }
+    }
+
+    container clock {
+      description
+        "Monitoring of the system date and time properties.";
+
+      leaf current-datetime {
+        type yang:date-and-time;
+        description
+          "The current system date and time.";
+      }
+
+      leaf boot-datetime {
+        type yang:date-and-time;
+        description
+          "The system date and time when the system last restarted.";
+      }
+    }
+  }
+
+  rpc set-current-datetime {
+    nacm:default-deny-all;
+    description
+      "Set the /system-state/clock/current-datetime leaf
+       to the specified value.
+
+       If the system is using NTP (i.e., /system/ntp/enabled
+       is set to 'true'), then this operation will fail with
+       error-tag 'operation-failed' and error-app-tag value of
+       'ntp-active'.";
+    input {
+      leaf current-datetime {
+        type yang:date-and-time;
+        mandatory true;
+        description
+          "The current system date and time.";
+      }
+    }
+  }
+
+  rpc system-restart {
+    nacm:default-deny-all;
+    description
+      "Request that the entire system be restarted immediately.
+       A server SHOULD send an rpc reply to the client before
+       restarting the system.";
+  }
+
+  rpc system-shutdown {
+    nacm:default-deny-all;
+    description
+      "Request that the entire system be shut down immediately.
+       A server SHOULD send an rpc reply to the client before
+       shutting down the system.";
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-template@2010-05-18.yang b/models/common/src/main/yang/ietf-template@2010-05-18.yang
new file mode 100644
index 0000000..873b995
--- /dev/null
+++ b/models/common/src/main/yang/ietf-template@2010-05-18.yang
@@ -0,0 +1,83 @@
+module ietf-template {
+
+    // replace this string with a unique namespace URN value
+    namespace
+      "urn:ietf:params:xml:ns:yang:ietf-template";
+
+    // replace this string, and try to pick a unique prefix
+    prefix "temp";
+
+    // import statements here: e.g.,
+    // import ietf-yang-types { prefix yang; }
+    // import ietf-inet-types { prefix inet; }
+
+    // identify the IETF working group if applicable
+    organization
+       "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+    // update this contact statement with your info
+    contact
+       "WG Web:   <http://tools.ietf.org/wg/your-wg-name/>
+        WG List:  <mailto:your-wg-name@ietf.org>
+
+        WG Chair: your-WG-chair
+                  <mailto:your-WG-chair@example.com>
+
+        Editor:   your-name
+                  <mailto:your-email@example.com>";
+
+    // replace the first sentence in this description statement.
+    // replace the copyright notice with the most recent
+    // version, if it has been updated since the publication
+    // of this document
+    description
+     "This module defines a template for other YANG modules.
+
+      Copyright (c) <insert year> 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 XXXX; see
+      the RFC itself for full legal notices.";
+
+    // RFC Ed.: replace XXXX with actual RFC number and remove this note
+
+    reference "RFC XXXX";
+
+    // RFC Ed.: remove this note
+    // Note: extracted from RFC 6087
+
+    // replace '2010-05-18' with the module publication date
+    // The format is (year-month-day)
+    revision "2010-05-18" {
+      description
+        "Initial version";
+    }
+
+    // extension statements
+
+    // feature statements
+
+    // identity statements
+
+    // typedef statements
+
+    // grouping statements
+
+    // data definition statements
+
+    // augment statements
+
+    // rpc statements
+
+    // notification statements
+
+    // DO NOT put deviation statements in a published module
+
+}
diff --git a/models/common/src/main/yang/ietf-x509-cert-to-name@2014-12-10.yang b/models/common/src/main/yang/ietf-x509-cert-to-name@2014-12-10.yang
new file mode 100644
index 0000000..cbc9be2
--- /dev/null
+++ b/models/common/src/main/yang/ietf-x509-cert-to-name@2014-12-10.yang
@@ -0,0 +1,303 @@
+module ietf-x509-cert-to-name {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name";
+  prefix x509c2n;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  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 module contains a collection of YANG definitions for
+     extracting a name from an X.509 certificate.
+     The algorithm used to extract a name from an X.509 certificate
+     was first defined in RFC 6353.
+
+     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 6353: Transport Layer Security (TLS) Transport Model for
+       the Simple Network Management Protocol (SNMP)";
+
+  revision 2014-12-10 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+
+  }
+
+  typedef tls-fingerprint {
+    type yang:hex-string {
+      pattern '([0-9a-fA-F]){2}(:([0-9a-fA-F]){2}){0,254}';
+    }
+    description
+     "A fingerprint value that can be used to uniquely reference
+      other data of potentially arbitrary length.
+
+      A tls-fingerprint value is composed of a 1-octet hashing
+      algorithm identifier followed by the fingerprint value.  The
+      first octet value identifying the hashing algorithm is taken
+      from the IANA 'TLS HashAlgorithm Registry' (RFC 5246).  The
+      remaining octets are filled using the results of the hashing
+      algorithm.";
+    reference
+     "RFC 6353: Transport Layer Security (TLS) Transport Model
+        for the Simple Network Management Protocol (SNMP).
+        SNMP-TLS-TM-MIB.SnmpTLSFingerprint";
+  }
+
+  /* Identities */
+
+  identity cert-to-name {
+    description
+      "Base identity for algorithms to derive a name from a
+       certificate.";
+  }
+
+  identity specified {
+    base cert-to-name;
+    description
+      "Directly specifies the name to be used for the certificate.
+       The value of the leaf 'name' in the cert-to-name list is
+       used.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSpecified";
+  }
+
+  identity san-rfc822-name {
+    base cert-to-name;
+    description
+      "Maps a subjectAltName's rfc822Name to a name.  The local part
+       of the rfc822Name is passed unaltered, but the host-part of
+       the name must be passed in lowercase.  For example, the
+       rfc822Name field FooBar@Example.COM is mapped to name
+       FooBar@example.com.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSANRFC822Name";
+  }
+
+  identity san-dns-name {
+    base cert-to-name;
+    description
+      "Maps a subjectAltName's dNSName to a name after first
+       converting it to all lowercase (RFC 5280 does not specify
+       converting to lowercase, so this involves an extra step).
+       This mapping results in a 1:1 correspondence between
+       subjectAltName dNSName values and the name values.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSANDNSName";
+  }
+
+  identity san-ip-address {
+    base cert-to-name;
+    description
+      "Maps a subjectAltName's iPAddress to a name by
+       transforming the binary-encoded address as follows:
+
+         1) for IPv4, the value is converted into a
+            decimal-dotted quad address (e.g., '192.0.2.1').
+
+         2) for IPv6 addresses, the value is converted into a
+            32-character, all-lowercase hexadecimal string
+            without any colon separators.
+
+       This mapping results in a 1:1 correspondence between
+       subjectAltName iPAddress values and the name values.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSANIpAddress";
+  }
+
+  identity san-any {
+    base cert-to-name;
+    description
+      "Maps any of the following fields using the corresponding
+       mapping algorithms:
+
+         +------------+-----------------+
+         | Type       | Algorithm       |
+         |------------+-----------------|
+         | rfc822Name | san-rfc822-name |
+         | dNSName    | san-dns-name    |
+         | iPAddress  | san-ip-address  |
+         +------------+-----------------+
+
+       The first matching subjectAltName value found in the
+       certificate of the above types MUST be used when deriving
+       the name.  The mapping algorithm specified in the
+       'Algorithm' column MUST be used to derive the name.
+
+       This mapping results in a 1:1 correspondence between
+       subjectAltName values and name values.  The three sub-mapping
+       algorithms produced by this combined algorithm cannot produce
+       conflicting results between themselves.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSANAny";
+  }
+
+  identity common-name {
+    base cert-to-name;
+    description
+      "Maps a certificate's CommonName to a name after converting
+       it to a UTF-8 encoding.  The usage of CommonNames is
+       deprecated, and users are encouraged to use subjectAltName
+       mapping methods instead.  This mapping results in a 1:1
+       correspondence between certificate CommonName values and name
+       values.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertCommonName";
+  }
+
+  /*
+   * Groupings
+   */
+
+  grouping cert-to-name {
+    description
+      "Defines nodes for mapping certificates to names.  Modules
+       that use this grouping should describe how the resulting
+       name is used.";
+
+    list cert-to-name {
+      key id;
+      description
+        "This list defines how certificates are mapped to names.
+         The name is derived by considering each cert-to-name
+         list entry in order.  The cert-to-name entry's fingerprint
+         determines whether the list entry is a match:
+
+         1) If the cert-to-name list entry's fingerprint value
+            matches that of the presented certificate, then consider
+            the list entry a successful match.
+
+         2) If the cert-to-name list entry's fingerprint value
+            matches that of a locally held copy of a trusted CA
+            certificate, and that CA certificate was part of the CA
+            certificate chain to the presented certificate, then
+            consider the list entry a successful match.
+
+        Once a matching cert-to-name list entry has been found, the
+        map-type is used to determine how the name associated with
+        the certificate should be determined.  See the map-type
+        leaf's description for details on determining the name value.
+        If it is impossible to determine a name from the cert-to-name
+        list entry's data combined with the data presented in the
+        certificate, then additional cert-to-name list entries MUST
+        be searched to look for another potential match.
+
+        Security administrators are encouraged to make use of
+        certificates with subjectAltName fields that can be mapped to
+        names so that a single root CA certificate can allow all
+        child certificates' subjectAltName fields to map directly to
+        a name via a 1:1 transformation.";
+      reference
+       "RFC 6353: Transport Layer Security (TLS) Transport Model
+          for the Simple Network Management Protocol (SNMP).
+          SNMP-TLS-TM-MIB.snmpTlstmCertToTSNEntry";
+
+      leaf id {
+        type uint32;
+        description
+          "The id specifies the order in which the entries in the
+           cert-to-name list are searched.  Entries with lower
+           numbers are searched first.";
+        reference
+          "RFC 6353: Transport Layer Security (TLS) Transport Model
+             for the Simple Network Management Protocol
+             (SNMP).
+             SNMP-TLS-TM-MIB.snmpTlstmCertToTSNID";
+      }
+
+      leaf fingerprint {
+        type x509c2n:tls-fingerprint;
+        mandatory true;
+        description
+          "Specifies a value with which the fingerprint of the
+           full certificate presented by the peer is compared.  If
+           the fingerprint of the full certificate presented by the
+           peer does not match the fingerprint configured, then the
+           entry is skipped, and the search for a match continues.";
+        reference
+          "RFC 6353: Transport Layer Security (TLS) Transport Model
+             for the Simple Network Management Protocol
+             (SNMP).
+             SNMP-TLS-TM-MIB.snmpTlstmCertToTSNFingerprint";
+      }
+
+      leaf map-type {
+        type identityref {
+          base cert-to-name;
+        }
+        mandatory true;
+        description
+          "Specifies the algorithm used to map the certificate
+           presented by the peer to a name.
+
+           Mappings that need additional configuration objects should
+           use the 'when' statement to make them conditional based on
+           the map-type.";
+        reference
+          "RFC 6353: Transport Layer Security (TLS) Transport Model
+             for the Simple Network Management Protocol
+             (SNMP).
+             SNMP-TLS-TM-MIB.snmpTlstmCertToTSNMapType";
+      }
+
+      leaf name {
+        when "../map-type = 'x509c2n:specified'";
+        type string;
+        mandatory true;
+        description
+          "Directly specifies the NETCONF username when the
+           map-type is 'specified'.";
+        reference
+          "RFC 6353: Transport Layer Security (TLS) Transport Model
+             for the Simple Network Management Protocol
+             (SNMP).
+             SNMP-TLS-TM-MIB.snmpTlstmCertToTSNData";
+      }
+    }
+  }
+}
diff --git a/models/common/src/main/yang/ietf-yang-library@2016-06-21.yang b/models/common/src/main/yang/ietf-yang-library@2016-06-21.yang
new file mode 100644
index 0000000..e6221a6
--- /dev/null
+++ b/models/common/src/main/yang/ietf-yang-library@2016-06-21.yang
@@ -0,0 +1,244 @@
+module ietf-yang-library {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
+  prefix "yanglib";
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/netconf/>
+     WG List:  <mailto:netconf@ietf.org>
+
+     WG Chair: Mehmet Ersue
+               <mailto:mehmet.ersue@nsn.com>
+
+     WG Chair: Mahesh Jethanandani
+               <mailto:mjethanandani@gmail.com>
+
+     Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>
+
+     Editor:   Kent Watsen
+               <mailto:kwatsen@juniper.net>";
+
+  description
+    "This module contains monitoring information about the YANG
+     modules and submodules that are used within a YANG-based
+     server.
+
+     Copyright (c) 2016 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 7895; see
+     the RFC itself for full legal notices.";
+
+  revision 2016-06-21 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7895: YANG Module Library.";
+  }
+
+  /*
+   * Typedefs
+   */
+
+  typedef revision-identifier {
+    type string {
+      pattern '\d{4}-\d{2}-\d{2}';
+    }
+    description
+      "Represents a specific date in YYYY-MM-DD format.";
+  }
+
+  /*
+   * Groupings
+   */
+
+  grouping module-list {
+    description
+      "The module data structure is represented as a grouping
+       so it can be reused in configuration or another monitoring
+       data structure.";
+
+    grouping common-leafs {
+      description
+        "Common parameters for YANG modules and submodules.";
+
+      leaf name {
+        type yang:yang-identifier;
+        description
+          "The YANG module or submodule name.";
+      }
+      leaf revision {
+        type union {
+          type revision-identifier;
+          type string { length 0; }
+        }
+        description
+          "The YANG module or submodule revision date.
+           A zero-length string is used if no revision statement
+           is present in the YANG module or submodule.";
+      }
+    }
+
+    grouping schema-leaf {
+      description
+        "Common schema leaf parameter for modules and submodules.";
+
+      leaf schema {
+        type inet:uri;
+        description
+          "Contains a URL that represents the YANG schema
+           resource for this module or submodule.
+
+           This leaf will only be present if there is a URL
+           available for retrieval of the schema for this entry.";
+      }
+    }
+
+    list module {
+      key "name revision";
+      description
+        "Each entry represents one revision of one module
+         currently supported by the server.";
+
+      uses common-leafs;
+      uses schema-leaf;
+
+      leaf namespace {
+        type inet:uri;
+        mandatory true;
+        description
+          "The XML namespace identifier for this module.";
+      }
+      leaf-list feature {
+        type yang:yang-identifier;
+        description
+          "List of YANG feature names from this module that are
+           supported by the server, regardless of whether they are
+           defined in the module or any included submodule.";
+      }
+      list deviation {
+        key "name revision";
+        description
+          "List of YANG deviation module names and revisions
+           used by this server to modify the conformance of
+           the module associated with this entry.  Note that
+           the same module can be used for deviations for
+           multiple modules, so the same entry MAY appear
+           within multiple 'module' entries.
+
+           The deviation module MUST be present in the 'module'
+           list, with the same name and revision values.
+           The 'conformance-type' value will be 'implement' for
+           the deviation module.";
+        uses common-leafs;
+      }
+      leaf conformance-type {
+        type enumeration {
+          enum implement {
+            description
+              "Indicates that the server implements one or more
+               protocol-accessible objects defined in the YANG module
+               identified in this entry.  This includes deviation
+               statements defined in the module.
+
+               For YANG version 1.1 modules, there is at most one
+               module entry with conformance type 'implement' for a
+               particular module name, since YANG 1.1 requires that,
+               at most, one revision of a module is implemented.
+
+               For YANG version 1 modules, there SHOULD NOT be more
+               than one module entry for a particular module name.";
+          }
+          enum import {
+            description
+              "Indicates that the server imports reusable definitions
+               from the specified revision of the module but does
+               not implement any protocol-accessible objects from
+               this revision.
+
+               Multiple module entries for the same module name MAY
+               exist.  This can occur if multiple modules import the
+               same module but specify different revision dates in
+               the import statements.";
+          }
+        }
+        mandatory true;
+        description
+          "Indicates the type of conformance the server is claiming
+           for the YANG module identified by this entry.";
+      }
+      list submodule {
+        key "name revision";
+        description
+          "Each entry represents one submodule within the
+           parent module.";
+        uses common-leafs;
+        uses schema-leaf;
+      }
+    }
+  }
+
+  /*
+   * Operational state data nodes
+   */
+
+  container modules-state {
+    config false;
+    description
+      "Contains YANG module monitoring information.";
+
+    leaf module-set-id {
+      type string;
+      mandatory true;
+      description
+        "Contains a server-specific identifier representing
+         the current set of modules and submodules.  The
+         server MUST change the value of this leaf if the
+         information represented by the 'module' list instances
+         has changed.";
+    }
+
+    uses module-list;
+  }
+
+  /*
+   * Notifications
+   */
+
+  notification yang-library-change {
+    description
+      "Generated when the set of modules and submodules supported
+       by the server has changed.";
+    leaf module-set-id {
+      type leafref {
+        path "/yanglib:modules-state/yanglib:module-set-id";
+      }
+      mandatory true;
+      description
+        "Contains the module-set-id value representing the
+         set of modules and submodules supported at the server at
+         the time the notification is generated.";
+    }
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-yang-smiv2@2012-06-22.yang b/models/common/src/main/yang/ietf-yang-smiv2@2012-06-22.yang
new file mode 100644
index 0000000..5127e22
--- /dev/null
+++ b/models/common/src/main/yang/ietf-yang-smiv2@2012-06-22.yang
@@ -0,0 +1,146 @@
+module ietf-yang-smiv2 {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-smiv2";
+  prefix "smiv2";
+
+  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: David Kessens
+              <mailto:david.kessens@nsn.com>
+
+    WG Chair: Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>
+
+    Editor:   Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>";
+
+  description
+   "This module defines YANG extensions that are used to translate
+    SMIv2 concepts into YANG.
+
+    Copyright (c) 2012 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 6643; see
+    the RFC itself for full legal notices.";
+
+  revision 2012-06-22 {
+    description
+     "Initial revision.";
+    reference
+     "RFC 6643: Translation of Structure of Management Information
+      Version 2 (SMIv2) MIB Modules to YANG Modules";
+  }
+
+  identity object-identity {
+    description
+     "Base identity for all SMIv2 OBJECT-IDENTITYs.";
+  }
+
+  typedef opaque {
+    type binary;
+    description
+     "The Opaque type supports the capability to pass arbitrary ASN.1
+      syntax.  A value is encoded using the ASN.1 Basic Encoding Rules
+      into a string of octets.  This, in turn, is encoded as an OCTET
+      STRING, in effect 'double-wrapping' the original ASN.1 value.
+
+      In the value set and its semantics, this type is equivalent to
+      the Opaque type of the SMIv2.  This type exists in the SMIv2
+      solely for backward-compatibility reasons and this is also
+      true for this YANG data type.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension display-hint {
+    argument "format";
+    description
+     "The display-hint statement takes as an argument the DISPLAY-HINT
+      assigned to an SMIv2 textual convention.";
+    reference
+     "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  extension max-access {
+    argument "access";
+    description
+     "The max-access statement takes as an argument the MAX-ACCESS
+      assigned to an SMIv2 object definition.
+
+      The MAX-ACCESS value is SMIv2 specific and has no impact on
+      the access provided to YANG objects through protocols such
+      as NETCONF.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension defval {
+    argument "value";
+    description
+     "The defval statement takes as an argument a default value
+      defined by an SMIv2 DEFVAL clause.  Note that the value is in
+      the SMIv2 value space defined by the SMIv2 syntax of the
+      corresponding object and not in the YANG value space
+      defined by the corresponding YANG data type.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension implied {
+    argument "index";
+    description
+     "If an SMIv2 INDEX object is preceded by the IMPLIED keyword, then
+      the implied statement is present in the YANG module and takes as
+      an argument the name of the IMPLIED index object.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+   }
+
+  extension alias {
+    argument "descriptor";
+    description
+     "The alias statement introduces an SMIv2 descriptor.  The body of
+      the alias statement is expected to contain an oid statement that
+      provides the numeric OID associated with the descriptor.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension oid {
+    argument "value";
+    description
+     "The oid statement takes as an argument the object identifier
+      assigned to an SMIv2 definition.  The object identifier value
+      is written in decimal dotted notation.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension subid {
+    argument "value";
+    description
+     "The subid statement takes as an argument the last sub-identifier
+      of the object identifier assigned to an SMIv2 definition.  The
+      sub-identifier value is a single positive decimal natural number.
+      The subid statement may not be used as a substatement to any
+      top-level node in a YANG document.  The subid substatement may
+      be used only as a substatement to a node having a parent node
+      defined with either an smiv2:oid or smiv2:subid substatement.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+}
diff --git a/models/common/src/main/yang/ietf-yang-types@2013-07-15.yang b/models/common/src/main/yang/ietf-yang-types@2013-07-15.yang
new file mode 100644
index 0000000..ee58fa3
--- /dev/null
+++ b/models/common/src/main/yang/ietf-yang-types@2013-07-15.yang
@@ -0,0 +1,474 @@
+module ietf-yang-types {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+  prefix "yang";
+
+  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: David Kessens
+              <mailto:david.kessens@nsn.com>
+
+    WG Chair: Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>
+
+    Editor:   Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>";
+
+  description
+   "This module contains a collection of generally useful derived
+    YANG data types.
+
+    Copyright (c) 2013 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 6991; see
+    the RFC itself for full legal notices.";
+
+  revision 2013-07-15 {
+    description
+     "This revision adds the following new data types:
+      - yang-identifier
+      - hex-string
+      - uuid
+      - dotted-quad";
+    reference
+     "RFC 6991: Common YANG Data Types";
+  }
+
+  revision 2010-09-24 {
+    description
+     "Initial revision.";
+    reference
+     "RFC 6021: Common YANG Data Types";
+  }
+
+  /*** collection of counter and gauge types ***/
+
+  typedef counter32 {
+    type uint32;
+    description
+     "The counter32 type represents a non-negative integer
+      that monotonically increases until it reaches a
+      maximum value of 2^32-1 (4294967295 decimal), when it
+      wraps around and starts increasing again from zero.
+
+      Counters have no defined 'initial' value, and thus, a
+      single value of a counter has (in general) no information
+      content.  Discontinuities in the monotonically increasing
+      value normally occur at re-initialization of the
+      management system, and at other times as specified in the
+      description of a schema node using this type.  If such
+      other times can occur, for example, the creation of
+      a schema node of type counter32 at times other than
+      re-initialization, then a corresponding schema node
+      should be defined, with an appropriate type, to indicate
+      the last discontinuity.
+
+      The counter32 type should not be used for configuration
+      schema nodes.  A default statement SHOULD NOT be used in
+      combination with the type counter32.
+
+      In the value set and its semantics, this type is equivalent
+      to the Counter32 type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef zero-based-counter32 {
+    type yang:counter32;
+    default "0";
+    description
+     "The zero-based-counter32 type represents a counter32
+      that has the defined 'initial' value zero.
+
+      A schema node of this type will be set to zero (0) on creation
+      and will thereafter increase monotonically until it reaches
+      a maximum value of 2^32-1 (4294967295 decimal), when it
+      wraps around and starts increasing again from zero.
+
+      Provided that an application discovers a new schema node
+      of this type within the minimum time to wrap, it can use the
+      'initial' value as a delta.  It is important for a management
+      station to be aware of this minimum time and the actual time
+      between polls, and to discard data if the actual time is too
+      long or there is no defined minimum time.
+
+      In the value set and its semantics, this type is equivalent
+      to the ZeroBasedCounter32 textual convention of the SMIv2.";
+    reference
+      "RFC 4502: Remote Network Monitoring Management Information
+                 Base Version 2";
+  }
+
+  typedef counter64 {
+    type uint64;
+    description
+     "The counter64 type represents a non-negative integer
+      that monotonically increases until it reaches a
+      maximum value of 2^64-1 (18446744073709551615 decimal),
+      when it wraps around and starts increasing again from zero.
+
+      Counters have no defined 'initial' value, and thus, a
+      single value of a counter has (in general) no information
+      content.  Discontinuities in the monotonically increasing
+      value normally occur at re-initialization of the
+      management system, and at other times as specified in the
+      description of a schema node using this type.  If such
+      other times can occur, for example, the creation of
+      a schema node of type counter64 at times other than
+      re-initialization, then a corresponding schema node
+      should be defined, with an appropriate type, to indicate
+      the last discontinuity.
+
+      The counter64 type should not be used for configuration
+      schema nodes.  A default statement SHOULD NOT be used in
+      combination with the type counter64.
+
+      In the value set and its semantics, this type is equivalent
+      to the Counter64 type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef zero-based-counter64 {
+    type yang:counter64;
+    default "0";
+    description
+     "The zero-based-counter64 type represents a counter64 that
+      has the defined 'initial' value zero.
+
+      A schema node of this type will be set to zero (0) on creation
+      and will thereafter increase monotonically until it reaches
+      a maximum value of 2^64-1 (18446744073709551615 decimal),
+      when it wraps around and starts increasing again from zero.
+
+      Provided that an application discovers a new schema node
+      of this type within the minimum time to wrap, it can use the
+      'initial' value as a delta.  It is important for a management
+      station to be aware of this minimum time and the actual time
+      between polls, and to discard data if the actual time is too
+      long or there is no defined minimum time.
+
+      In the value set and its semantics, this type is equivalent
+      to the ZeroBasedCounter64 textual convention of the SMIv2.";
+    reference
+     "RFC 2856: Textual Conventions for Additional High Capacity
+                Data Types";
+  }
+
+  typedef gauge32 {
+    type uint32;
+    description
+     "The gauge32 type represents a non-negative integer, which
+      may increase or decrease, but shall never exceed a maximum
+      value, nor fall below a minimum value.  The maximum value
+      cannot be greater than 2^32-1 (4294967295 decimal), and
+      the minimum value cannot be smaller than 0.  The value of
+      a gauge32 has its maximum value whenever the information
+      being modeled is greater than or equal to its maximum
+      value, and has its minimum value whenever the information
+      being modeled is smaller than or equal to its minimum value.
+      If the information being modeled subsequently decreases
+      below (increases above) the maximum (minimum) value, the
+      gauge32 also decreases (increases).
+
+      In the value set and its semantics, this type is equivalent
+      to the Gauge32 type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef gauge64 {
+    type uint64;
+    description
+     "The gauge64 type represents a non-negative integer, which
+      may increase or decrease, but shall never exceed a maximum
+      value, nor fall below a minimum value.  The maximum value
+      cannot be greater than 2^64-1 (18446744073709551615), and
+      the minimum value cannot be smaller than 0.  The value of
+      a gauge64 has its maximum value whenever the information
+      being modeled is greater than or equal to its maximum
+      value, and has its minimum value whenever the information
+      being modeled is smaller than or equal to its minimum value.
+      If the information being modeled subsequently decreases
+      below (increases above) the maximum (minimum) value, the
+      gauge64 also decreases (increases).
+
+      In the value set and its semantics, this type is equivalent
+      to the CounterBasedGauge64 SMIv2 textual convention defined
+      in RFC 2856";
+    reference
+     "RFC 2856: Textual Conventions for Additional High Capacity
+                Data Types";
+  }
+
+  /*** collection of identifier-related types ***/
+
+  typedef object-identifier {
+    type string {
+      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+            + '(\.(0|([1-9]\d*)))*';
+    }
+    description
+     "The object-identifier type represents administratively
+      assigned names in a registration-hierarchical-name tree.
+
+      Values of this type are denoted as a sequence of numerical
+      non-negative sub-identifier values.  Each sub-identifier
+      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
+      are separated by single dots and without any intermediate
+      whitespace.
+
+      The ASN.1 standard restricts the value space of the first
+      sub-identifier to 0, 1, or 2.  Furthermore, the value space
+      of the second sub-identifier is restricted to the range
+      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
+      the ASN.1 standard requires that an object identifier
+      has always at least two sub-identifiers.  The pattern
+      captures these restrictions.
+
+      Although the number of sub-identifiers is not limited,
+      module designers should realize that there may be
+      implementations that stick with the SMIv2 limit of 128
+      sub-identifiers.
+
+      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+      since it is not restricted to 128 sub-identifiers.  Hence,
+      this type SHOULD NOT be used to represent the SMIv2 OBJECT
+      IDENTIFIER type; the object-identifier-128 type SHOULD be
+      used instead.";
+    reference
+     "ISO9834-1: Information technology -- Open Systems
+      Interconnection -- Procedures for the operation of OSI
+      Registration Authorities: General procedures and top
+      arcs of the ASN.1 Object Identifier tree";
+  }
+
+  typedef object-identifier-128 {
+    type object-identifier {
+      pattern '\d*(\.\d*){1,127}';
+    }
+    description
+     "This type represents object-identifiers restricted to 128
+      sub-identifiers.
+
+      In the value set and its semantics, this type is equivalent
+      to the OBJECT IDENTIFIER type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef yang-identifier {
+    type string {
+      length "1..max";
+      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+    }
+    description
+      "A YANG identifier string as defined by the 'identifier'
+       rule in Section 12 of RFC 6020.  An identifier must
+       start with an alphabetic character or an underscore
+       followed by an arbitrary sequence of alphabetic or
+       numeric characters, underscores, hyphens, or dots.
+
+       A YANG identifier MUST NOT start with any possible
+       combination of the lowercase or uppercase character
+       sequence 'xml'.";
+    reference
+      "RFC 6020: YANG - A Data Modeling Language for the Network
+                 Configuration Protocol (NETCONF)";
+  }
+
+  /*** collection of types related to date and time***/
+
+  typedef date-and-time {
+    type string {
+      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+            + '(Z|[\+\-]\d{2}:\d{2})';
+    }
+    description
+     "The date-and-time type is a profile of the ISO 8601
+      standard for representation of dates and times using the
+      Gregorian calendar.  The profile is defined by the
+      date-time production in Section 5.6 of RFC 3339.
+
+      The date-and-time type is compatible with the dateTime XML
+      schema type with the following notable exceptions:
+
+      (a) The date-and-time type does not allow negative years.
+
+      (b) The date-and-time time-offset -00:00 indicates an unknown
+          time zone (see RFC 3339) while -00:00 and +00:00 and Z
+          all represent the same time zone in dateTime.
+
+      (c) The canonical format (see below) of data-and-time values
+          differs from the canonical format used by the dateTime XML
+          schema type, which requires all times to be in UTC using
+          the time-offset 'Z'.
+
+      This type is not equivalent to the DateAndTime textual
+      convention of the SMIv2 since RFC 3339 uses a different
+      separator between full-date and full-time and provides
+      higher resolution of time-secfrac.
+
+      The canonical format for date-and-time values with a known time
+      zone uses a numeric time zone offset that is calculated using
+      the device's configured known offset to UTC time.  A change of
+      the device's offset to UTC time will cause date-and-time values
+      to change accordingly.  Such changes might happen periodically
+      in case a server follows automatically daylight saving time
+      (DST) time zone offset changes.  The canonical format for
+      date-and-time values with an unknown time zone (usually
+      referring to the notion of local time) uses the time-offset
+      -00:00.";
+    reference
+     "RFC 3339: Date and Time on the Internet: Timestamps
+      RFC 2579: Textual Conventions for SMIv2
+      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+  }
+
+  typedef timeticks {
+    type uint32;
+    description
+     "The timeticks type represents a non-negative integer that
+      represents the time, modulo 2^32 (4294967296 decimal), in
+      hundredths of a second between two epochs.  When a schema
+      node is defined that uses this type, the description of
+      the schema node identifies both of the reference epochs.
+
+      In the value set and its semantics, this type is equivalent
+      to the TimeTicks type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef timestamp {
+    type yang:timeticks;
+    description
+     "The timestamp type represents the value of an associated
+      timeticks schema node at which a specific occurrence
+      happened.  The specific occurrence must be defined in the
+      description of any schema node defined using this type.  When
+      the specific occurrence occurred prior to the last time the
+      associated timeticks attribute was zero, then the timestamp
+      value is zero.  Note that this requires all timestamp values
+      to be reset to zero when the value of the associated timeticks
+      attribute reaches 497+ days and wraps around to zero.
+
+      The associated timeticks schema node must be specified
+      in the description of any schema node using this type.
+
+      In the value set and its semantics, this type is equivalent
+      to the TimeStamp textual convention of the SMIv2.";
+    reference
+     "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  /*** collection of generic address types ***/
+
+  typedef phys-address {
+    type string {
+      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+    }
+
+    description
+     "Represents media- or physical-level addresses represented
+      as a sequence octets, each octet represented by two hexadecimal
+      numbers.  Octets are separated by colons.  The canonical
+      representation uses lowercase characters.
+
+      In the value set and its semantics, this type is equivalent
+      to the PhysAddress textual convention of the SMIv2.";
+    reference
+     "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  typedef mac-address {
+    type string {
+      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+    }
+    description
+     "The mac-address type represents an IEEE 802 MAC address.
+      The canonical representation uses lowercase characters.
+
+      In the value set and its semantics, this type is equivalent
+      to the MacAddress textual convention of the SMIv2.";
+    reference
+     "IEEE 802: IEEE Standard for Local and Metropolitan Area
+                Networks: Overview and Architecture
+      RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  /*** collection of XML-specific types ***/
+
+  typedef xpath1.0 {
+    type string;
+    description
+     "This type represents an XPATH 1.0 expression.
+
+      When a schema node is defined that uses this type, the
+      description of the schema node MUST specify the XPath
+      context in which the XPath expression is evaluated.";
+    reference
+     "XPATH: XML Path Language (XPath) Version 1.0";
+  }
+
+  /*** collection of string types ***/
+
+  typedef hex-string {
+    type string {
+      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+    }
+    description
+     "A hexadecimal string with octets represented as hex digits
+      separated by colons.  The canonical representation uses
+      lowercase characters.";
+  }
+
+  typedef uuid {
+    type string {
+      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+    }
+    description
+     "A Universally Unique IDentifier in the string representation
+      defined in RFC 4122.  The canonical representation uses
+      lowercase characters.
+
+      The following is an example of a UUID in string representation:
+      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+      ";
+    reference
+     "RFC 4122: A Universally Unique IDentifier (UUID) URN
+                Namespace";
+  }
+
+  typedef dotted-quad {
+    type string {
+      pattern
+        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+    }
+    description
+      "An unsigned 32-bit number expressed in the dotted-quad
+       notation, i.e., four octets written as decimal numbers
+       and separated with the '.' (full stop) character.";
+  }
+}
