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; } } } } } }