1192 lines
32 KiB
YANG
1192 lines
32 KiB
YANG
module openconfig-if-ip {
|
|
|
|
yang-version "1";
|
|
|
|
// namespace
|
|
namespace "http://openconfig.net/yang/interfaces/ip";
|
|
|
|
prefix "oc-ip";
|
|
|
|
// import some basic types
|
|
import openconfig-inet-types { prefix oc-inet; }
|
|
import openconfig-interfaces { prefix oc-if; }
|
|
import openconfig-yang-types { prefix oc-yang; }
|
|
import openconfig-extensions { prefix oc-ext; }
|
|
import openconfig-vlan { prefix oc-vlan; }
|
|
|
|
// meta
|
|
organization "OpenConfig working group";
|
|
|
|
contact
|
|
"OpenConfig working group
|
|
netopenconfig@googlegroups.com";
|
|
|
|
description
|
|
"This model defines data for managing configuration and
|
|
operational state on IP (IPv4 and IPv6) interfaces.
|
|
|
|
This model reuses data items defined in the IETF YANG model for
|
|
interfaces described by RFC 7277 with an alternate structure
|
|
(particularly for operational state data) and with
|
|
additional configuration items.
|
|
|
|
Portions of this code were derived from IETF RFC 7277.
|
|
Please reproduce this note if possible.
|
|
|
|
IETF code is subject to the following copyright and license:
|
|
Copyright (c) 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).";
|
|
|
|
oc-ext:openconfig-version "2.0.0";
|
|
|
|
revision "2017-07-14" {
|
|
description
|
|
"Added Ethernet/IP state data; Add dhcp-client;
|
|
migrate to OpenConfig types modules; Removed or
|
|
renamed opstate values";
|
|
reference "2.0.0";
|
|
}
|
|
|
|
revision "2017-04-03"{
|
|
description
|
|
"Update copyright notice.";
|
|
reference "1.1.1";
|
|
}
|
|
|
|
revision "2016-12-22" {
|
|
description
|
|
"Fixes to Ethernet interfaces model";
|
|
reference "1.1.0";
|
|
}
|
|
|
|
|
|
// typedef statements
|
|
|
|
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 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, 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 {
|
|
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, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
|
|
protocol.";
|
|
}
|
|
}
|
|
description
|
|
"The origin of a neighbor entry.";
|
|
}
|
|
|
|
// grouping statements
|
|
|
|
grouping ip-common-global-config {
|
|
description
|
|
"Shared configuration data for IPv4 or IPv6 assigned
|
|
globally on an interface.";
|
|
|
|
leaf dhcp-client {
|
|
type boolean;
|
|
default false;
|
|
description
|
|
"Enables a DHCP client on the interface in order to request
|
|
an address";
|
|
}
|
|
}
|
|
|
|
grouping ip-common-counters-state {
|
|
description
|
|
"Operational state for IP traffic statistics for IPv4 and
|
|
IPv6";
|
|
|
|
container counters {
|
|
description
|
|
"Packet and byte counters for IP transmission and
|
|
reception for the address family.";
|
|
|
|
|
|
leaf in-pkts {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The total number of IP packets received for the specified
|
|
address family, including those received in error";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf in-octets {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The total number of octets received in input IP packets
|
|
for the specified address family, including those received
|
|
in error.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf in-error-pkts {
|
|
// TODO: this counter combines several error conditions --
|
|
// could consider breaking them out to separate leaf nodes
|
|
type oc-yang:counter64;
|
|
description
|
|
"Number of IP packets discarded due to errors for the
|
|
specified address family, including errors in the IP
|
|
header, no route found to the IP destination, invalid
|
|
address, unknown protocol, etc.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf in-forwarded-pkts {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The number of input packets for which the device was not
|
|
their final IP destination and for which the device
|
|
attempted to find a route to forward them to that final
|
|
destination.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf in-forwarded-octets {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The number of octets received in input IP packets
|
|
for the specified address family for which the device was
|
|
not their final IP destination and for which the
|
|
device attempted to find a route to forward them to that
|
|
final destination.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf in-discarded-pkts {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The number of input IP packets for the
|
|
specified address family, for which no problems were
|
|
encountered to prevent their continued processing, but
|
|
were discarded (e.g., for lack of buffer space).";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf out-pkts {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The total number of IP packets for the
|
|
specified address family that the device supplied
|
|
to the lower layers for transmission. This includes
|
|
packets generated locally and those forwarded by the
|
|
device.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf out-octets {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The total number of octets in IP packets for the
|
|
specified address family that the device
|
|
supplied to the lower layers for transmission. This
|
|
includes packets generated locally and those forwarded by
|
|
the device.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf out-error-pkts {
|
|
// TODO: this counter combines several error conditions --
|
|
// could consider breaking them out to separate leaf nodes
|
|
type oc-yang:counter64;
|
|
description
|
|
"Number of IP packets for the specified address family
|
|
locally generated and discarded due to errors, including
|
|
no route found to the IP destination.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf out-forwarded-pkts {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The number of packets for which this entity was not their
|
|
final IP destination and for which it was successful in
|
|
finding a path to their final destination.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf out-forwarded-octets {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The number of octets in packets for which this entity was
|
|
not their final IP destination and for which it was
|
|
successful in finding a path to their final destination.";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
|
|
leaf out-discarded-pkts {
|
|
type oc-yang:counter64;
|
|
description
|
|
"The number of output IP packets for the
|
|
specified address family for which no problem was
|
|
encountered to prevent their transmission to their
|
|
destination, but were discarded (e.g., for lack of
|
|
buffer space).";
|
|
reference
|
|
"RFC 4293 - Management Information Base for the
|
|
Internet Protocol (IP)";
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
grouping ipv4-global-config {
|
|
description
|
|
"Configuration data for IPv4 interfaces across
|
|
all addresses assigned to the interface";
|
|
|
|
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 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";
|
|
}
|
|
|
|
uses ip-common-global-config;
|
|
|
|
|
|
}
|
|
|
|
grouping ipv4-address-config {
|
|
|
|
description
|
|
"Per IPv4 adresss configuration data for the
|
|
interface.";
|
|
|
|
leaf ip {
|
|
type oc-inet:ipv4-address;
|
|
description
|
|
"The IPv4 address on the interface.";
|
|
}
|
|
|
|
leaf prefix-length {
|
|
type uint8 {
|
|
range "0..32";
|
|
}
|
|
description
|
|
"The length of the subnet prefix.";
|
|
}
|
|
}
|
|
|
|
grouping ipv4-neighbor-config {
|
|
description
|
|
"Per IPv4 neighbor configuration data. Neighbor
|
|
entries are analagous to static ARP entries, i.e., they
|
|
create a correspondence between IP and link-layer addresses";
|
|
|
|
leaf ip {
|
|
type oc-inet:ipv4-address;
|
|
description
|
|
"The IPv4 address of the neighbor node.";
|
|
}
|
|
leaf link-layer-address {
|
|
type oc-yang:phys-address;
|
|
mandatory true;
|
|
description
|
|
"The link-layer address of the neighbor node.";
|
|
}
|
|
}
|
|
|
|
grouping ipv4-address-state {
|
|
description
|
|
"State variables for IPv4 addresses on the interface";
|
|
|
|
leaf origin {
|
|
type ip-address-origin;
|
|
description
|
|
"The origin of this address, e.g., statically configured,
|
|
assigned by DHCP, etc..";
|
|
}
|
|
}
|
|
|
|
grouping ipv4-neighbor-state {
|
|
description
|
|
"State variables for IPv4 neighbor entries on the interface.";
|
|
|
|
leaf origin {
|
|
type neighbor-origin;
|
|
description
|
|
"The origin of this neighbor entry, static or dynamic.";
|
|
}
|
|
}
|
|
|
|
grouping ipv6-global-config {
|
|
description
|
|
"Configuration data at the global level for each
|
|
IPv6 interface";
|
|
|
|
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 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";
|
|
}
|
|
|
|
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";
|
|
}
|
|
|
|
uses ip-common-global-config;
|
|
}
|
|
|
|
grouping ipv6-address-config {
|
|
description "Per-address configuration data for IPv6 interfaces";
|
|
|
|
leaf ip {
|
|
type oc-inet:ipv6-address;
|
|
description
|
|
"The IPv6 address on the interface.";
|
|
}
|
|
|
|
leaf prefix-length {
|
|
type uint8 {
|
|
range "0..128";
|
|
}
|
|
mandatory true;
|
|
description
|
|
"The length of the subnet prefix.";
|
|
}
|
|
}
|
|
|
|
grouping ipv6-address-state {
|
|
description
|
|
"Per-address operational state data for IPv6 interfaces";
|
|
|
|
leaf origin {
|
|
type ip-address-origin;
|
|
description
|
|
"The origin of this address, e.g., static, dhcp, etc.";
|
|
}
|
|
|
|
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.";
|
|
}
|
|
}
|
|
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";
|
|
}
|
|
}
|
|
|
|
grouping ipv6-neighbor-config {
|
|
description
|
|
"Per-neighbor configuration data for IPv6 interfaces";
|
|
|
|
leaf ip {
|
|
type oc-inet:ipv6-address;
|
|
description
|
|
"The IPv6 address of the neighbor node.";
|
|
}
|
|
|
|
leaf link-layer-address {
|
|
type oc-yang:phys-address;
|
|
mandatory true;
|
|
description
|
|
"The link-layer address of the neighbor node.";
|
|
}
|
|
}
|
|
|
|
grouping ipv6-neighbor-state {
|
|
description "Per-neighbor state variables for IPv6 interfaces";
|
|
|
|
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 neighbor-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.";
|
|
}
|
|
}
|
|
description
|
|
"The Neighbor Unreachability Detection state of this
|
|
entry.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
|
|
Section 7.3.2";
|
|
}
|
|
}
|
|
|
|
grouping ip-vrrp-ipv6-config {
|
|
description
|
|
"IPv6-specific configuration data for VRRP on IPv6
|
|
interfaces";
|
|
|
|
leaf virtual-link-local {
|
|
type oc-inet:ip-address;
|
|
description
|
|
"For VRRP on IPv6 interfaces, sets the virtual link local
|
|
address";
|
|
}
|
|
}
|
|
|
|
grouping ip-vrrp-ipv6-state {
|
|
description
|
|
"IPv6-specific operational state for VRRP on IPv6 interfaces";
|
|
|
|
uses ip-vrrp-ipv6-config;
|
|
}
|
|
|
|
grouping ip-vrrp-tracking-config {
|
|
description
|
|
"Configuration data for tracking interfaces
|
|
in a VRRP group";
|
|
|
|
leaf-list track-interface {
|
|
type leafref {
|
|
path "/oc-if:interfaces/oc-if:interface/oc-if:name";
|
|
}
|
|
// TODO: we may need to add some restriction to ethernet
|
|
// or IP interfaces.
|
|
description
|
|
"Sets a list of one or more interfaces that should
|
|
be tracked for up/down events to dynamically change the
|
|
priority state of the VRRP group, and potentially
|
|
change the mastership if the tracked interface going
|
|
down lowers the priority sufficiently. Any of the tracked
|
|
interfaces going down will cause the priority to be lowered.
|
|
Some implementations may only support a single
|
|
tracked interface.";
|
|
}
|
|
|
|
leaf priority-decrement {
|
|
type uint8 {
|
|
range 0..254;
|
|
}
|
|
default 0;
|
|
description "Set the value to subtract from priority when
|
|
the tracked interface goes down";
|
|
}
|
|
}
|
|
|
|
grouping ip-vrrp-tracking-state {
|
|
description
|
|
"Operational state data for tracking interfaces in a VRRP
|
|
group";
|
|
}
|
|
|
|
grouping ip-vrrp-tracking-top {
|
|
description
|
|
"Top-level grouping for VRRP interface tracking";
|
|
|
|
container interface-tracking {
|
|
description
|
|
"Top-level container for VRRP interface tracking";
|
|
|
|
container config {
|
|
description
|
|
"Configuration data for VRRP interface tracking";
|
|
|
|
uses ip-vrrp-tracking-config;
|
|
}
|
|
|
|
container state {
|
|
|
|
config false;
|
|
|
|
description
|
|
"Operational state data for VRRP interface tracking";
|
|
|
|
uses ip-vrrp-tracking-config;
|
|
uses ip-vrrp-tracking-state;
|
|
}
|
|
}
|
|
}
|
|
|
|
grouping ip-vrrp-config {
|
|
description
|
|
"Configuration data for VRRP on IP interfaces";
|
|
|
|
leaf virtual-router-id {
|
|
type uint8 {
|
|
range 1..255;
|
|
}
|
|
description
|
|
"Set the virtual router id for use by the VRRP group. This
|
|
usually also determines the virtual MAC address that is
|
|
generated for the VRRP group";
|
|
}
|
|
|
|
leaf-list virtual-address {
|
|
type oc-inet:ip-address;
|
|
description
|
|
"Configure one or more virtual addresses for the
|
|
VRRP group";
|
|
}
|
|
|
|
leaf priority {
|
|
type uint8 {
|
|
range 1..254;
|
|
}
|
|
default 100;
|
|
description
|
|
"Specifies the sending VRRP interface's priority
|
|
for the virtual router. Higher values equal higher
|
|
priority";
|
|
}
|
|
|
|
leaf preempt {
|
|
type boolean;
|
|
default true;
|
|
description
|
|
"When set to true, enables preemption by a higher
|
|
priority backup router of a lower priority master router";
|
|
}
|
|
|
|
leaf preempt-delay {
|
|
type uint16 {
|
|
range 0..3600;
|
|
}
|
|
default 0;
|
|
description
|
|
"Set the delay the higher priority router waits
|
|
before preempting";
|
|
}
|
|
|
|
leaf accept-mode {
|
|
type boolean;
|
|
// TODO: should we adopt the RFC default given the common
|
|
// operational practice of setting to true?
|
|
default false;
|
|
description
|
|
"Configure whether packets destined for
|
|
virtual addresses are accepted even when the virtual
|
|
address is not owned by the router interface";
|
|
}
|
|
|
|
leaf advertisement-interval {
|
|
type uint16 {
|
|
range 1..4095;
|
|
}
|
|
// TODO this range is theoretical -- needs to be validated
|
|
// against major implementations.
|
|
units "centiseconds";
|
|
default 100;
|
|
description
|
|
"Sets the interval between successive VRRP
|
|
advertisements -- RFC 5798 defines this as a 12-bit
|
|
value expressed as 0.1 seconds, with default 100, i.e.,
|
|
1 second. Several implementation express this in units of
|
|
seconds";
|
|
}
|
|
}
|
|
|
|
grouping ip-vrrp-state {
|
|
description
|
|
"Operational state data for VRRP on IP interfaces";
|
|
|
|
leaf current-priority {
|
|
type uint8;
|
|
description "Operational value of the priority for the
|
|
interface in the VRRP group";
|
|
}
|
|
}
|
|
|
|
grouping ip-vrrp-top {
|
|
description
|
|
"Top-level grouping for Virtual Router Redundancy Protocol";
|
|
|
|
container vrrp {
|
|
description
|
|
"Enclosing container for VRRP groups handled by this
|
|
IP interface";
|
|
|
|
reference "RFC 5798 - Virtual Router Redundancy Protocol
|
|
(VRRP) Version 3 for IPv4 and IPv6";
|
|
|
|
list vrrp-group {
|
|
key "virtual-router-id";
|
|
description
|
|
"List of VRRP groups, keyed by virtual router id";
|
|
|
|
leaf virtual-router-id {
|
|
type leafref {
|
|
path "../config/virtual-router-id";
|
|
}
|
|
description
|
|
"References the configured virtual router id for this
|
|
VRRP group";
|
|
}
|
|
|
|
container config {
|
|
description
|
|
"Configuration data for the VRRP group";
|
|
|
|
uses ip-vrrp-config;
|
|
}
|
|
|
|
container state {
|
|
|
|
config false;
|
|
|
|
description
|
|
"Operational state data for the VRRP group";
|
|
|
|
uses ip-vrrp-config;
|
|
uses ip-vrrp-state;
|
|
}
|
|
|
|
uses ip-vrrp-tracking-top;
|
|
}
|
|
}
|
|
}
|
|
|
|
grouping ipv4-top {
|
|
description "Top-level configuration and state for IPv4
|
|
interfaces";
|
|
|
|
container ipv4 {
|
|
description
|
|
"Parameters for the IPv4 address family.";
|
|
|
|
container addresses {
|
|
description
|
|
"Enclosing container for address list";
|
|
|
|
list address {
|
|
key "ip";
|
|
description
|
|
"The list of configured IPv4 addresses on the interface.";
|
|
|
|
leaf ip {
|
|
type leafref {
|
|
path "../oc-ip:config/oc-ip:ip";
|
|
}
|
|
description "References the configured IP address";
|
|
}
|
|
|
|
container config {
|
|
description "Configuration data for each configured IPv4
|
|
address on the interface";
|
|
|
|
uses ipv4-address-config;
|
|
|
|
}
|
|
|
|
container state {
|
|
|
|
config false;
|
|
description "Operational state data for each IPv4 address
|
|
configured on the interface";
|
|
|
|
uses ipv4-address-config;
|
|
uses ipv4-address-state;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
container neighbors {
|
|
description
|
|
"Enclosing container for neighbor list";
|
|
|
|
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 leafref {
|
|
path "../oc-ip:config/oc-ip:ip";
|
|
}
|
|
description "References the configured IP address";
|
|
}
|
|
|
|
container config {
|
|
description "Configuration data for each configured IPv4
|
|
address on the interface";
|
|
|
|
uses ipv4-neighbor-config;
|
|
|
|
}
|
|
|
|
container state {
|
|
|
|
config false;
|
|
description "Operational state data for each IPv4 address
|
|
configured on the interface";
|
|
|
|
uses ipv4-neighbor-config;
|
|
uses ipv4-neighbor-state;
|
|
}
|
|
}
|
|
}
|
|
|
|
uses oc-if:sub-unnumbered-top;
|
|
|
|
container config {
|
|
description
|
|
"Top-level IPv4 configuration data for the interface";
|
|
|
|
uses ipv4-global-config;
|
|
}
|
|
|
|
container state {
|
|
|
|
config false;
|
|
description
|
|
"Top level IPv4 operational state data";
|
|
|
|
uses ipv4-global-config;
|
|
uses ip-common-counters-state;
|
|
}
|
|
}
|
|
}
|
|
|
|
grouping ipv6-top {
|
|
description
|
|
"Top-level configuration and state for IPv6 interfaces";
|
|
|
|
container ipv6 {
|
|
description
|
|
"Parameters for the IPv6 address family.";
|
|
|
|
container addresses {
|
|
description
|
|
"Enclosing container for address list";
|
|
|
|
list address {
|
|
key "ip";
|
|
description
|
|
"The list of configured IPv6 addresses on the interface.";
|
|
|
|
leaf ip {
|
|
type leafref {
|
|
path "../oc-ip:config/oc-ip:ip";
|
|
}
|
|
description "References the configured IP address";
|
|
}
|
|
|
|
container config {
|
|
description
|
|
"Configuration data for each IPv6 address on
|
|
the interface";
|
|
|
|
uses ipv6-address-config;
|
|
|
|
}
|
|
|
|
container state {
|
|
|
|
config false;
|
|
description
|
|
"State data for each IPv6 address on the
|
|
interface";
|
|
|
|
uses ipv6-address-config;
|
|
uses ipv6-address-state;
|
|
}
|
|
}
|
|
}
|
|
|
|
container neighbors {
|
|
description
|
|
"Enclosing container for list of IPv6 neighbors";
|
|
|
|
list neighbor {
|
|
key "ip";
|
|
description
|
|
"List of IPv6 neighbors";
|
|
|
|
leaf ip {
|
|
type leafref {
|
|
path "../oc-ip:config/oc-ip:ip";
|
|
}
|
|
description
|
|
"References the configured IP neighbor address";
|
|
}
|
|
|
|
container config {
|
|
description "Configuration data for each IPv6 address on
|
|
the interface";
|
|
|
|
uses ipv6-neighbor-config;
|
|
|
|
}
|
|
|
|
container state {
|
|
|
|
config false;
|
|
description "State data for each IPv6 address on the
|
|
interface";
|
|
|
|
uses ipv6-neighbor-config;
|
|
uses ipv6-neighbor-state;
|
|
}
|
|
}
|
|
}
|
|
uses oc-if:sub-unnumbered-top;
|
|
|
|
container config {
|
|
description "Top-level config data for the IPv6 interface";
|
|
|
|
uses ipv6-global-config;
|
|
}
|
|
|
|
container state {
|
|
config false;
|
|
description
|
|
"Top-level operational state data for the IPv6 interface";
|
|
|
|
uses ipv6-global-config;
|
|
uses ip-common-counters-state;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// augment statements
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
|
|
"oc-if:subinterface" {
|
|
description
|
|
"IPv4 addr family configuration for
|
|
interfaces";
|
|
|
|
uses ipv4-top;
|
|
|
|
}
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
|
|
"oc-if:subinterface" {
|
|
description
|
|
"IPv6 addr family configuration for
|
|
interfaces";
|
|
|
|
uses ipv6-top;
|
|
|
|
}
|
|
|
|
// VRRP for IPv4 interfaces
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
|
|
"oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address" {
|
|
|
|
description
|
|
"Additional IP addr family configuration for
|
|
interfaces";
|
|
|
|
uses ip-vrrp-top;
|
|
|
|
}
|
|
|
|
// VRRP for IPv6 interfaces
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
|
|
"oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address" {
|
|
description
|
|
"Additional IP addr family configuration for
|
|
interfaces";
|
|
|
|
uses ip-vrrp-top;
|
|
|
|
}
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
|
|
"oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/" +
|
|
"vrrp/vrrp-group/config" {
|
|
description
|
|
"Additional VRRP data for IPv6 interfaces";
|
|
|
|
uses ip-vrrp-ipv6-config;
|
|
}
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
|
|
"oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/" +
|
|
"vrrp-group/state" {
|
|
description
|
|
"Additional VRRP data for IPv6 interfaces";
|
|
|
|
uses ip-vrrp-ipv6-state;
|
|
}
|
|
|
|
// Augments for for routed VLANs
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan" {
|
|
description
|
|
"IPv4 addr family configuration for
|
|
interfaces";
|
|
|
|
uses ipv4-top;
|
|
|
|
}
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan" {
|
|
description
|
|
"IPv6 addr family configuration for
|
|
interfaces";
|
|
|
|
uses ipv6-top;
|
|
|
|
}
|
|
|
|
// VRRP for routed VLAN interfaces
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
|
|
"oc-ip:ipv4/oc-ip:addresses/oc-ip:address" {
|
|
description
|
|
"Additional IP addr family configuration for
|
|
interfaces";
|
|
|
|
uses ip-vrrp-top;
|
|
|
|
}
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
|
|
"oc-ip:ipv6/oc-ip:addresses/oc-ip:address" {
|
|
description
|
|
"Additional IP addr family configuration for
|
|
interfaces";
|
|
|
|
uses ip-vrrp-top;
|
|
|
|
}
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
|
|
"oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/vrrp-group/config" {
|
|
description
|
|
"Additional VRRP data for IPv6 interfaces";
|
|
|
|
uses ip-vrrp-ipv6-config;
|
|
}
|
|
|
|
|
|
augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
|
|
"oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/vrrp-group/state" {
|
|
description
|
|
"Additional VRRP data for IPv6 interfaces";
|
|
|
|
uses ip-vrrp-ipv6-state;
|
|
}
|
|
|
|
// rpc statements
|
|
|
|
// notification statements
|
|
}
|