module ietf-ipv6-unicast-routing {
namespace "urn:ietf:params:xml:ns:yang:ietf-ipv6-unicast-routing";
prefix "v6ur";
import ietf-routing {
prefix "rt";
}
import ietf-inet-types {
prefix "inet";
}
import ietf-interfaces {
prefix "if";
}
import ietf-ip {
prefix "ip";
}
organization
"IETF NETMOD (NETCONF Data Modeling Language) Working Group";
contact
"WG Web:
WG List:
WG Chair: David Kessens
WG Chair: Juergen Schoenwaelder
Editor: Ladislav Lhotka
";
description
"This YANG module augments the 'ietf-routing' module with basic
configuration and operational state data for IPv6 unicast
routing.
Every implementation must preconfigure a routing table with the
name 'main-ipv6-unicast', which is the main routing table for
IPv6 unicast.
Copyright (c) 2012 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 2012-07-09 {
description
"Initial revision.";
reference
"RFC XXXX: A YANG Data Model for Routing Configuration";
}
/* Groupings */
grouping route-content {
description
"Specific parameters of IPv6 unicast routes.";
leaf dest-prefix {
type inet:ipv6-prefix;
description
"IPv6 destination prefix.";
}
leaf next-hop {
type inet:ipv6-address;
description
"IPv6 address of the next hop.";
}
}
/* RPC Methods */
augment "/rt:active-route/rt:input/rt:destination-address" {
when "address-family='ipv6' and safi='nlri-unicast'" {
description
"This augment is valid only for IPv6 unicast.";
}
description
"The 'address' leaf augments the 'rt:destination-address'
parameter of the 'rt:active-route' operation.";
leaf address {
type inet:ipv6-address;
description
"IPv6 destination address.";
}
}
augment "/rt:active-route/rt:output/rt:route" {
when "address-family='ipv6' and safi='nlri-unicast'" {
description
"This augment is valid only for IPv6 unicast.";
}
description
"Contents of the reply to 'rt:active-route' operation.";
uses route-content;
}
/* Data nodes */
augment "/rt:routing/rt:router/rt:interfaces/rt:interface" {
when "/if:interfaces/if:interface[name=current()/name]/ip:ipv6/"
+ "ip:enabled='true'" {
description
"This augment is only valid for router interfaces with
enabled IPv6.
NOTE: Parameter 'is-router' is not included, it is expected
that it will be implemented by the 'ietf-ip' module.
";
}
description
"IPv6-specific parameters of router interfaces.";
container ipv6-router-advertisements {
description
"Parameters of IPv6 Router Advertisements.";
reference
"RFC 4861: Neighbor Discovery for IP version 6 (IPv6).
RFC 4862: IPv6 Stateless Address Autoconfiguration.
";
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.";
}
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.";
}
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.
Must be no greater than 0.75 * max-rtr-adv-interval.
Its default value is dynamic:
- 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.
";
}
leaf managed-flag {
type boolean;
default "false";
description
"The boolean value to be placed in the 'Managed address
configuration' flag field in the Router Advertisement.";
}
leaf other-config-flag {
type boolean;
default "false";
description
"The boolean value to be placed in the 'Other
configuration' flag field in the Router Advertisement.";
}
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.";
}
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. The
value zero means unspecified (by this router).";
}
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. The
value zero means unspecified (by this router).";
}
leaf cur-hop-limit {
type uint8;
default "64";
description
"The default value to be placed in the Cur Hop Limit field
in the Router Advertisement messages sent by the router.
The value should be set to the current diameter of the
Internet. The value zero means unspecified (by this
router).
The default should be set to the value specified in IANA
Assigned Numbers that was in effect at the time of
implementation.
";
reference
"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.
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.
The default value is dynamic and should be set to 3 *
max-rtr-adv-interval.
";
}
container prefix-list {
description
"A list of prefixes to be placed in Prefix Information
options in Router Advertisement messages sent from the
interface.
By default, all prefixes that the router advertises via
routing protocols as being on-link for the interface from
which the advertisement is sent. The link-local prefix
should not be included in the list of advertised prefixes.
";
list prefix {
key "prefix-spec";
description
"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 may 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, in seconds. The
designated value of all 1's (0xffffffff)
represents infinity.
";
}
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.";
}
leaf preferred-lifetime {
type uint32;
units "seconds";
must ". <= ../valid-lifetime" {
description
"This value must not be larger than
valid-lifetime.";
}
default "604800";
description
"The value to be 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;
default "true";
description
"The value to be placed in the Autonomous Flag
field in the Prefix Information option.";
}
}
}
}
}
}
}
augment "/rt:routing/rt:router/rt:routing-protocols/"
+ "rt:routing-protocol/rt:static-routes" {
description
"This augment defines the configuration of the 'static'
pseudo-protocol with data specific for IPv6 unicast.";
container ipv6 {
description
"Configuration of a 'static' pseudo-protocol instance
consists of a list of routes.";
list route {
key "id";
ordered-by "user";
description
"A user-ordered list of static routes.";
leaf id {
type uint32 {
range "1..max";
}
description
'Numeric identifier of the route.
It is not required that the routes be sorted according
to their "id".
';
}
leaf description {
type string;
description
"Textual description of the route.";
}
uses rt:route-content;
uses route-content {
refine "dest-prefix" {
mandatory "true";
}
}
}
}
}
augment "/rt:routing/rt:router/rt:routing-tables/rt:routing-table/"
+ "rt:routes/rt:route" {
when "../../rt:address-family='ipv6' and "
+ "../../rt:safi='nlri-unicast'" {
description
"This augment is valid only for IPv6 unicast.";
}
description
"This augment defines the content of IPv6 unicast routes.";
uses route-content;
}
}