636 lines
22 KiB
YANG
636 lines
22 KiB
YANG
|
|
module ietf-ipv6-unicast-routing {
|
|
|
|
namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing";
|
|
|
|
prefix "v6ur";
|
|
|
|
import ietf-routing {
|
|
prefix "rt";
|
|
revision-date "2014-10-26";
|
|
}
|
|
|
|
import ietf-inet-types {
|
|
prefix "inet";
|
|
revision-date "2013-07-15";
|
|
}
|
|
|
|
import ietf-interfaces {
|
|
prefix "if";
|
|
revision-date "2013-07-15";
|
|
}
|
|
|
|
import ietf-ip {
|
|
prefix "ip";
|
|
revision-date "2014-06-16";
|
|
}
|
|
|
|
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: Ladislav Lhotka
|
|
<mailto:lhotka@nic.cz>";
|
|
|
|
description
|
|
"This YANG module augments the 'ietf-routing' module with basic
|
|
configuration and operational state data for IPv6 unicast
|
|
routing.
|
|
|
|
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 XXXX; see the
|
|
RFC itself for full legal notices.";
|
|
|
|
revision 2014-10-26 {
|
|
description
|
|
"Initial revision.";
|
|
reference
|
|
"RFC XXXX: A YANG Data Model for Routing Management";
|
|
}
|
|
|
|
/* Identities */
|
|
|
|
identity ipv6-unicast {
|
|
base rt:ipv6;
|
|
description
|
|
"This identity represents the IPv6 unicast address family.";
|
|
}
|
|
|
|
/* Operational state data */
|
|
|
|
augment "/rt:routing-state/rt:routing-instance/rt:interfaces/"
|
|
+ "rt:interface" {
|
|
description
|
|
"IPv6-specific parameters of router interfaces.";
|
|
container ipv6-router-advertisements {
|
|
description
|
|
"Parameters of IPv6 Router Advertisements.";
|
|
leaf send-advertisements {
|
|
type boolean;
|
|
description
|
|
"A flag indicating whether or not the router sends periodic
|
|
Router Advertisements and responds to Router
|
|
Solicitations.";
|
|
}
|
|
leaf max-rtr-adv-interval {
|
|
type uint16 {
|
|
range "4..1800";
|
|
}
|
|
units "seconds";
|
|
description
|
|
"The maximum time allowed between sending unsolicited
|
|
multicast Router Advertisements from the interface.";
|
|
}
|
|
leaf min-rtr-adv-interval {
|
|
type uint16 {
|
|
range "3..1350";
|
|
}
|
|
units "seconds";
|
|
description
|
|
"The minimum time allowed between sending unsolicited
|
|
multicast Router Advertisements from the interface.";
|
|
}
|
|
leaf managed-flag {
|
|
type boolean;
|
|
description
|
|
"The value that is placed in the 'Managed address
|
|
configuration' flag field in the Router Advertisement.";
|
|
}
|
|
leaf other-config-flag {
|
|
type boolean;
|
|
description
|
|
"The value that is placed in the 'Other configuration' flag
|
|
field in the Router Advertisement.";
|
|
}
|
|
leaf link-mtu {
|
|
type uint32;
|
|
description
|
|
"The value that is placed in MTU options sent by the
|
|
router. A value of zero indicates that no MTU options are
|
|
sent.";
|
|
}
|
|
leaf reachable-time {
|
|
type uint32 {
|
|
range "0..3600000";
|
|
}
|
|
units "milliseconds";
|
|
description
|
|
"The value that is placed in the Reachable Time field in
|
|
the Router Advertisement messages sent by the router. A
|
|
value of zero means unspecified (by this router).";
|
|
}
|
|
leaf retrans-timer {
|
|
type uint32;
|
|
units "milliseconds";
|
|
description
|
|
"The value that is placed in the Retrans Timer field in the
|
|
Router Advertisement messages sent by the router. A value
|
|
of zero means unspecified (by this router).";
|
|
}
|
|
leaf cur-hop-limit {
|
|
type uint8;
|
|
description
|
|
"The value that is placed in the Cur Hop Limit field in the
|
|
Router Advertisement messages sent by the router. A value
|
|
of zero means unspecified (by this router).";
|
|
}
|
|
leaf default-lifetime {
|
|
type uint16 {
|
|
range "0..9000";
|
|
}
|
|
units "seconds";
|
|
description
|
|
"The value that is placed in the Router Lifetime field of
|
|
Router Advertisements sent from the interface, in seconds.
|
|
A value of zero indicates that the router is not to be
|
|
used as a default router.";
|
|
}
|
|
container prefix-list {
|
|
description
|
|
"A list of prefixes that are placed in Prefix Information
|
|
options in Router Advertisement messages sent from the
|
|
interface.
|
|
|
|
By default, these are all prefixes that the router
|
|
advertises via routing protocols as being on-link for the
|
|
interface from which the advertisement is sent.";
|
|
list prefix {
|
|
key "prefix-spec";
|
|
description
|
|
"Advertised prefix entry and its parameters.";
|
|
leaf prefix-spec {
|
|
type inet:ipv6-prefix;
|
|
description
|
|
"IPv6 address prefix.";
|
|
}
|
|
leaf valid-lifetime {
|
|
type uint32;
|
|
units "seconds";
|
|
description
|
|
"The value that is placed in the Valid Lifetime in the
|
|
Prefix Information option. The designated value of all
|
|
1's (0xffffffff) represents infinity.";
|
|
}
|
|
leaf on-link-flag {
|
|
type boolean;
|
|
description
|
|
"The value that is placed in the on-link flag ('L-bit')
|
|
field in the Prefix Information option.";
|
|
}
|
|
leaf preferred-lifetime {
|
|
type uint32;
|
|
units "seconds";
|
|
description
|
|
"The value that is placed in the Preferred Lifetime in
|
|
the Prefix Information option, in seconds. The
|
|
designated value of all 1's (0xffffffff) represents
|
|
infinity.";
|
|
}
|
|
leaf autonomous-flag {
|
|
type boolean;
|
|
description
|
|
"The value that is placed in the Autonomous Flag field
|
|
in the Prefix Information option.";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" {
|
|
when "../../rt:address-family = 'v6ur:ipv6-unicast'" {
|
|
description
|
|
"This augment is valid only for IPv6 unicast.";
|
|
}
|
|
description
|
|
"This leaf augments an IPv6 unicast route.";
|
|
leaf destination-prefix {
|
|
type inet:ipv6-prefix;
|
|
description
|
|
"IPv6 destination prefix.";
|
|
}
|
|
}
|
|
|
|
augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route/"
|
|
+ "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
|
|
when "../../../rt:address-family = 'v6ur:ipv6-unicast'" {
|
|
description
|
|
"This augment is valid only for IPv6 unicast.";
|
|
}
|
|
description
|
|
"This leaf augments the 'simple-next-hop' case of IPv6 unicast
|
|
routes.";
|
|
leaf next-hop {
|
|
type inet:ipv6-address;
|
|
description
|
|
"IPv6 address of the next-hop.";
|
|
}
|
|
}
|
|
|
|
augment "/rt:routing-state/rt:next-hop-lists/rt:next-hop-list/"
|
|
+ "rt:next-hop/rt:next-hop-options/rt:simple-next-hop" {
|
|
when "../rt:address-family = 'v6ur:ipv6-unicast'" {
|
|
description
|
|
"This augment is valid only for IPv6 unicast.";
|
|
}
|
|
description
|
|
"This leaf augments next-hop list with IPv6 next-hop address.
|
|
routes.";
|
|
leaf next-hop-address {
|
|
type inet:ipv6-address;
|
|
description
|
|
"IPv6 address of the next-hop.";
|
|
}
|
|
}
|
|
|
|
/* Configuration data */
|
|
|
|
augment
|
|
"/rt:routing/rt:routing-instance/rt:interfaces/rt:interface" {
|
|
when "/if:interfaces/if:interface[if:name=current()/rt:name]/"
|
|
+ "ip:ipv6/ip:enabled='true'" {
|
|
description
|
|
"This augment is only valid for router interfaces with
|
|
enabled IPv6.";
|
|
}
|
|
description
|
|
"Configuration of IPv6-specific parameters of router
|
|
interfaces.";
|
|
container ipv6-router-advertisements {
|
|
description
|
|
"Configuration of IPv6 Router Advertisements.";
|
|
leaf send-advertisements {
|
|
type boolean;
|
|
default "false";
|
|
description
|
|
"A flag indicating whether or not the router sends periodic
|
|
Router Advertisements and responds to Router
|
|
Solicitations.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvSendAdvertisements.";
|
|
}
|
|
leaf max-rtr-adv-interval {
|
|
type uint16 {
|
|
range "4..1800";
|
|
}
|
|
units "seconds";
|
|
default "600";
|
|
description
|
|
"The maximum time allowed between sending unsolicited
|
|
multicast Router Advertisements from the interface.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
MaxRtrAdvInterval.";
|
|
}
|
|
leaf min-rtr-adv-interval {
|
|
type uint16 {
|
|
range "3..1350";
|
|
}
|
|
units "seconds";
|
|
must ". <= 0.75 * ../max-rtr-adv-interval" {
|
|
description
|
|
"The value MUST NOT be greater than 75 % of
|
|
'max-rtr-adv-interval'.";
|
|
}
|
|
description
|
|
"The minimum time allowed between sending unsolicited
|
|
multicast Router Advertisements from the interface.
|
|
|
|
The default value to be used operationally if this leaf is
|
|
not configured is determined as follows:
|
|
|
|
- if max-rtr-adv-interval >= 9 seconds, the default value
|
|
is 0.33 * max-rtr-adv-interval;
|
|
|
|
- otherwise it is 0.75 * max-rtr-adv-interval.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
MinRtrAdvInterval.";
|
|
}
|
|
leaf managed-flag {
|
|
type boolean;
|
|
default "false";
|
|
description
|
|
"The value to be placed in the 'Managed address
|
|
configuration' flag field in the Router Advertisement.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvManagedFlag.";
|
|
}
|
|
leaf other-config-flag {
|
|
type boolean;
|
|
default "false";
|
|
description
|
|
"The value to be placed in the 'Other configuration' flag
|
|
field in the Router Advertisement.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvOtherConfigFlag.";
|
|
}
|
|
leaf link-mtu {
|
|
type uint32;
|
|
default "0";
|
|
description
|
|
"The value to be placed in MTU options sent by the router.
|
|
A value of zero indicates that no MTU options are sent.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvLinkMTU.";
|
|
}
|
|
leaf reachable-time {
|
|
type uint32 {
|
|
range "0..3600000";
|
|
}
|
|
units "milliseconds";
|
|
default "0";
|
|
description
|
|
"The value to be placed in the Reachable Time field in the
|
|
Router Advertisement messages sent by the router. A value
|
|
of zero means unspecified (by this router).";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvReachableTime.";
|
|
}
|
|
leaf retrans-timer {
|
|
type uint32;
|
|
units "milliseconds";
|
|
default "0";
|
|
description
|
|
"The value to be placed in the Retrans Timer field in the
|
|
Router Advertisement messages sent by the router. A value
|
|
of zero means unspecified (by this router).";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvRetransTimer.";
|
|
}
|
|
leaf cur-hop-limit {
|
|
type uint8;
|
|
description
|
|
"The value to be placed in the Cur Hop Limit field in the
|
|
Router Advertisement messages sent by the router. A value
|
|
of zero means unspecified (by this router).
|
|
|
|
If this parameter is not configured, the device SHOULD use
|
|
the value specified in IANA Assigned Numbers that was in
|
|
effect at the time of implementation.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvCurHopLimit.
|
|
|
|
IANA: IP Parameters,
|
|
http://www.iana.org/assignments/ip-parameters";
|
|
}
|
|
leaf default-lifetime {
|
|
type uint16 {
|
|
range "0..9000";
|
|
}
|
|
units "seconds";
|
|
description
|
|
"The value to be placed in the Router Lifetime field of
|
|
Router Advertisements sent from the interface, in seconds.
|
|
It MUST be either zero or between max-rtr-adv-interval and
|
|
9000 seconds. A value of zero indicates that the router is
|
|
not to be used as a default router. These limits may be
|
|
overridden by specific documents that describe how IPv6
|
|
operates over different link layers.
|
|
|
|
If this parameter is not configured, the device SHOULD use
|
|
a value of 3 * max-rtr-adv-interval.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvDefaultLifeTime.";
|
|
}
|
|
container prefix-list {
|
|
description
|
|
"Configuration of prefixes to be placed in Prefix
|
|
Information options in Router Advertisement messages sent
|
|
from the interface.
|
|
|
|
Prefixes that are advertised by default but do not have
|
|
their entries in the child 'prefix' list are advertised
|
|
with the default values of all parameters.
|
|
|
|
The link-local prefix SHOULD NOT be included in the list
|
|
of advertised prefixes.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6) -
|
|
AdvPrefixList.";
|
|
list prefix {
|
|
key "prefix-spec";
|
|
description
|
|
"Configuration of an advertised prefix entry.";
|
|
leaf prefix-spec {
|
|
type inet:ipv6-prefix;
|
|
description
|
|
"IPv6 address prefix.";
|
|
}
|
|
choice control-adv-prefixes {
|
|
default "advertise";
|
|
description
|
|
"The prefix either may be explicitly removed from the
|
|
set of advertised prefixes, or parameters with which
|
|
it is advertised may be specified (default case).";
|
|
leaf no-advertise {
|
|
type empty;
|
|
description
|
|
"The prefix will not be advertised.
|
|
|
|
This can be used for removing the prefix from the
|
|
default set of advertised prefixes.";
|
|
}
|
|
case advertise {
|
|
leaf valid-lifetime {
|
|
type uint32;
|
|
units "seconds";
|
|
default "2592000";
|
|
description
|
|
"The value to be placed in the Valid Lifetime in
|
|
the Prefix Information option. The designated
|
|
value of all 1's (0xffffffff) represents
|
|
infinity.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6
|
|
(IPv6) - AdvValidLifetime.";
|
|
}
|
|
leaf on-link-flag {
|
|
type boolean;
|
|
default "true";
|
|
description
|
|
"The value to be placed in the on-link flag
|
|
('L-bit') field in the Prefix Information
|
|
option.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6
|
|
(IPv6) - AdvOnLinkFlag.";
|
|
}
|
|
leaf preferred-lifetime {
|
|
type uint32;
|
|
units "seconds";
|
|
must ". <= ../valid-lifetime" {
|
|
description
|
|
"This value MUST NOT be greater than
|
|
valid-lifetime.";
|
|
}
|
|
default "604800";
|
|
description
|
|
"The value to be placed in the Preferred Lifetime
|
|
in the Prefix Information option. The designated
|
|
value of all 1's (0xffffffff) represents
|
|
infinity.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6
|
|
(IPv6) - AdvPreferredLifetime.";
|
|
}
|
|
leaf autonomous-flag {
|
|
type boolean;
|
|
default "true";
|
|
description
|
|
"The value to be placed in the Autonomous Flag
|
|
field in the Prefix Information option.";
|
|
reference
|
|
"RFC 4861: Neighbor Discovery for IP version 6
|
|
(IPv6) - AdvAutonomousFlag.";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
augment "/rt:routing/rt:routing-instance/rt:routing-protocols/"
|
|
+ "rt:routing-protocol/rt:static-routes" {
|
|
description
|
|
"This augment defines the configuration of the 'static'
|
|
pseudo-protocol with data specific to IPv6 unicast.";
|
|
container ipv6 {
|
|
description
|
|
"Configuration of a 'static' pseudo-protocol instance
|
|
consists of a list of routes.";
|
|
list route {
|
|
key "destination-prefix";
|
|
ordered-by "user";
|
|
description
|
|
"A user-ordered list of static routes.";
|
|
leaf destination-prefix {
|
|
type inet:ipv6-prefix;
|
|
mandatory "true";
|
|
description
|
|
"IPv6 destination prefix.";
|
|
}
|
|
leaf description {
|
|
type string;
|
|
description
|
|
"Textual description of the route.";
|
|
}
|
|
container next-hop {
|
|
description
|
|
"Configuration of next-hop.";
|
|
grouping next-hop-content {
|
|
description
|
|
"Next-hop content for IPv6 unicast static routes.";
|
|
uses rt:next-hop-content {
|
|
augment "next-hop-options" {
|
|
description
|
|
"Add next-hop address case.";
|
|
leaf next-hop-address {
|
|
type inet:ipv6-address;
|
|
description
|
|
"IPv6 address of the next-hop.";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
choice simple-or-list {
|
|
description
|
|
"Options for next-hops.";
|
|
list multipath-entry {
|
|
if-feature rt:multipath-routes;
|
|
key "name";
|
|
description
|
|
"List of alternative next-hops.";
|
|
leaf name {
|
|
type string;
|
|
description
|
|
"A unique identifier of the next-hop entry.";
|
|
}
|
|
uses next-hop-content;
|
|
uses rt:next-hop-classifiers;
|
|
}
|
|
case simple-next-hop {
|
|
uses next-hop-content;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* RPC methods */
|
|
|
|
augment "/rt:fib-route/rt:input/rt:destination-address" {
|
|
when "rt:address-family='v6ur:ipv6-unicast'" {
|
|
description
|
|
"This augment is valid only for IPv6 unicast.";
|
|
}
|
|
description
|
|
"This leaf augments the 'rt:destination-address' parameter of
|
|
the 'rt:fib-route' operation.";
|
|
leaf address {
|
|
type inet:ipv6-address;
|
|
description
|
|
"IPv6 destination address.";
|
|
}
|
|
}
|
|
|
|
augment "/rt:fib-route/rt:output/rt:route" {
|
|
when "rt:address-family='v6ur:ipv6-unicast'" {
|
|
description
|
|
"This augment is valid only for IPv6 unicast.";
|
|
}
|
|
description
|
|
"This leaf augments the reply to the 'rt:fib-route'
|
|
operation.";
|
|
leaf destination-prefix {
|
|
type inet:ipv6-prefix;
|
|
description
|
|
"IPv6 destination prefix.";
|
|
}
|
|
}
|
|
|
|
augment "/rt:fib-route/rt:output/rt:route/rt:next-hop/"
|
|
+ "rt:next-hop-options/rt:simple-next-hop" {
|
|
when "../rt:address-family='v4ur:ipv6-unicast'" {
|
|
description
|
|
"This augment is valid only for IPv6 unicast.";
|
|
}
|
|
description
|
|
"This leaf augments the 'simple-next-hop' case in the reply to
|
|
the 'rt:fib-route' operation.";
|
|
leaf next-hop-address {
|
|
type inet:ipv6-address;
|
|
description
|
|
"IPv6 address of the next-hop.";
|
|
}
|
|
}
|
|
}
|
|
|