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