module hc2vpp-ietf-mpls-static { namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-static"; prefix "mpls-static"; import hc2vpp-ietf-mpls { prefix mpls; } /* TODO: HC2VPP-307 - Remove workarounds for ODL bugs from ietf-mpls YANG. */ /* TODO: changed to modified version of ietf-routing that we use Set back to ietf-routing after HC2VPP-298 is resolved. */ import hc2vpp-ietf-routing { prefix "rt"; } import ietf-routing-types { prefix "rt-types"; } import ietf-inet-types { prefix inet; } import ietf-interfaces { prefix "if"; } /* Import TE generic types */ /* Yangtools has some issues with ietf-te model. There is no plan to support tunnels currently, so we simply comment this out. TODO: remove comment after following issues are resolved: https://jira.opendaylight.org/browse/MDSAL-182 https://jira.opendaylight.org/browse/YANGTOOLS-677 import ietf-te { prefix te; } */ organization "IETF MPLS Working Group"; contact "WG Web: WG List: WG Chair: Loa Andersson WG Chair: Ross Callon WG Chair: George Swallow Editor: Tarek Saad Editor: Kamran Raza Editor: Rakesh Gandhi Editor: Xufeng Liu Editor: Vishnu Pavan Beeram Editor: Himanshu Shah Editor: Igor Bryskin Editor: Xia Chen Editor: Raqib Jones Editor: Bin Wen "; description "This YANG module augments the 'ietf-routing' module with basic configuration and operational state data for MPLS static"; /* TODO: 2017-07-02 defines grouping in-segment but does not use it. Bump to newer version after HC2VPP-306 is resolved. */ revision "2017-07-02" { description "Latest revision: - Addressed MPLS-RT review comments"; reference "RFC 3031: A YANG Data Model for Static MPLS LSPs"; } typedef static-lsp-ref { type leafref { path "/rt:routing/mpls:mpls/mpls-static:static-lsps/" + "mpls-static:static-lsp/mpls-static:name"; } description "This type is used by data models that need to reference configured static LSP."; } typedef mpls-operations-type { type enumeration { enum impose-and-forward { description "Operation impose outgoing label(s) and forward to next-hop"; } enum pop-and-forward { description "Operation pop incoming label and forward to next-hop"; } enum pop-impose-and-forward { description "Operation pop incoming label, impose one or more outgoing label(s) and forward to next-hop"; } enum swap-and-forward { description "Operation swap incoming label, with outgoing label and forward to next-hop"; } enum pop-and-lookup { description "Operation pop incoming label and perform a lookup"; } } description "MPLS operations types"; } grouping path-basic_config { description "common definitions for statics"; leaf next-hop { type inet:ip-address; description "next hop IP address for the LSP"; } leaf outgoing-label { type rt-types:mpls-label; description "label value to push at the current hop for the LSP"; } leaf outgoing-interface { type if:interface-ref; description "The outgoing interface"; } } grouping path-outgoing-labels_config { description "Path outgoing labels grouping"; leaf index { type uint8 { range "0..255"; } description "Index of the label. Index 0 indicates top of the label stack"; } leaf label { type rt-types:mpls-label; description "The outgoing MPLS labels to impose"; } } grouping path-outgoing-labels { description "Path outgoing labels grouping"; container outgoing-labels { description "List of outgoing labels"; list outgoing-labels { key "index"; description "Outgoing label list"; leaf index { type leafref { path "../config/index"; } description "Index of the label. Index 0 indicates top of the label stack"; } container config { description "Configuration intended parameters"; uses path-outgoing-labels_config; } container state { config false; description "Configuration applied parameters and state"; uses path-outgoing-labels_config; } } } } grouping path-properties_config { description "MPLS path properties"; leaf path-index { type uint16; description "Path identifier"; } leaf backup-path-index { type uint16; description "Backup path identifier"; } leaf next-hop { type inet:ip-address; description "The address of the next-hop"; } leaf outgoing-interface { type if:interface-ref; description "The outgoing interface"; } leaf loadshare { type uint16; description "This value is used to compute a loadshare to perform un-equal load balancing when multiple outgoing path(s) are specified. A share is computed as a ratio of this number to the total under all configured path(s)."; } leaf role { type enumeration { enum PRIMARY { description "Path as primary traffic carrying"; } enum BACKUP { description "Path acts as backup"; } enum PRIMARY_AND_BACKUP { description "Path acts as primary and backup simultaneously"; } } description "The MPLS path role"; } } grouping static-lsp-paths { description "Static LSP path grouping"; choice out-segment { description "The MPLS out-segment type choice"; case simple-path { container simple-path { description "Simple path container"; container config { description "Holds the intended configuration"; uses path-basic_config; } container state { config false; description "Holds the state and inuse configuration"; uses path-basic_config; } } } case multiple-paths { container paths { description "List of outgoing paths"; list path { key path-index; description "The list of MPLS paths associated with the FEC"; leaf path-index { type leafref { path "../config/path-index"; } description "Index of the path"; } container config { description "Holds the intended configuration"; uses path-properties_config; } container state { config false; description "Holds the state and inuse configuration"; uses path-properties_config; } } uses path-outgoing-labels; } } } } grouping in-segment_config { description "In-segment grouping"; choice type { description "Basic FEC choice"; case ip-prefix { leaf ip-prefix { type inet:ip-prefix; description "An IP prefix"; } } case mpls-label { leaf incoming-label { type rt-types:mpls-label; description "label value on the incoming packet"; } } /* Import TE generic types */ /* Yangtools has some issues with ietf-te model. There is no plan to support tunnels currently, so we simply comment this out. TODO: remove comment after following issues are resolved: https://jira.opendaylight.org/browse/MDSAL-182 https://jira.opendaylight.org/browse/YANGTOOLS-677 case tunnel { leaf tunnel { type te:tunnel-ref; description "TE tunnel FEC mapping"; } } */ } leaf incoming-interface { type if:interface-ref; description "Optional incoming interface if FEC is restricted to traffic incoming on a specific interface"; } } grouping in-segment { description "In-segment grouping"; container in-segment { description "MPLS incoming segment"; container config { description "Holds the intended configuration"; uses in-segment_config; } container state { config false; description "Holds the state and inuse configuration"; uses in-segment_config; } } } grouping static-lsp-top_config { description "Static LSP configuration grouping"; /* TODO: 2017-07-02 defines grouping in-segment but was not used - HC2VPP-306. Added it here as it was in static-lsp-config in 2017-03-10 revision. This will probably be fixed in next version of this model. */ uses in-segment; leaf name { type string; description "name to identify the LSP"; } leaf operation { type mpls-operations-type; description "The MPLS operation to be executed on the incoming packet"; } } grouping static-lsp-top { description "common definitions for static LSPs"; container config { description "Holds the intended configuration"; uses static-lsp-top_config; } container state { config false; description "Holds the state and inuse configuration"; uses static-lsp-top_config; } } augment "/rt:routing/mpls:mpls" { description "Augmentations for MPLS Static LSPs"; container static-lsps { description "Statically configured LSPs, without dynamic signaling"; list static-lsp { key name; description "list of defined static LSPs"; leaf name { type leafref { path "../config/name"; } description "name to identify the LSP"; } uses static-lsp-top; uses static-lsp-paths; } } } }