diff --git a/tools/test/configs/yang/ietf-ip@2014-06-16.yang b/tools/test/configs/yang/ietf-ip@2014-06-16.yang
new file mode 100644
index 0000000..0446258
--- /dev/null
+++ b/tools/test/configs/yang/ietf-ip@2014-06-16.yang
@@ -0,0 +1,740 @@
+module ietf-ip {
+
+    yang-version 1;
+
+    namespace
+      "urn:ietf:params:xml:ns:yang:ietf-ip";
+
+    prefix ip;
+
+    import ietf-interfaces {
+      prefix if;
+    }
+    import ietf-inet-types {
+      prefix inet;
+    }
+    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>";
+
+    description
+      "This module contains a collection of YANG definitions for
+    configuring IP implementations.
+
+    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 7277; see
+    the RFC itself for full legal notices.";
+
+    revision "2014-06-16" {
+      description "Initial revision.";
+      reference
+        "RFC 7277: A YANG Data Model for IP Management";
+
+    }
+
+    feature ipv4-non-contiguous-netmasks {
+      description
+        "Indicates support for configuring non-contiguous
+      subnet masks.";
+    }
+
+    feature ipv6-privacy-autoconf {
+      description
+        "Indicates support for Privacy Extensions for Stateless Address
+      Autoconfiguration in IPv6.";
+      reference
+        "RFC 4941: Privacy Extensions for Stateless Address
+              Autoconfiguration in IPv6";
+    }
+
+    typedef ip-address-origin {
+      type enumeration {
+        enum "other" {
+          value 0;
+          description
+            "None of the following.";
+        }
+        enum "static" {
+          value 1;
+          description
+            "Indicates that the address has been statically
+          configured - for example, using NETCONF or a Command Line
+          Interface.";
+        }
+        enum "dhcp" {
+          value 2;
+          description
+            "Indicates an address that has been assigned to this
+          system by a DHCP server.";
+        }
+        enum "link-layer" {
+          value 3;
+          description
+            "Indicates an address created by IPv6 stateless
+          autoconfiguration that embeds a link-layer address in its
+          interface identifier.";
+        }
+        enum "random" {
+          value 4;
+          description
+            "Indicates an address chosen by the system at
+
+          random, e.g., an IPv4 address within 169.254/16, an
+          RFC 4941 temporary address, or an RFC 7217 semantically
+          opaque address.";
+          reference
+            "RFC 4941: Privacy Extensions for Stateless Address
+                  Autoconfiguration in IPv6
+             RFC 7217: A Method for Generating Semantically Opaque
+                  Interface Identifiers with IPv6 Stateless
+                  Address Autoconfiguration (SLAAC)";
+        }
+      }
+      description
+        "The origin of an address.";
+    }
+
+    typedef neighbor-origin {
+      type enumeration {
+        enum "other" {
+          value 0;
+          description
+            "None of the following.";
+        }
+        enum "static" {
+          value 1;
+          description
+            "Indicates that the mapping has been statically
+          configured - for example, using NETCONF or a Command Line
+          Interface.";
+        }
+        enum "dynamic" {
+          value 2;
+          description
+            "Indicates that the mapping has been dynamically resolved
+          using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
+          protocol.";
+        }
+      }
+      description
+        "The origin of a neighbor entry.";
+    }
+
+    augment /if:devices/if:device/if:interfaces/if:interface {
+      description
+        "Parameters for configuring IP on interfaces.
+
+      If an interface is not capable of running IP, the server
+      must not allow the client to configure these parameters.";
+      container ipv4 {
+        presence
+          "Enables IPv4 unless the 'enabled' leaf
+        (which defaults to 'true') is set to 'false'";
+        description
+          "Parameters for the IPv4 address family.";
+        leaf enabled {
+          type boolean;
+          default true;
+          description
+            "Controls whether IPv4 is enabled or disabled on this
+          interface.  When IPv4 is enabled, this interface is
+          connected to an IPv4 stack, and the interface can send
+          and receive IPv4 packets.";
+        }
+
+        leaf forwarding {
+          type boolean;
+          default false;
+          description
+            "Controls IPv4 packet forwarding of datagrams received by,
+          but not addressed to, this interface.  IPv4 routers
+          forward datagrams.  IPv4 hosts do not (except those
+          source-routed via the host).";
+        }
+
+        leaf mtu {
+          type uint16 {
+            range "68..max";
+          }
+          units "octets";
+          description
+            "The size, in octets, of the largest IPv4 packet that the
+          interface will send and receive.
+
+          The server may restrict the allowed values for this leaf,
+          depending on the interface's type.
+
+          If this leaf is not configured, the operationally used MTU
+          depends on the interface's type.";
+          reference
+            "RFC 791: Internet Protocol";
+
+        }
+
+        list address {
+          key "ip";
+          description
+            "The list of configured IPv4 addresses on the interface.";
+          leaf ip {
+            type inet:ipv4-address-no-zone;
+            description
+              "The IPv4 address on the interface.";
+          }
+
+          choice subnet {
+            mandatory true;
+            description
+              "The subnet can be specified as a prefix-length, or,
+            if the server supports non-contiguous netmasks, as
+            a netmask.";
+            leaf prefix-length {
+              type uint8 {
+                range "0..32";
+              }
+              description
+                "The length of the subnet prefix.";
+            }
+            leaf netmask {
+              if-feature ipv4-non-contiguous-netmasks;
+              type yang:dotted-quad;
+              description
+                "The subnet specified as a netmask.";
+            }
+          }  // choice subnet
+        }  // list address
+
+        list neighbor {
+          key "ip";
+          description
+            "A list of mappings from IPv4 addresses to
+          link-layer addresses.
+
+          Entries in this list are used as static entries in the
+          ARP Cache.";
+          reference
+            "RFC 826: An Ethernet Address Resolution Protocol";
+
+          leaf ip {
+            type inet:ipv4-address-no-zone;
+            description
+              "The IPv4 address of the neighbor node.";
+          }
+
+          leaf link-layer-address {
+            type yang:phys-address;
+            mandatory true;
+            description
+              "The link-layer address of the neighbor node.";
+          }
+        }  // list neighbor
+      }  // container ipv4
+
+      container ipv6 {
+        presence
+          "Enables IPv6 unless the 'enabled' leaf
+        (which defaults to 'true') is set to 'false'";
+        description
+          "Parameters for the IPv6 address family.";
+        leaf enabled {
+          type boolean;
+          default true;
+          description
+            "Controls whether IPv6 is enabled or disabled on this
+          interface.  When IPv6 is enabled, this interface is
+          connected to an IPv6 stack, and the interface can send
+          and receive IPv6 packets.";
+        }
+
+        leaf forwarding {
+          type boolean;
+          default false;
+          description
+            "Controls IPv6 packet forwarding of datagrams received by,
+          but not addressed to, this interface.  IPv6 routers
+          forward datagrams.  IPv6 hosts do not (except those
+          source-routed via the host).";
+          reference
+            "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+                  Section 6.2.1, IsRouter";
+
+        }
+
+        leaf mtu {
+          type uint32 {
+            range "1280..max";
+          }
+          units "octets";
+          description
+            "The size, in octets, of the largest IPv6 packet that the
+          interface will send and receive.
+
+          The server may restrict the allowed values for this leaf,
+          depending on the interface's type.
+
+          If this leaf is not configured, the operationally used MTU
+          depends on the interface's type.";
+          reference
+            "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+                  Section 5";
+
+        }
+
+        list address {
+          key "ip";
+          description
+            "The list of configured IPv6 addresses on the interface.";
+          leaf ip {
+            type inet:ipv6-address-no-zone;
+            description
+              "The IPv6 address on the interface.";
+          }
+
+          leaf prefix-length {
+            type uint8 {
+              range "0..128";
+            }
+            mandatory true;
+            description
+              "The length of the subnet prefix.";
+          }
+        }  // list address
+
+        list neighbor {
+          key "ip";
+          description
+            "A list of mappings from IPv6 addresses to
+          link-layer addresses.
+
+          Entries in this list are used as static entries in the
+          Neighbor Cache.";
+          reference
+            "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";
+
+          leaf ip {
+            type inet:ipv6-address-no-zone;
+            description
+              "The IPv6 address of the neighbor node.";
+          }
+
+          leaf link-layer-address {
+            type yang:phys-address;
+            mandatory true;
+            description
+              "The link-layer address of the neighbor node.";
+          }
+        }  // list neighbor
+
+        leaf dup-addr-detect-transmits {
+          type uint32;
+          default 1;
+          description
+            "The number of consecutive Neighbor Solicitation messages
+          sent while performing Duplicate Address Detection on a
+          tentative address.  A value of zero indicates that
+          Duplicate Address Detection is not performed on
+          tentative addresses.  A value of one indicates a single
+          transmission with no follow-up retransmissions.";
+          reference
+            "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+
+        }
+
+        container autoconf {
+          description
+            "Parameters to control the autoconfiguration of IPv6
+          addresses, as described in RFC 4862.";
+          reference
+            "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+
+          leaf create-global-addresses {
+            type boolean;
+            default true;
+            description
+              "If enabled, the host creates global addresses as
+            described in RFC 4862.";
+            reference
+              "RFC 4862: IPv6 Stateless Address Autoconfiguration
+                  Section 5.5";
+
+          }
+
+          leaf create-temporary-addresses {
+            if-feature ipv6-privacy-autoconf;
+            type boolean;
+            default false;
+            description
+              "If enabled, the host creates temporary addresses as
+            described in RFC 4941.";
+            reference
+              "RFC 4941: Privacy Extensions for Stateless Address
+                  Autoconfiguration in IPv6";
+
+          }
+
+          leaf temporary-valid-lifetime {
+            if-feature ipv6-privacy-autoconf;
+            type uint32;
+            units "seconds";
+            default 604800;
+            description
+              "The time period during which the temporary address
+            is valid.";
+            reference
+              "RFC 4941: Privacy Extensions for Stateless Address
+                  Autoconfiguration in IPv6
+                  - TEMP_VALID_LIFETIME";
+
+          }
+
+          leaf temporary-preferred-lifetime {
+            if-feature ipv6-privacy-autoconf;
+            type uint32;
+            units "seconds";
+            default 86400;
+            description
+              "The time period during which the temporary address is
+            preferred.";
+            reference
+              "RFC 4941: Privacy Extensions for Stateless Address
+                  Autoconfiguration in IPv6
+                  - TEMP_PREFERRED_LIFETIME";
+
+          }
+        }  // container autoconf
+      }  // container ipv6
+    }
+
+    augment /if:devices/if:device/if:interfaces-state/if:interface {
+      description
+        "Data nodes for the operational state of IP on interfaces.";
+      container ipv4 {
+        presence
+          "Present if IPv4 is enabled on this interface";
+        config false;
+        description
+          "Interface-specific parameters for the IPv4 address family.";
+        leaf forwarding {
+          type boolean;
+          description
+            "Indicates whether IPv4 packet forwarding is enabled or
+          disabled on this interface.";
+        }
+
+        leaf mtu {
+          type uint16 {
+            range "68..max";
+          }
+          units "octets";
+          description
+            "The size, in octets, of the largest IPv4 packet that the
+          interface will send and receive.";
+          reference
+            "RFC 791: Internet Protocol";
+
+        }
+
+        list address {
+          key "ip";
+          description
+            "The list of IPv4 addresses on the interface.";
+          leaf ip {
+            type inet:ipv4-address-no-zone;
+            description
+              "The IPv4 address on the interface.";
+          }
+
+          choice subnet {
+            description
+              "The subnet can be specified as a prefix-length, or,
+            if the server supports non-contiguous netmasks, as
+            a netmask.";
+            leaf prefix-length {
+              type uint8 {
+                range "0..32";
+              }
+              description
+                "The length of the subnet prefix.";
+            }
+            leaf netmask {
+              if-feature ipv4-non-contiguous-netmasks;
+              type yang:dotted-quad;
+              description
+                "The subnet specified as a netmask.";
+            }
+          }  // choice subnet
+
+          leaf origin {
+            type ip-address-origin;
+            description
+              "The origin of this address.";
+          }
+        }  // list address
+
+        list neighbor {
+          key "ip";
+          description
+            "A list of mappings from IPv4 addresses to
+          link-layer addresses.
+
+          This list represents the ARP Cache.";
+          reference
+            "RFC 826: An Ethernet Address Resolution Protocol";
+
+          leaf ip {
+            type inet:ipv4-address-no-zone;
+            description
+              "The IPv4 address of the neighbor node.";
+          }
+
+          leaf link-layer-address {
+            type yang:phys-address;
+            description
+              "The link-layer address of the neighbor node.";
+          }
+
+          leaf origin {
+            type neighbor-origin;
+            description
+              "The origin of this neighbor entry.";
+          }
+        }  // list neighbor
+      }  // container ipv4
+
+      container ipv6 {
+        presence
+          "Present if IPv6 is enabled on this interface";
+        config false;
+        description
+          "Parameters for the IPv6 address family.";
+        leaf forwarding {
+          type boolean;
+          default false;
+          description
+            "Indicates whether IPv6 packet forwarding is enabled or
+          disabled on this interface.";
+          reference
+            "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+                  Section 6.2.1, IsRouter";
+
+        }
+
+        leaf mtu {
+          type uint32 {
+            range "1280..max";
+          }
+          units "octets";
+          description
+            "The size, in octets, of the largest IPv6 packet that the
+          interface will send and receive.";
+          reference
+            "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+                  Section 5";
+
+        }
+
+        list address {
+          key "ip";
+          description
+            "The list of IPv6 addresses on the interface.";
+          leaf ip {
+            type inet:ipv6-address-no-zone;
+            description
+              "The IPv6 address on the interface.";
+          }
+
+          leaf prefix-length {
+            type uint8 {
+              range "0..128";
+            }
+            mandatory true;
+            description
+              "The length of the subnet prefix.";
+          }
+
+          leaf origin {
+            type ip-address-origin;
+            description
+              "The origin of this address.";
+          }
+
+          leaf status {
+            type enumeration {
+              enum "preferred" {
+                value 0;
+                description
+                  "This is a valid address that can appear as the
+                destination or source address of a packet.";
+              }
+              enum "deprecated" {
+                value 1;
+                description
+                  "This is a valid but deprecated address that should
+                no longer be used as a source address in new
+                communications, but packets addressed to such an
+                address are processed as expected.";
+              }
+              enum "invalid" {
+                value 2;
+                description
+                  "This isn't a valid address, and it shouldn't appear
+                as the destination or source address of a packet.";
+              }
+              enum "inaccessible" {
+                value 3;
+                description
+                  "The address is not accessible because the interface
+                to which this address is assigned is not
+                operational.";
+              }
+              enum "unknown" {
+                value 4;
+                description
+                  "The status cannot be determined for some reason.";
+              }
+              enum "tentative" {
+                value 5;
+                description
+                  "The uniqueness of the address on the link is being
+                verified.  Addresses in this state should not be
+                used for general communication and should only be
+                used to determine the uniqueness of the address.";
+              }
+              enum "duplicate" {
+                value 6;
+                description
+                  "The address has been determined to be non-unique on
+                the link and so must not be used.";
+              }
+              enum "optimistic" {
+                value 7;
+                description
+                  "The address is available for use, subject to
+                restrictions, while its uniqueness on a link is
+                being verified.";
+              }
+            }
+            description
+              "The status of an address.  Most of the states correspond
+            to states from the IPv6 Stateless Address
+            Autoconfiguration protocol.";
+            reference
+              "RFC 4293: Management Information Base for the
+                  Internet Protocol (IP)
+                  - IpAddressStatusTC
+               RFC 4862: IPv6 Stateless Address Autoconfiguration";
+
+          }
+        }  // list address
+
+        list neighbor {
+          key "ip";
+          description
+            "A list of mappings from IPv6 addresses to
+          link-layer addresses.
+
+          This list represents the Neighbor Cache.";
+          reference
+            "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";
+
+          leaf ip {
+            type inet:ipv6-address-no-zone;
+            description
+              "The IPv6 address of the neighbor node.";
+          }
+
+          leaf link-layer-address {
+            type yang:phys-address;
+            description
+              "The link-layer address of the neighbor node.";
+          }
+
+          leaf origin {
+            type neighbor-origin;
+            description
+              "The origin of this neighbor entry.";
+          }
+
+          leaf is-router {
+            type empty;
+            description
+              "Indicates that the neighbor node acts as a router.";
+          }
+
+          leaf state {
+            type enumeration {
+              enum "incomplete" {
+                value 0;
+                description
+                  "Address resolution is in progress, and the link-layer
+                address of the neighbor has not yet been
+                determined.";
+              }
+              enum "reachable" {
+                value 1;
+                description
+                  "Roughly speaking, the neighbor is known to have been
+                reachable recently (within tens of seconds ago).";
+              }
+              enum "stale" {
+                value 2;
+                description
+                  "The neighbor is no longer known to be reachable, but
+                until traffic is sent to the neighbor no attempt
+                should be made to verify its reachability.";
+              }
+              enum "delay" {
+                value 3;
+                description
+                  "The neighbor is no longer known to be reachable, and
+                traffic has recently been sent to the neighbor.
+                Rather than probe the neighbor immediately, however,
+                delay sending probes for a short while in order to
+                give upper-layer protocols a chance to provide
+                reachability confirmation.";
+              }
+              enum "probe" {
+                value 4;
+                description
+                  "The neighbor is no longer known to be reachable, and
+                unicast Neighbor Solicitation probes are being sent
+                to verify reachability.";
+              }
+            }
+            description
+              "The Neighbor Unreachability Detection state of this
+            entry.";
+            reference
+              "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+                  Section 7.3.2";
+
+          }
+        }  // list neighbor
+      }  // container ipv6
+    }
+  }  // module ietf-ip
+
