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