module ietf-otn-tunnel {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-otn-tunnel";
prefix "otn-tunnel";
import ietf-te {
prefix "te";
}
import ietf-otn-types {
prefix "otn-types";
}
import ietf-te-types {
prefix "te-types";
}
import ietf-inet-types {
prefix "inet";
}
organization
"IETF CCAMP Working Group";
contact
"WG Web:
WG List:
Editor: Haomian Zheng
Editor: Aihua Guo
Editor: Italo Busi
Editor: Anurag Sharma
Editor: Rajan Rao
Editor: Sergio Belotti
Editor: Victor Lopez
Editor: Yunbo Li
Editor: Yunbin Xu
";
description
"This module defines a model for OTN Tunnel Services.";
revision "2018-06-07" {
description
"Revision 0.5";
reference
"draft-ietf-ccamp-otn-tunnel-model-02";
}
/*
* Groupings
*/
grouping otn-tunnel-endpoint {
description "Parameters for OTN tunnel";
leaf payload-treatment {
type enumeration {
enum switching {
description "Client signal is switched to another tunnel
in this domain";
}
enum transport {
description "Client signal is transparently transmitted
in this domain";
}
}
default switching;
description
"Treatment of the incoming payload. Payload can be switched
or transported.";
}
leaf src-client-signal {
type identityref {
base otn-types:client-signal;
}
description
"Client signal at the source endpoint of the tunnel";
}
leaf src-tpn {
type uint16 {
range "0..4095";
}
description
"Tributary Port Number. Applicable in case of mux services";
reference
"RFC7139: GMPLS Signaling Extensions for Control of Evolving
G.709 Optical Transport Networks";
}
leaf src-tsg {
type identityref {
base otn-types:tributary-slot-granularity;
}
description
"Tributary slot granularity.
Applicable in case of mux services";
reference
"G.709/Y.1331, February 2016: Interfaces for the
Optical Transport Network (OTN)";
}
leaf src-tributary-slot-count {
type uint16;
description
"Number of tributary slots used at the source.";
}
container src-tributary-slots {
description
"A list of tributary slots used by the client service.
Applicable in case of mux services";
leaf-list values {
type uint8;
description
"Tributary tributary slot value";
reference
"G.709/Y.1331, February 2016: Interfaces for the
Optical Transport Network (OTN)";
}
}
leaf dst-client-signal {
type identityref {
base otn-types:client-signal;
}
description
"Client signal at the destination endpoint of the tunnel";
}
leaf dst-tpn {
type uint16 {
range "0..4095";
}
description
"Tributary Port Number. Applicable in case of mux services";
reference
"RFC7139: GMPLS Signaling Extensions for Control of Evolving
G.709 Optical Transport Networks.";
}
leaf dst-tsg {
type identityref {
base otn-types:tributary-slot-granularity;
}
description
"Tributary slot granularity.
Applicable in case of mux services";
reference
"G.709/Y.1331, February 2016: Interfaces for the
Optical Transport Network (OTN)";
}
leaf dst-tributary-slot-count {
type uint16;
description
"Number of tributary slots used at the destination.";
}
container dst-tributary-slots {
description
"A list of tributary slots used by the client service.
Applicable in case of mux services";
leaf-list values {
type uint8;
description
"Tributary slot value";
reference
"G.709/Y.1331, February 2016: Interfaces for the
Optical Transport Network (OTN)";
}
}
}
/*
Note: Comment has been given to authors of TE Tunnel model to add
list of endpoints under config to support P2MP tunnel.
*/
/*
* Data nodes
*/
augment "/te:te/te:tunnels/te:tunnel" {
description
"Augment with additional parameters required for OTN service";
uses otn-tunnel-endpoint;
}
/*
* Augment TE bandwidth
*/
/* Augment bandwidth of named-path-constraints */
augment "/te:te/te:globals/te:named-path-constraints/"
+ "te:named-path-constraint/"
+ "te:te-bandwidth/te:technology" {
description "OTN bandwidth.";
case otn {
uses otn-types:otn-path-bandwidth;
}
}
/* Augment bandwdith of tunnel */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:te-bandwidth/te:technology" {
description "OTN bandwidth.";
case otn {
uses otn-types:otn-path-bandwidth;
}
}
/* Augment bandwidth of primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:te-bandwidth/te:technology" {
description "OTN bandwidth.";
case otn {
uses otn-types:otn-path-bandwidth;
}
}
/* Augment bandwidth of reverse primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:p2p-reverse-primary-path/"
+ "te:te-bandwidth/te:technology" {
description "OTN bandwidth.";
case otn {
uses otn-types:otn-path-bandwidth;
}
}
/* Augment bandwidht of secondary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-secondary-paths/te:p2p-secondary-path/"
+ "te:te-bandwidth/te:technology" {
description "OTN bandwidth.";
case otn {
uses otn-types:otn-path-bandwidth;
}
}
/*
* Augment TE label.
*/
/* Augment label hop of route-object-exclude-always of named-path-constraints */
augment "/te:te/te:globals/te:named-path-constraints/"
+ "te:named-path-constraint/te:explicit-route-objects/"
+ "te:route-object-exclude-always/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-object-include-exclude of named-path-constraints */
augment "/te:te/te:globals/te:named-path-constraints/"
+ "te:named-path-constraint/te:explicit-route-objects/"
+ "te:route-object-include-exclude/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-object-exclude-always of primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:explicit-route-objects/"
+ "te:route-object-exclude-always/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-object-include-exclude of primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:explicit-route-objects/"
+ "te:route-object-include-exclude/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-exclude of primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:optimizations/te:algorithm/te:metric/"
+ "te:optimization-metric/te:explicit-route-exclude-objects/"
+ "te:route-object-exclude-object/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-include of primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:optimizations/te:algorithm/te:metric/"
+ "te:optimization-metric/te:explicit-route-include-objects/"
+ "te:route-object-include-object/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of path-route of primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:state/te:path-properties/"
+ "te:path-route-objects/te:path-computed-route-object/"
+ "te:state/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/*
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:state/te:lsps/te:lsp/te:record-route-subobjects/"
+ "te:record-route-subobject/"
+ "te:state/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
*/
/* Augment label hop of path-route of primary LSP */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:state/te:lsps/te:lsp/te:path-properties/"
+ "te:path-route-objects/te:path-computed-route-object/"
+ "te:state/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-object-exclude-always of reverse primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:p2p-reverse-primary-path/"
+ "te:explicit-route-objects/"
+ "te:route-object-exclude-always/"
+ "te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-object-include-exclude of reverse primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:p2p-reverse-primary-path/"
+ "te:explicit-route-objects/"
+ "te:route-object-include-exclude/"
+ "te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-exclude of reverse primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:p2p-reverse-primary-path/"
+ "te:optimizations/te:algorithm/te:metric/"
+ "te:optimization-metric/te:explicit-route-exclude-objects/"
+ "te:route-object-exclude-object/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-include of reverse primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:p2p-reverse-primary-path/"
+ "te:optimizations/te:algorithm/te:metric/"
+ "te:optimization-metric/te:explicit-route-include-objects/"
+ "te:route-object-include-object/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of label hop of path-route of reverse primary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:p2p-reverse-primary-path/"
+ "te:state/te:path-properties/"
+ "te:path-route-objects/te:path-computed-route-object/"
+ "te:state/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/*
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:p2p-reverse-primary-path/"
+ "te:state/te:lsps/te:lsp/te:lsp-record-route-subobjects/"
+ "te:record-route-subobject/"
+ "te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
*/
/* Augment label hop of path-route of reverse primary LSP */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-primary-paths/te:p2p-primary-path/"
+ "te:p2p-reverse-primary-path/"
+ "te:state/te:lsps/te:lsp/te:path-properties/"
+ "te:path-route-objects/te:path-computed-route-object/"
+ "te:state/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-object-exclude-always of secondary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-secondary-paths/te:p2p-secondary-path/"
+ "te:explicit-route-objects/"
+ "te:route-object-exclude-always/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-object-include-exclude of secondary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-secondary-paths/te:p2p-secondary-path/"
+ "te:explicit-route-objects/"
+ "te:route-object-include-exclude/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-exclude of secondary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-secondary-paths/te:p2p-secondary-path/"
+ "te:optimizations/te:algorithm/te:metric/"
+ "te:optimization-metric/te:explicit-route-exclude-objects/"
+ "te:route-object-exclude-object/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of route-include of secondary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-secondary-paths/te:p2p-secondary-path/"
+ "te:optimizations/te:algorithm/te:metric/"
+ "te:optimization-metric/te:explicit-route-include-objects/"
+ "te:route-object-include-object/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/* Augment label hop of label hop of path-route of secondary path */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-secondary-paths/te:p2p-secondary-path/"
+ "te:state/te:path-properties/te:path-route-objects/"
+ "te:path-computed-route-object/te:state/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/*
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-secondary-paths/te:p2p-secondary-path/"
+ "te:state/te:lsps/te:lsp/te:lsp-record-route-subobjects/"
+ "te:record-route-subobject/"
+ "te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
*/
/* Augment label hop of path-route of secondary LSP */
augment "/te:te/te:tunnels/te:tunnel/"
+ "te:p2p-secondary-paths/te:p2p-secondary-path/"
+ "te:state/te:lsps/te:lsp/te:path-properties/"
+ "te:path-route-objects/"
+ "te:path-computed-route-object/te:state/te:type/te:label/"
+ "te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
/*
augment "/te:te/te:lsp-state/"
+ "te:lsp-record-route-subobjects/te:lsp-record-route-subobject/"
+ "te:record-route-subobject/"
+ "te:type/te:label/te:label-hop/te:te-label/te:technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
*/
grouping p2p-path-ero {
description
"TE tunnel ERO configuration grouping";
leaf te-default-metric {
type uint32;
description
"Traffic engineering metric.";
}
leaf te-delay-metric {
type uint32;
description
"Traffic engineering delay metric.";
}
leaf te-hop-metric {
type uint32;
description
"Traffic engineering hop metric.";
}
container explicit-route-objects {
description "Explicit route objects container";
list explicit-route-object {
key "index";
description
"List of explicit route objects";
leaf explicit-route-usage {
type identityref {
base te-types:route-usage-type;
}
description "An explicit-route hop action.";
}
uses te-types:explicit-route-hop {
augment "type/label/label-hop/te-label/technology" {
description "OTN label.";
case otn {
uses otn-types:otn-path-label;
}
}
}
}
}
}
rpc otn-te-tunnel-path-compute {
description "OTN TE tunnel path computation";
input {
list request {
key "id";
description "A list of path computation requests.";
leaf id {
type uint8;
description
"Request ID.";
}
leaf type {
type identityref {
base te-types:tunnel-type;
}
description "TE tunnel type.";
}
leaf source {
type inet:ip-address;
description
"TE tunnel source address.";
}
leaf destination {
type inet:ip-address;
description
"TE tunnel destination address";
}
leaf src-tp-id {
type binary;
description
"TE tunnel source termination point identifier.";
}
leaf dst-tp-id {
type binary;
description
"TE tunnel destination termination point identifier.";
}
leaf switching-layer {
type identityref {
base te-types:switching-capabilities;
}
description
"Switching layer where the requests are computed.";
}
leaf encoding {
type identityref {
base te-types:lsp-encoding-types;
}
description "LSP encoding type";
}
leaf protection-type {
type identityref {
base te-types:lsp-protection-type;
}
description "LSP protection type";
}
leaf restoration-type {
type identityref {
base te-types:lsp-restoration-type;
}
description "LSP restoration type";
}
leaf provider-id {
type te-types:te-global-id;
description
"An identifier to uniquely identify a provider.";
}
leaf client-id {
type te-types:te-global-id;
description
"An identifier to uniquely identify a client.";
}
leaf te-topology-id {
type te-types:te-topology-id;
description
"It is presumed that a datastore will contain many
topologies. To distinguish between topologies it is
vital to have UNIQUE topology identifiers.";
}
leaf setup-priority {
type uint8 {
range "0..7";
}
description
"TE LSP setup priority";
}
leaf hold-priority {
type uint8 {
range "0..7";
}
description
"TE LSP hold priority";
}
leaf te-path-metric-type {
type identityref {
base te-types:path-metric-type;
}
default te-types:path-metric-te;
description
"The tunnel path metric type.";
}
leaf odu-type {
type identityref{
base otn-types:tributary-protocol-type;
}
description "Type of ODU";
}
container p2p-primary-paths {
description "Set of P2P primary paths container";
list p2p-primary-path {
key "name";
description
"List of primary paths for this tunnel.";
leaf name {
type string;
description "TE path name";
}
uses p2p-path-ero;
}
}
container p2p-secondary-paths {
description "Set of P2P secondary paths container";
list p2p-secondary-path {
key "name";
description
"List of secondary paths for this tunnel.";
leaf name {
type string;
description "TE path name";
}
uses p2p-path-ero;
}
}
uses otn-tunnel-endpoint;
}
}
output {
leaf return-code {
type enumeration {
enum success {
description "success";
}
enum aborted {
description "aborted";
}
enum destination-not-found {
description "destination-not-found";
}
enum invalid-argument {
description "invalid-argument";
}
enum no-memory {
description "no-memory";
}
enum no-path-found {
description "no-path-found";
}
enum other-error {
description "other-error";
}
enum some-path-not-found {
description "some-path-not-found";
}
enum source-not-found {
description "source-not-found";
}
enum topology-error {
description "topology-error";
}
}
description
"Return code";
}
list result {
key "id";
description
"A list of results for all requests.";
leaf id {
type uint8;
description
"Request ID";
}
container p2p-primary-paths {
description "Set of P2P primary paths container";
list p2p-primary-path {
key "name";
description
"List of resultant primary paths for this tunnel.";
leaf name {
type string;
description "TE path name";
}
uses p2p-path-ero;
}
}
container p2p-secondary-paths {
description "Set of P2P secondary paths container";
list p2p-secondary-path {
key "name";
description
"List of resultant secondary paths for this tunnel.";
leaf name {
type string;
description "TE path name";
}
uses p2p-path-ero;
}
}
}
}
}
}