Drawing yang models from test/config for Yang live compiler test

Change-Id: Ifc3c226d2b8b1b90c667ac71f6e213faa1a479ce
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

+