blob: 900b498c6018c41c8b593d67dbbd2dd6063552ca [file] [log] [blame]
module openconfig-mpls-rsvp {
yang-version "1";
// namespace
namespace "http://openconfig.net/yang/rsvp";
prefix "oc-rsvp";
// import some basic types
import openconfig-inet-types { prefix inet; }
import openconfig-mpls-types { prefix oc-mplst; }
import openconfig-yang-types { prefix yang; }
import openconfig-types { prefix oc-types; }
import openconfig-extensions { prefix oc-ext; }
import openconfig-interfaces { prefix oc-if; }
// meta
organization "OpenConfig working group";
contact
"OpenConfig working group
netopenconfig@googlegroups.com";
description
"Configuration for RSVP-TE signaling, including global protocol
parameters and LSP-specific configuration for constrained-path
LSPs";
oc-ext:openconfig-version "2.4.0";
revision "2017-06-21" {
description
"Add TC bits typedef.";
reference "2.4.0";
}
revision "2017-03-22" {
description
"Add RSVP calculated-absolute-subscription-bw";
reference "2.3.0";
}
revision "2017-01-26" {
description
"Add RSVP Tspec, clarify units for RSVP, remove unused LDP";
reference "2.2.0";
}
revision "2016-12-15" {
description
"Add additional MPLS parameters";
reference "2.1.0";
}
revision "2016-09-01" {
description
"Revisions based on implementation feedback";
reference "2.0.0";
}
revision "2016-08-08" {
description
"Public release of MPLS models";
reference "1.0.1";
}
// grouping statements
grouping mpls-rsvp-soft-preemption_config {
description
"Configuration for MPLS soft preemption";
leaf enable {
type boolean;
default false;
description
"Enables soft preemption on a node.";
}
leaf soft-preemption-timeout {
type uint16 {
range 0..max;
}
default 30;
description
"Timeout value for soft preemption to revert
to hard preemption. The default timeout for
soft-preemption is 30 seconds - after which
the local system reverts to hard pre-emption.";
reference "RFC5712 MPLS-TE soft preemption";
}
}
grouping mpls-rsvp-soft-preemption {
description
"Top level group for MPLS soft preemption";
container soft-preemption {
description
"Protocol options relating to RSVP
soft preemption";
container config {
description
"Configuration parameters relating to RSVP
soft preemption support";
uses mpls-rsvp-soft-preemption_config;
}
container state {
config false;
description
"State parameters relating to RSVP
soft preemption support";
uses mpls-rsvp-soft-preemption_config;
}
}
}
grouping mpls-rsvp-hellos_config {
description
"RSVP protocol options configuration.";
leaf hello-interval {
type uint16 {
range 1000..60000;
}
units milliseconds;
default 9000;
description
"set the interval in ms between RSVP hello
messages";
reference
"RFC 3209: RSVP-TE: Extensions to RSVP for
LSP Tunnels.
RFC 5495: Description of the Resource
Reservation Protocol - Traffic-Engineered
(RSVP-TE) Graceful Restart Procedures";
}
leaf refresh-reduction {
type boolean;
default true;
description
"enables all RSVP refresh reduction message
bundling, RSVP message ID, reliable message delivery
and summary refresh";
reference
"RFC 2961 RSVP Refresh Overhead Reduction
Extensions";
}
}
grouping mpls-rsvp-hellos {
description
"Top level grouping for RSVP hellos parameters";
// TODO: confirm that the described semantics are supported
// on various implementations. Finer grain configuration
// will be vendor-specific
container hellos {
description
"Top level container for RSVP hello parameters";
container config {
description
"Configuration parameters relating to RSVP
hellos";
uses mpls-rsvp-hellos_config;
}
container state {
config false;
description
"State information associated with RSVP hellos";
uses mpls-rsvp-hellos_config;
}
}
}
grouping mpls-rsvp-subscription_config {
description
"RSVP subscription configuration";
leaf subscription {
type oc-types:percentage;
description
"percentage of the interface bandwidth that
RSVP can reserve";
}
}
grouping mpls-rsvp-subscription_state {
description
"Operational state parameters relating to the
bandwidth subscription on an interface";
leaf calculated-absolute-subscription-bw {
type uint64;
units "kbps";
description
"The calculated absolute value of the bandwidth
which is reservable to RSVP-TE on the interface
prior to any adjustments that may be made from
external sources.";
}
}
grouping mpls-rsvp-subscription {
description
"Top level group for RSVP subscription options";
container subscription {
description
"Bandwidth percentage reservable by RSVP
on an interface";
container config {
description
"Configuration parameters relating to RSVP
subscription options";
uses mpls-rsvp-subscription_config;
}
container state {
config false;
description
"State parameters relating to RSVP
subscription options";
uses mpls-rsvp-subscription_config;
uses mpls-rsvp-subscription_state;
}
}
}
grouping mpls-rsvp-graceful-restart_config {
description
"Configuration parameters relating to RSVP Graceful-Restart";
leaf enable {
type boolean;
default false;
description
"Enables graceful restart on the node.";
}
leaf restart-time {
type uint32;
description
"Graceful restart time (seconds).";
reference
"RFC 5495: Description of the Resource
Reservation Protocol - Traffic-Engineered
(RSVP-TE) Graceful Restart Procedures";
}
leaf recovery-time {
type uint32;
description
"RSVP state recovery time";
}
}
grouping mpls-rsvp-graceful-restart {
description
"Top level group for RSVP graceful-restart
parameters";
container graceful-restart {
description
"Operational state and configuration parameters relating to
graceful-restart for RSVP";
container config {
description
"Configuration parameters relating to
graceful-restart";
uses mpls-rsvp-graceful-restart_config;
}
container state {
config false;
description
"State information associated with
RSVP graceful-restart";
uses mpls-rsvp-graceful-restart_config;
}
}
}
grouping mpls-rsvp-authentication_config {
description
"RSVP authentication parameters container.";
leaf enable {
type boolean;
default false;
description
"Enables RSVP authentication on the node.";
}
leaf authentication-key {
type string {
// Juniper supports 1..16 while
// Cisco has a much bigger range, up to 60.
length "1..32";
}
description
"authenticate RSVP signaling
messages";
reference
"RFC 2747: RSVP Cryptographic Authentication";
}
}
grouping mpls-rsvp-authentication {
description
"Top level group for RSVP authentication,
as per RFC2747";
container authentication {
description
"Configuration and state parameters relating to RSVP
authentication as per RFC2747";
container config {
description
"Configuration parameters relating
to authentication";
uses mpls-rsvp-authentication_config;
}
container state {
config false;
description
"State information associated
with authentication";
uses mpls-rsvp-authentication_config;
}
}
}
grouping mpls-rsvp-protection_config {
description
"RSVP facility (link/node) protection configuration";
leaf link-protection-style-requested {
type identityref {
base oc-mplst:PROTECTION_TYPE;
}
default oc-mplst:LINK_NODE_PROTECTION_REQUESTED;
description
"Style of mpls frr protection desired:
link, link-node, or unprotected";
}
leaf bypass-optimize-interval {
type uint16;
units seconds;
description
"interval between periodic optimization
of the bypass LSPs";
// note: this is interface specific on juniper
// on iox, this is global. need to resolve.
}
// to be completed, things like enabling link protection,
// optimization times, etc.
}
grouping mpls-rsvp-link-protection {
description
"Top level group for RSVP protection";
container protection {
description
"link-protection (NHOP) related configuration";
container config {
description
"Configuration for link-protection";
uses mpls-rsvp-protection_config;
}
container state {
config false;
description
"State for link-protection";
uses mpls-rsvp-protection_config;
}
}
}
grouping mpls-rsvp-statistics {
description
"Top level grouping for RSVP protocol state";
uses mpls-rsvp-protocol-state;
}
grouping rsvp-global {
description
"Global RSVP protocol configuration";
container rsvp-te {
description
"RSVP-TE global signaling protocol configuration";
uses mpls-rsvp-session-state;
container neighbors {
description
"Configuration and state for RSVP neighbors connecting
to the device";
list neighbor {
key "address";
config false;
description
"List of RSVP neighbors of the local system";
leaf address {
type leafref {
path "../state/address";
}
description
"Reference to the address of the RSVP neighbor";
}
container state {
config false;
description
"Operational state parameters relating to the
RSVP neighbor";
uses mpls-rsvp-neighbor-state;
}
}
}
container global {
description
"Platform wide RSVP configuration and state";
uses mpls-rsvp-graceful-restart;
uses mpls-rsvp-soft-preemption;
uses mpls-rsvp-hellos;
container state {
config false;
description
"Platform wide RSVP state, including counters";
// TODO - reconcile global and per-interface
// protocol-related statistics
container counters {
config false;
description
"Platform wide RSVP statistics and counters";
uses mpls-rsvp-global-protocol-state;
uses mpls-rsvp-statistics;
}
}
}
container interface-attributes {
// interfaces, bw percentages, hello timers, etc goes here";
description
"Attributes relating to RSVP-TE enabled interfaces";
list interface {
key "interface-id";
description
"list of per-interface RSVP configurations";
leaf interface-id {
type leafref {
path "../config/interface-id";
}
description
"reference to the interface-id data";
}
container config {
description
"Configuration of per-interface RSVP parameters";
uses mpls-rsvp-interfaces-config;
}
container state {
config false;
description
"Per-interface RSVP protocol and state information";
uses mpls-rsvp-interfaces-state;
uses mpls-rsvp-interfaces-config;
container counters {
config false;
description
"Interface specific RSVP statistics and counters";
uses mpls-rsvp-protocol-state;
}
}
uses oc-if:interface-ref;
uses mpls-rsvp-interface-reservations;
uses mpls-rsvp-hellos;
uses mpls-rsvp-authentication;
uses mpls-rsvp-subscription;
uses mpls-rsvp-link-protection;
}
}
}
}
grouping rsvp-p2p-tunnel-attributes_config {
description
"properties of RSPP point-to-point paths";
leaf source {
when "/mpls/lsps/constrained-path/tunnel/config" +
"/signaling-protocol = 'PATH_SETUP_RSVP'" {
description
"When the signaling protocol is RSVP-TE ";
}
type inet:ip-address;
description
"RSVP-TE tunnel source address";
}
leaf soft-preemption {
when "/mpls/lsps/constrained-path/tunnel/config" +
"/signaling-protocol = 'PATH_SETUP_RSVP'" {
description
"When the signaling protocol is RSVP-TE ";
}
type boolean;
default false;
description
"Enables RSVP soft-preemption on this LSP";
}
uses rsvp-priorities_config;
}
grouping rsvp-priorities_config {
description
"Configuration paramters related to RSVP-TE priorities";
leaf setup-priority {
when "/mpls/lsps/constrained-path/tunnel/config" +
"/signaling-protocol = 'PATH_SETUP_RSVP'" {
description
"When the signaling protocol is RSVP-TE ";
}
type uint8 {
range 0..7;
}
default 7;
description
"RSVP-TE preemption priority during LSP setup, lower is
higher priority; default 7 indicates that LSP will not
preempt established LSPs during setup";
reference "RFC 3209 - RSVP-TE: Extensions to RSVP for
LSP Tunnels";
}
leaf hold-priority {
when "/mpls/lsps/constrained-path/tunnel/config" +
"/signaling-protocol = 'PATH_SETUP_RSVP'" {
description
"When the signaling protocol is RSVP-TE ";
}
type uint8 {
range 0..7;
}
default 0;
description
"preemption priority once the LSP is established,
lower is higher priority; default 0 indicates other LSPs
will not preempt the LSPs once established";
reference "RFC 3209 - RSVP-TE: Extensions to RSVP for
LSP Tunnels";
}
}
grouping rsvp-p2p-path-attributes_config {
description
"properties of RSPP point-to-point paths";
uses rsvp-priorities_config;
leaf retry-timer {
when "/mpls/lsps/constrained-path/tunnel/config" +
"/signaling-protocol = 'PATH_SETUP_RSVP'" {
description
"When the signaling protocol is RSVP-TE ";
}
type uint16 {
range 1..600;
}
units seconds;
description
"sets the time between attempts to establish the
LSP";
}
}
grouping mpls-rsvp-neighbor-state {
description
"State information for RSVP neighbors";
leaf address {
type inet:ip-address;
description
"Address of RSVP neighbor";
}
leaf detected-interface {
type string;
description
"Interface where RSVP neighbor was detected";
}
leaf neighbor-status {
type enumeration {
enum UP {
description
"RSVP hello messages are detected from the neighbor";
}
enum DOWN {
description
"RSVP neighbor not detected as up, due to a
communication failure or IGP notification
the neighbor is unavailable";
}
}
description
"Enumuration of possible RSVP neighbor states";
}
leaf refresh-reduction {
type boolean;
description
"Suppport of neighbor for RSVP refresh reduction";
reference
"RFC 2961 RSVP Refresh Overhead Reduction
Extensions";
}
}
grouping mpls-rsvp-session-state {
description
"State information for RSVP TE sessions";
container sessions {
description
"Enclosing container for sessions";
list session {
key "local-index";
config false;
description
"List of RSVP sessions";
leaf local-index {
type leafref {
path "../state/local-index";
}
description
"Reference to the local index for the RSVP
session";
}
uses mpls-rsvp-record-route-object-top;
container state {
description
"Operational state parameters relating to the
RSVP session";
leaf local-index {
type uint64;
description
"The index used to identify the RSVP session
on the local network element. This index is
generated by the device and is unique only
to the local network element.";
}
leaf source-address {
type inet:ip-address;
description
"Origin address of RSVP session";
}
leaf destination-address {
type inet:ip-address;
description
"Destination address of RSVP session";
}
leaf tunnel-id {
type uint16;
description
"The tunnel ID is an identifier used in the
RSVP session, which remains constant over
the life of the tunnel.";
reference "RFC 3209";
}
leaf lsp-id {
type uint16;
description
"The LSP ID distinguishes between two LSPs
originated from the same headend, and is
commonly used to distinguish RSVP sessions
during make before break operations.";
reference "RFC 3209";
}
leaf session-name {
type string;
description
"The signaled name of this RSVP session.";
}
leaf status {
type enumeration {
enum UP {
description
"RSVP session is up";
}
enum DOWN {
description
"RSVP session is down";
}
}
description
"Enumeration of RSVP session states";
}
leaf type {
type identityref {
base oc-mplst:LSP_ROLE;
}
description
"The type/role of the RSVP session, signifing
the session's role on the current device, such as
a transit session vs. an ingress session.";
}
leaf protection-requested {
type identityref {
base oc-mplst:PROTECTION_TYPE;
}
description
"The type of protection requested for the RSVP session";
}
leaf label-in {
type oc-mplst:mpls-label;
description
"Incoming MPLS label associated with this RSVP session";
}
leaf label-out {
type oc-mplst:mpls-label;
description
"Outgoing MPLS label associated with this RSVP session";
}
container sender-tspec {
description
"Operational state statistics relating to the SENDER_TSPEC
received for the RSVP session";
leaf rate {
type oc-types:ieeefloat32;
units "Bps";
description
"The rate at which the head-end device generates traffic,
expressed in bytes per second.";
reference
"RFC2210: RSVP with INTSERV";
}
leaf size {
type oc-types:ieeefloat32;
units "bytes per second";
description
"The size of the token bucket that is used to determine
the rate at which the head-end device generates traffic,
expressed in bytes per second.";
reference
"RFC2210: RSVP with INTSERV";
}
leaf peak-data-rate {
type union {
type oc-types:ieeefloat32;
type enumeration {
enum INFINITY {
description
"The head-end device has no maximum data rate.";
}
}
}
units "bytes per second";
description
"The maximum traffic generation rate that the head-end
device sends traffic at.";
reference
"RFC2210: RSVP with INTSERV";
}
}
}
}
}
} //rsvp-session-state
grouping mpls-rsvp-interfaces-config {
description
"RSVP configuration information relevant to an interface";
leaf interface-id {
type oc-if:interface-id;
description
"Identifier for the interface";
}
}
grouping mpls-rsvp-interfaces-state {
description
"RSVP state information relevant to an interface";
// Placeholder grouping
}
grouping mpls-rsvp-interface-reservations {
description
"Operational state related to interface bandwidth
reservations";
container bandwidth-reservations {
description
"Enclosing container for bandwidth reservation";
list bandwidth-reservation {
key "priority";
config false;
description
"Available and reserved bandwidth by priority on
the interface.";
leaf priority {
type leafref {
path "../state/priority";
}
description "Reference to the RSVP priority level";
}
container state {
description
"Operational state parameters relating to a
bandwidth reservation at a certain priority";
leaf priority {
type union {
type uint8 {
range 0..7;
}
type enumeration {
enum ALL {
description
"The ALL keyword represents the overall
state of the interface - i.e., the union
of all of the priority levels";
}
}
}
description
"RSVP priority level for LSPs traversing the interface";
}
leaf available-bandwidth {
type oc-mplst:bandwidth-mbps;
description
"Bandwidth currently available with the priority level,
or for the entire interface when the priority is set to
ALL";
}
leaf reserved-bandwidth {
type oc-mplst:bandwidth-mbps;
description
"Bandwidth currently reserved within the priority level,
or the sum of all priority levels when the keyword is set
to ALL";
}
leaf active-reservations-count {
type yang:gauge64;
description
"Number of active RSVP reservations in the associated
priority, or the sum of all reservations when the priority
level is set to ALL";
}
leaf highwater-mark {
type oc-mplst:bandwidth-mbps;
description
"Maximum bandwidth reserved on the interface within the
priority, or across all priorities in the case that the
priority level is set to ALL";
}
}
}
}
}
grouping mpls-rsvp-global-protocol-state {
description
"RSVP protocol statistics which may not apply
on an interface, but are significant globally.";
leaf path-timeouts {
type yang:counter64;
description
"TODO";
}
leaf reservation-timeouts {
type yang:counter64;
description
"TODO";
}
leaf rate-limited-messages {
type yang:counter64;
description
"RSVP messages dropped due to rate limiting";
}
}
grouping mpls-rsvp-protocol-state {
description
"RSVP protocol statistics and message counters";
leaf in-path-messages {
type yang:counter64;
description
"Number of received RSVP Path messages";
}
leaf in-path-error-messages {
type yang:counter64;
description
"Number of received RSVP Path Error messages";
}
leaf in-path-tear-messages {
type yang:counter64;
description
"Number of received RSVP Path Tear messages";
}
leaf in-reservation-messages {
type yang:counter64;
description
"Number of received RSVP Resv messages";
}
leaf in-reservation-error-messages {
type yang:counter64;
description
"Number of received RSVP Resv Error messages";
}
leaf in-reservation-tear-messages {
type yang:counter64;
description
"Number of received RSVP Resv Tear messages";
}
leaf in-hello-messages {
type yang:counter64;
description
"Number of received RSVP hello messages";
}
leaf in-srefresh-messages {
type yang:counter64;
description
"Number of received RSVP summary refresh messages";
}
leaf in-ack-messages {
type yang:counter64;
description
"Number of received RSVP refresh reduction ack
messages";
}
leaf out-path-messages {
type yang:counter64;
description
"Number of sent RSVP PATH messages";
}
leaf out-path-error-messages {
type yang:counter64;
description
"Number of sent RSVP Path Error messages";
}
leaf out-path-tear-messages {
type yang:counter64;
description
"Number of sent RSVP Path Tear messages";
}
leaf out-reservation-messages {
type yang:counter64;
description
"Number of sent RSVP Resv messages";
}
leaf out-reservation-error-messages {
type yang:counter64;
description
"Number of sent RSVP Resv Error messages";
}
leaf out-reservation-tear-messages {
type yang:counter64;
description
"Number of sent RSVP Resv Tear messages";
}
leaf out-hello-messages {
type yang:counter64;
description
"Number of sent RSVP hello messages";
}
leaf out-srefresh-messages {
type yang:counter64;
description
"Number of sent RSVP summary refresh messages";
}
leaf out-ack-messages {
type yang:counter64;
description
"Number of sent RSVP refresh reduction ack messages";
}
}
grouping mpls-rsvp-record-route-object-top {
description
"Top-level structure grouping for list of record route
objects.";
container record-route-objects {
description
"Enclosing container for MPLS RRO objects associated with the
traffic engineered tunnel.";
list record-route-object {
key "index";
config false;
description
"Read-only list of record route objects associated with the
traffic engineered tunnel. Each entry in the list
may contain a hop IP address, MPLS label allocated
at the hop, and the flags associated with the entry.";
leaf index {
type leafref {
path "../state/index";
}
description
"Reference to the index of the record route object.
The index is used to indicate the ordering of hops in
the path.";
}
container state {
config false;
description
"Information related to RRO objects. The hop, label, and
optional flags are present for each entry in the list.";
uses mpls-rsvp-record-route-object-state;
}
}
}
}
grouping mpls-rsvp-record-route-object-state {
description
"Grouping to hold information relating to record route
objects relevant to a traffic engineering LSP.";
leaf index {
type uint8;
description
"Index of object in the list. Used for ordering.";
}
leaf address {
type inet:ip-address;
description
"IP router hop for RRO entry";
}
leaf reported-label {
type oc-mplst:mpls-label;
description
"Label reported for RRO hop";
}
leaf reported-flags {
type uint8;
description
"Subobject flags for MPLS label";
}
}
// data definition statements
// augment statements
// rpc statements
// notification statements
}