| module ietf-ip { |
| yang-version 1.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 (Network Modeling) Working Group"; |
| |
| contact |
| "WG Web: <https://datatracker.ietf.org/wg/netmod/> |
| WG List: <mailto:netmod@ietf.org> |
| |
| Editor: Martin Bjorklund |
| <mailto:mbj@tail-f.com>"; |
| description |
| "This module contains a collection of YANG definitions for |
| managing IP implementations. |
| |
| Copyright (c) 2018 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 |
| (https://trustee.ietf.org/license-info). |
| |
| This version of this YANG module is part of RFC 8344; see |
| the RFC itself for full legal notices."; |
| |
| revision 2018-02-22 { |
| description |
| "Updated to support NMDA."; |
| reference |
| "RFC 8344: A YANG Data Model for IP Management"; |
| } |
| |
| revision 2014-06-16 { |
| description |
| "Initial revision."; |
| reference |
| "RFC 7277: A YANG Data Model for IP Management"; |
| } |
| |
| /* |
| * Features |
| */ |
| |
| 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"; |
| } |
| |
| /* |
| * Typedefs |
| */ |
| |
| typedef ip-address-origin { |
| type enumeration { |
| enum other { |
| description |
| "None of the following."; |
| } |
| |
| enum static { |
| description |
| "Indicates that the address has been statically |
| configured -- for example, using the Network Configuration |
| Protocol (NETCONF) or a command line interface."; |
| } |
| enum dhcp { |
| description |
| "Indicates an address that has been assigned to this |
| system by a DHCP server."; |
| } |
| enum link-layer { |
| description |
| "Indicates an address created by IPv6 stateless |
| autoconfiguration that embeds a link-layer address in its |
| interface identifier."; |
| } |
| enum random { |
| description |
| "Indicates an address chosen by the system at |
| random, e.g., an IPv4 address within 169.254/16, a |
| temporary address as described in RFC 4941, or a |
| semantically opaque address as described in RFC 7217."; |
| 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 { |
| description |
| "None of the following."; |
| } |
| enum static { |
| description |
| "Indicates that the mapping has been statically |
| configured -- for example, using NETCONF or a command line |
| interface."; |
| } |
| |
| enum dynamic { |
| description |
| "Indicates that the mapping has been dynamically resolved |
| using, for example, IPv4 ARP or the IPv6 Neighbor |
| Discovery protocol."; |
| } |
| } |
| description |
| "The origin of a neighbor entry."; |
| } |
| |
| /* |
| * Data nodes |
| */ |
| |
| augment "/if:interfaces/if:interface" { |
| description |
| "IP parameters 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 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."; |
| } |
| } |
| |
| leaf origin { |
| type ip-address-origin; |
| config false; |
| description |
| "The origin of this address."; |
| } |
| } |
| list neighbor { |
| key "ip"; |
| description |
| "A list of mappings from IPv4 addresses to |
| link-layer addresses. |
| |
| Entries in this list in the intended configuration are |
| used as static entries in the ARP Cache. |
| |
| In the operational state, 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; |
| mandatory true; |
| description |
| "The link-layer address of the neighbor node."; |
| } |
| leaf origin { |
| type neighbor-origin; |
| config false; |
| description |
| "The origin of this neighbor entry."; |
| } |
| } |
| } |
| |
| 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 8200: 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; |
| config false; |
| description |
| "The origin of this address."; |
| } |
| leaf status { |
| type enumeration { |
| enum preferred { |
| description |
| "This is a valid address that can appear as the |
| destination or source address of a packet."; |
| } |
| enum deprecated { |
| 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 { |
| description |
| "This isn't a valid address, and it shouldn't appear |
| as the destination or source address of a packet."; |
| } |
| |
| enum inaccessible { |
| description |
| "The address is not accessible because the interface |
| to which this address is assigned is not |
| operational."; |
| } |
| enum unknown { |
| description |
| "The status cannot be determined for some reason."; |
| } |
| enum tentative { |
| 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 { |
| description |
| "The address has been determined to be non-unique on |
| the link and so must not be used."; |
| } |
| enum optimistic { |
| description |
| "The address is available for use, subject to |
| restrictions, while its uniqueness on a link is |
| being verified."; |
| } |
| } |
| config false; |
| 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 neighbor { |
| key "ip"; |
| description |
| "A list of mappings from IPv6 addresses to |
| link-layer addresses. |
| |
| Entries in this list in the intended configuration are |
| used as static entries in the Neighbor Cache. |
| |
| In the operational state, 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; |
| mandatory true; |
| description |
| "The link-layer address of the neighbor node. |
| |
| In the operational state, if the neighbor's 'state' leaf |
| is 'incomplete', this leaf is not instantiated."; |
| } |
| leaf origin { |
| type neighbor-origin; |
| config false; |
| description |
| "The origin of this neighbor entry."; |
| } |
| leaf is-router { |
| type empty; |
| config false; |
| description |
| "Indicates that the neighbor node acts as a router."; |
| } |
| |
| leaf state { |
| type enumeration { |
| enum incomplete { |
| description |
| "Address resolution is in progress, and the |
| link-layer address of the neighbor has not yet been |
| determined."; |
| } |
| enum reachable { |
| description |
| "Roughly speaking, the neighbor is known to have been |
| reachable recently (within tens of seconds ago)."; |
| } |
| enum stale { |
| 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 { |
| 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 { |
| description |
| "The neighbor is no longer known to be reachable, and |
| unicast Neighbor Solicitation probes are being sent |
| to verify reachability."; |
| } |
| } |
| config false; |
| description |
| "The Neighbor Unreachability Detection state of this |
| entry."; |
| reference |
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) |
| Section 7.3.2"; |
| } |
| } |
| |
| 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"; |
| } |
| } |
| } |
| } |
| |
| /* |
| * Legacy operational state data nodes |
| */ |
| |
| augment "/if:interfaces-state/if:interface" { |
| status deprecated; |
| description |
| "Data nodes for the operational state of IP on interfaces."; |
| |
| container ipv4 { |
| presence |
| "Present if IPv4 is enabled on this interface"; |
| config false; |
| status deprecated; |
| description |
| "Interface-specific parameters for the IPv4 address family."; |
| |
| leaf forwarding { |
| type boolean; |
| status deprecated; |
| description |
| "Indicates whether IPv4 packet forwarding is enabled or |
| disabled on this interface."; |
| } |
| leaf mtu { |
| type uint16 { |
| range "68..max"; |
| } |
| units "octets"; |
| status deprecated; |
| 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"; |
| status deprecated; |
| description |
| "The list of IPv4 addresses on the interface."; |
| |
| leaf ip { |
| type inet:ipv4-address-no-zone; |
| status deprecated; |
| description |
| "The IPv4 address on the interface."; |
| } |
| choice subnet { |
| status deprecated; |
| 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"; |
| } |
| status deprecated; |
| description |
| "The length of the subnet prefix."; |
| } |
| leaf netmask { |
| if-feature ipv4-non-contiguous-netmasks; |
| type yang:dotted-quad; |
| status deprecated; |
| description |
| "The subnet specified as a netmask."; |
| } |
| } |
| leaf origin { |
| type ip-address-origin; |
| status deprecated; |
| description |
| "The origin of this address."; |
| } |
| } |
| list neighbor { |
| key "ip"; |
| status deprecated; |
| 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; |
| status deprecated; |
| description |
| "The IPv4 address of the neighbor node."; |
| } |
| |
| leaf link-layer-address { |
| type yang:phys-address; |
| status deprecated; |
| description |
| "The link-layer address of the neighbor node."; |
| } |
| leaf origin { |
| type neighbor-origin; |
| status deprecated; |
| description |
| "The origin of this neighbor entry."; |
| } |
| } |
| } |
| |
| container ipv6 { |
| presence |
| "Present if IPv6 is enabled on this interface"; |
| config false; |
| status deprecated; |
| description |
| "Parameters for the IPv6 address family."; |
| |
| leaf forwarding { |
| type boolean; |
| default false; |
| status deprecated; |
| 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"; |
| status deprecated; |
| description |
| "The size, in octets, of the largest IPv6 packet that the |
| interface will send and receive."; |
| reference |
| "RFC 8200: Internet Protocol, Version 6 (IPv6) |
| Specification |
| Section 5"; |
| } |
| list address { |
| key "ip"; |
| status deprecated; |
| description |
| "The list of IPv6 addresses on the interface."; |
| |
| leaf ip { |
| type inet:ipv6-address-no-zone; |
| status deprecated; |
| description |
| "The IPv6 address on the interface."; |
| } |
| leaf prefix-length { |
| type uint8 { |
| range "0..128"; |
| } |
| mandatory true; |
| status deprecated; |
| description |
| "The length of the subnet prefix."; |
| } |
| leaf origin { |
| type ip-address-origin; |
| status deprecated; |
| description |
| "The origin of this address."; |
| } |
| leaf status { |
| type enumeration { |
| enum preferred { |
| description |
| "This is a valid address that can appear as the |
| destination or source address of a packet."; |
| } |
| enum deprecated { |
| 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 { |
| description |
| "This isn't a valid address, and it shouldn't appear |
| as the destination or source address of a packet."; |
| } |
| |
| enum inaccessible { |
| description |
| "The address is not accessible because the interface |
| to which this address is assigned is not |
| operational."; |
| } |
| enum unknown { |
| description |
| "The status cannot be determined for some reason."; |
| } |
| enum tentative { |
| 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 { |
| description |
| "The address has been determined to be non-unique on |
| the link and so must not be used."; |
| } |
| enum optimistic { |
| description |
| "The address is available for use, subject to |
| restrictions, while its uniqueness on a link is |
| being verified."; |
| } |
| } |
| status deprecated; |
| 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 neighbor { |
| key "ip"; |
| status deprecated; |
| 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; |
| status deprecated; |
| description |
| "The IPv6 address of the neighbor node."; |
| } |
| leaf link-layer-address { |
| type yang:phys-address; |
| status deprecated; |
| description |
| "The link-layer address of the neighbor node."; |
| } |
| leaf origin { |
| type neighbor-origin; |
| status deprecated; |
| description |
| "The origin of this neighbor entry."; |
| } |
| leaf is-router { |
| type empty; |
| status deprecated; |
| description |
| "Indicates that the neighbor node acts as a router."; |
| } |
| leaf state { |
| type enumeration { |
| enum incomplete { |
| description |
| "Address resolution is in progress, and the |
| link-layer address of the neighbor has not yet been |
| determined."; |
| } |
| enum reachable { |
| description |
| "Roughly speaking, the neighbor is known to have been |
| reachable recently (within tens of seconds ago)."; |
| } |
| enum stale { |
| 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 { |
| 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 { |
| description |
| "The neighbor is no longer known to be reachable, and |
| unicast Neighbor Solicitation probes are being sent |
| to verify reachability."; |
| } |
| } |
| status deprecated; |
| description |
| "The Neighbor Unreachability Detection state of this |
| entry."; |
| reference |
| "RFC 4861: Neighbor Discovery for IP version 6 (IPv6) |
| Section 7.3.2"; |
| } |
| } |
| } |
| } |
| } |