module openconfig-mpls {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/mpls";

  prefix "oc-mpls";


  // import some basic types
  import openconfig-mpls-types { prefix oc-mplst; }
  import openconfig-mpls-rsvp { prefix oc-rsvp; }
  import openconfig-mpls-ldp { prefix oc-ldp; }
  import openconfig-types { prefix oc-types; }
  import openconfig-interfaces { prefix oc-if; }
  import openconfig-extensions { prefix oc-ext; }
  import openconfig-segment-routing { prefix oc-sr; }

  // include submodules
  include openconfig-mpls-te;
  include openconfig-mpls-igp;
  include openconfig-mpls-static;


  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    netopenconfig@googlegroups.com";

  description
    "This module provides data definitions for configuration of
    Multiprotocol Label Switching (MPLS) and associated protocols for
    signaling and traffic engineering.

    RFC 3031: Multiprotocol Label Switching Architecture

    The MPLS / TE data model consists of several modules and
    submodules as shown below.  The top-level MPLS module describes
    the overall framework.  Three types of LSPs are supported:

    i) traffic-engineered (or constrained-path)

    ii) IGP-congruent (LSPs that follow the IGP path)

    iii) static LSPs which are not signaled

    The structure of each of these LSP configurations is defined in
    corresponding submodules.  Companion modules define the relevant
    configuration and operational data specific to key signaling
    protocols used in operational practice.


                              +-------+
            +---------------->| MPLS  |<--------------+
            |                 +-------+               |
            |                     ^                   |
            |                     |                   |
       +----+-----+      +--------+-------+     +-----+-----+
       | TE LSPs  |      | IGP-based LSPs |     |static LSPs|
       |          |      |                |     |           |
       +----------+      +----------------+     +-----------+
           ^  ^                    ^  ^
           |  +----------------+   |  +--------+
           |                   |   |           |
           |   +------+      +-+---+-+      +--+--+
           +---+ RSVP |      |SEGMENT|      | LDP |
               +------+      |ROUTING|      +-----+
                             +-------+
    ";

  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-admin-group_config {
    description
      "configuration data for MPLS link admin groups";

      leaf admin-group-name {
        type string;
        description
          "name for mpls admin-group";
      }

      leaf bit-position {
        type uint32;
        description
          "bit-position value for mpls admin-group. The value
           for the admin group is an integer that represents one
           of the bit positions in the admin-group bitmask. Values
           between 0 and 31 are interpreted as the original limit
           of 32 admin groups. Values >=32 are interpreted as
           extended admin group values as per RFC7308.";
      }

  }

  grouping mpls-admin-groups-top {

    description
      "top-level mpls admin-groups config
      and state containers";

    container mpls-admin-groups {
      description
        "Top-level container for admin-groups configuration
        and state";

      list admin-group {
        key "admin-group-name";
        description
          "configuration of value to name mapping
          for mpls affinities/admin-groups";

        leaf admin-group-name {
          type leafref {
            path "../config/admin-group-name";
          }
          description
            "name for mpls admin-group";
        }
        container config {
          description
            "Configurable items for admin-groups";
          uses mpls-admin-group_config;
        }

        container state {
          config false;
          description
            "Operational state for admin-groups";
          uses mpls-admin-group_config;
        }
      }
    }
  }

  grouping mpls-te-igp-flooding-bandwidth_config {
    description
      "Configurable items for igp flooding bandwidth
      threshold configuration.";
    leaf threshold-type {
      type enumeration {
        enum DELTA {
          description
            "DELTA indicates that the local
            system should flood IGP updates when a
            change in reserved bandwidth >= the specified
            delta occurs on the interface.";
        }
        enum THRESHOLD_CROSSED {
          description
            "THRESHOLD-CROSSED indicates that
            the local system should trigger an update (and
            hence flood) the reserved bandwidth when the
            reserved bandwidth changes such that it crosses,
            or becomes equal to one of the threshold values.";
        }
      }
      description
        "The type of threshold that should be used to specify the
        values at which bandwidth is flooded. DELTA indicates that
        the local system should flood IGP updates when a change in
        reserved bandwidth >= the specified delta occurs on the
        interface. Where THRESHOLD_CROSSED is specified, the local
        system should trigger an update (and hence flood) the
        reserved bandwidth when the reserved bandwidth changes such
        that it crosses, or becomes equal to one of the threshold
        values";
    }

    leaf delta-percentage {
      when "../threshold-type = 'DELTA'" {
        description
          "The percentage delta can only be specified when the
          threshold type is specified to be a percentage delta of
          the reserved bandwidth";
      }
      type oc-types:percentage;
      description
        "The percentage of the maximum-reservable-bandwidth
        considered as the delta that results in an IGP update
        being flooded";
    }

    leaf threshold-specification {
      when "../threshold-type = 'THRESHOLD_CROSSED'" {
        description
          "The selection of whether mirrored or separate threshold
          values are to be used requires user specified thresholds to
          be set";
      }
      type enumeration {
        enum MIRRORED_UP_DOWN {
          description
            "MIRRORED_UP_DOWN indicates that a single set of
            threshold values should be used for both increasing
            and decreasing bandwidth when determining whether
            to trigger updated bandwidth values to be flooded
            in the IGP TE extensions.";
        }
        enum SEPARATE_UP_DOWN {
          description
            "SEPARATE_UP_DOWN indicates that a separate
            threshold values should be used for the increasing
            and decreasing bandwidth when determining whether
            to trigger updated bandwidth values to be flooded
            in the IGP TE extensions.";
        }
      }
      description
        "This value specifies whether a single set of threshold
        values should be used for both increasing and decreasing
        bandwidth when determining whether to trigger updated
        bandwidth values to be flooded in the IGP TE extensions.
        MIRRORED-UP-DOWN indicates that a single value (or set of
        values) should be used for both increasing and decreasing
        values, where SEPARATE-UP-DOWN specifies that the increasing
        and decreasing values will be separately specified";
    }

    leaf-list up-thresholds {
      when "../threshold-type = 'THRESHOLD_CROSSED'" +
        "and ../threshold-specification = 'SEPARATE_UP_DOWN'" {
          description
            "A list of up-thresholds can only be specified when the
            bandwidth update is triggered based on crossing a
            threshold and separate up and down thresholds are
            required";
        }
      type oc-types:percentage;
      description
        "The thresholds (expressed as a percentage of the maximum
        reservable bandwidth) at which bandwidth updates are to be
        triggered when the bandwidth is increasing.";
    }

    leaf-list down-thresholds {
      when "../threshold-type = 'THRESHOLD_CROSSED'" +
        "and ../threshold-specification = 'SEPARATE_UP_DOWN'" {
          description
            "A list of down-thresholds can only be specified when the
            bandwidth update is triggered based on crossing a
            threshold and separate up and down thresholds are
            required";
        }
      type oc-types:percentage;
      description
        "The thresholds (expressed as a percentage of the maximum
        reservable bandwidth) at which bandwidth updates are to be
        triggered when the bandwidth is decreasing.";
    }

    leaf-list up-down-thresholds {
      when "../threshold-type = 'THRESHOLD_CROSSED'" +
        "and ../threshold-specification = 'MIRRORED_UP_DOWN'" {
          description
            "A list of thresholds corresponding to both increasing
            and decreasing bandwidths can be specified only when an
            update is triggered based on crossing a threshold, and
            the same up and down thresholds are required.";
        }
      type oc-types:percentage;
      description
        "The thresholds (expressed as a percentage of the maximum
        reservable bandwidth of the interface) at which bandwidth
        updates are flooded - used both when the bandwidth is
        increasing and decreasing";
    }
  }


  grouping  mpls-te-igp-flooding-bandwidth {
    description
      "Top level group for traffic engineering
      database flooding options";
    container igp-flooding-bandwidth {
      description
        "Interface bandwidth change percentages
        that trigger update events into the IGP traffic
        engineering database (TED)";
      container config {
        description
          "Configuration parameters for TED
          update threshold ";
        uses  mpls-te-igp-flooding-bandwidth_config;
      }
      container state {
        config false;
        description
          "State parameters for TED update threshold ";
        uses  mpls-te-igp-flooding-bandwidth_config;
      }
    }
  }


  grouping te-lsp-delay_config {
    description
      "Group for the timers goerning the delay
      in installation and cleanup of TE LSPs";

    leaf install-delay {
      type uint16 {
        range 0..3600;
      }
      units seconds;
      description
        "delay the use of newly installed te lsp for a
        specified amount of time.";
    }

    leaf cleanup-delay {
      type uint16;
      units seconds;
      description
        "delay the removal of old te lsp for a specified
        amount of time";
    }
  }

  grouping te-interface-attributes-top {
    description
      "Top level grouping for attributes
      for TE interfaces.";

    list interface {
      key "interface-id";
      description
        "List of TE interfaces";

      leaf interface-id {
        type leafref {
          path "../config/interface-id";
        }
        description
          "Reference to the interface id list key";
      }

      container config {
        description
          "Configuration parameters related to TE interfaces:";
        uses te-interface-attributes_config;
      }

      container state {
        config false;
        description
          "State parameters related to TE interfaces";
        uses te-interface-attributes_config;
      }

      uses oc-if:interface-ref;

      uses  mpls-te-igp-flooding-bandwidth;
    }
  }

  grouping te-interface-attributes_config {
    description
      "global level definitions for interfaces
      on which TE is run";

    leaf interface-id {
      type oc-if:interface-id;
      description
        "Id of the interface";
    }

    leaf te-metric {
      type uint32;
      description
        "TE specific metric for the link";
    }

    leaf-list srlg-membership {
      type leafref {
          path "../../../../te-global-attributes/srlgs/srlg/name";
      }
      description
        "list of references to named shared risk link groups that the
        interface belongs to.";
    }

    leaf-list admin-group {
      type string;
      description
        "list of admin groups (by name) on the interface";
    }
  }

  grouping mpls-te-lsp-timers {
    description
      "Grouping for traffic engineering timers";
    container te-lsp-timers {
      description
        "Definition for delays associated with setup
        and cleanup of TE LSPs";

      container config {
        description
          "Configuration parameters related
          to timers for TE LSPs";

        uses te-lsp-delay_config;
        uses te-tunnel-reoptimize_config;
      }

      container state {
        config false;
        description
          "State related to timers for TE LSPs";

        uses te-lsp-delay_config;
        uses te-tunnel-reoptimize_config;
      }
    }
  }

  grouping mpls-global_config {
    description
      "Definition of global MPLS configuration parameters";

    leaf null-label {
      type identityref {
        base oc-mplst:NULL_LABEL_TYPE;
      }
      default oc-mplst:IMPLICIT;
      description
        "The null-label type used, implicit or explicit";
    }
  }

 grouping mpls-global-top {
    description
      "Top level grouping for global MPLS configuration ";

      container config {
        description
          "Top level global MPLS configuration";
        uses mpls-global_config;
      }

      container state {
        config false;
        description
          "Top level global MPLS state";
        uses mpls-global_config;
      }
 }

 grouping mpls-interfaces-top {
    description
      "Top level grouping for attributes
      for MPLS-enabled interfaces.";
    container interface-attributes {
      description
        "Parameters related to MPLS interfaces";
      list interface {
        key "interface-id";
        description
          "List of TE interfaces";

        leaf interface-id {
          type leafref {
            path "../config/interface-id";
          }
          description
            "Reference to the interface id list key";
        }

        container config {
          description
            "Configuration parameters related to MPLS interfaces:";
          uses mpls-interface-attributes-config;
        }

        container state {
          config false;
          description
            "State parameters related to TE interfaces";
          uses mpls-interface-attributes-config;
        }

        uses oc-if:interface-ref;
      }
    }
  }

  grouping mpls-interface-attributes-config {
    description
      "global level definitions for interfaces
      on which MPLS is run";

    leaf interface-id {
      type oc-if:interface-id;
      description
        "Indentifier for the MPLS interface";
    }

    leaf mpls-enabled {
      type boolean;
      default false;
      description
        "Enable MPLS forwarding on this interface";
    }
  }

  grouping mpls-label-block-config {
    description
      "Configuration parameters relating to an MPLS label block.";

    leaf local-id {
      type string;
      description
        "A local identifier for the global label block allocation.";
    }

    leaf lower-bound {
      type oc-mplst:mpls-label;
      description
        "Lower bound of the global label block. The block is defined to include
        this label.";
    }

    leaf upper-bound {
      type oc-mplst:mpls-label;
      description
        "Upper bound for the global label block. The block is defined to include
        this label.";
    }
  }

  grouping mpls-label-blocks-top {
    description
      "Top-level configuration and operational state parameters corresponding
      to reserved label blocks.";

    container reserved-label-blocks {
      description
        "A range of labels starting with the start-label and up-to and including
        the end label that should be allocated as reserved. These labels should
        not be utilised by any dynamic label allocation on the local system unless
        the allocating protocol is explicitly configured to specify that
        allocation of labels should be out of the label block specified.";

      list reserved-label-block {
        key "local-id";

        description
          "A range of labels starting with the start-label up to and including
          the end label that should be allocated for use by a specific protocol.";

        leaf local-id {
          type leafref {
            path "../config/local-id";
          }
          description
            "A reference to a unique local identifier for this label block.";
        }

        container config {
          description
            "Configuration parameters relating to the label block.";

          uses mpls-label-block-config;
        }

        container state {
          config false;
          description
            "State parameters relating to the label block.";

          uses mpls-label-block-config;
        }
      }
    }
  }

  grouping mpls-top {
    description
      "Top level grouping for MPLS configuration and state";

    container mpls {
      description
        "Anchor point for mpls configuration and operational
        data";

      container global {
        // entropy label support, label ranges will be added here.
       description
        "general mpls configuration applicable to any
        type of LSP and signaling protocol - label ranges,
        entropy label supportmay be added here";
       uses mpls-global-top;
       uses mpls-interfaces-top;
       uses mpls-label-blocks-top;
      }

      container te-global-attributes {
        description
          "traffic-engineering global attributes";
        uses mpls-te-srlg-top;
        uses mpls-admin-groups-top;
        uses mpls-te-lsp-timers;
      }

      container te-interface-attributes {
        description
          "traffic engineering attributes specific
          for interfaces";
        uses te-interface-attributes-top;
      }

      container signaling-protocols {
        description
          "top-level signaling protocol configuration";

        uses oc-rsvp:rsvp-global;
        uses oc-ldp:ldp-global;
        uses oc-sr:sr-mpls-top;
      }

      container lsps {
        description
          "LSP definitions and configuration";

        container constrained-path {
          description
            "traffic-engineered LSPs supporting different
            path computation and signaling methods";
          uses explicit-paths_top;
          uses te-tunnels_top;
        }

        container unconstrained-path {
          description
            "LSPs that use the IGP-determined path, i.e., non
            traffic-engineered, or non constrained-path";

          uses igp-lsp-common;
          uses igp-lsp-setup;
        }

        container static-lsps {
          description
            "statically configured LSPs, without dynamic
            signaling";

          uses static-lsp-top;
        }
      }
    }
  }

  uses mpls-top;

  // augment statements

  // rpc statements

  // notification statements
}
