From f0aa3570bb2f9500f7f15fada318f8f50e706b15 Mon Sep 17 00:00:00 2001 From: Hesam Rahimi Date: Thu, 5 Mar 2020 21:19:20 +0000 Subject: Adding required ietf YANG models to support OTN tunnel as part of SOTN NNI-based service creation. Issue-ID: SDNC-900 Signed-off-by: Hesam Rahimi Change-Id: I759c914392853fbbe4d886632b377d8bdf41da1b Former-commit-id: 499540a9082542b47b1e6caf2ed411b44977fbc7 --- .../main/yang/sotn/ietf-otn-tunnel@2018-06-07.yang | 837 +++++++++++++++++++++ 1 file changed, 837 insertions(+) create mode 100644 platform-logic/restconfapi-yang/src/main/yang/sotn/ietf-otn-tunnel@2018-06-07.yang (limited to 'platform-logic/restconfapi-yang/src/main/yang/sotn/ietf-otn-tunnel@2018-06-07.yang') diff --git a/platform-logic/restconfapi-yang/src/main/yang/sotn/ietf-otn-tunnel@2018-06-07.yang b/platform-logic/restconfapi-yang/src/main/yang/sotn/ietf-otn-tunnel@2018-06-07.yang new file mode 100644 index 00000000..2c24a6fb --- /dev/null +++ b/platform-logic/restconfapi-yang/src/main/yang/sotn/ietf-otn-tunnel@2018-06-07.yang @@ -0,0 +1,837 @@ +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; + } + } + } + } + } +} -- cgit 1.2.3-korg