module openconfig-rsvp-sr-ext {
  yang-version "1";

  namespace "http://openconfig.net/yang/rsvp-sr-ext";
  prefix "oc-sr-rsvp-ext";

  import openconfig-extensions { prefix "oc-ext"; }
  import openconfig-types { prefix "oc-types"; }
  import openconfig-network-instance { prefix "oc-ni"; }

  organization
    "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This module adds extensions to the OpenConfig MPLS models to
    provide extensions which allow the coexistence of RSVP-TE and
    Segment Routing (SR) within the same network. It augments the
    existing OpenConfig segment routing (SR) and RSVP-TE models
    where required.";

  oc-ext:openconfig-version "0.1.0";

  revision 2017-03-06 {
    description
      "Initial revision.";
    reference "0.1.0";
  }

  grouping bandwidth-measurement-global-state {
    description
      "Operational state parameters for bandwidth measurement which
      apply globally to the device.";

    leaf effective-adjustment-interval {
      type uint32;
      units "seconds";
      description
        "The effective adjustment interval that is being used by
        the system. In the case that the adjustment-interval leaf
        is set to a non-integer multiple of the collection-interval,
        and the system does not support this, the value of this leaf
        should reflect the effective value of the adjustment interval
        that it has selected. In the case where no rounding of the
        adjustment interval has occurred, this value should have the
        same value as the adjustment-inerval leaf.";
    }
  }

  grouping bandwidth-measurement-global-config {
    description
      "Configuration parameters for bandwidth measurement which apply
      globally to the device.";

    leaf measure-sr-traffic {
      type boolean;
      description
        "When this leaf is set to true, the local system should
        measure the bandwidth utilisation of SR traffic on interfaces
        for which TED entries are being generated.

        In the case that this functionality is enabled, traffic
        forwarded using LFIB entries that correspond to MPLS
        labels which correspond to SR SIDs should be accounted
        for.";
      reference
        "draft-sitaraman-sr-rsvp-coexistence-rec-01";
    }

    // TODO(robjs): For future extension, traffic accounting for
    // non-SR, non-RSVP traffic could be added here. e.g., LDP,
    // BGP-LU etc.

    leaf collection-interval {
      type uint32;
      units "seconds";
      description
        "The interval at which the collection of interface
        statistics relating to non-RSVP-TE traffic should be
        performed";
      reference
        "draft-sitaraman-sr-rsvp-coexistence-rec-01";
    }

    leaf adjustment-interval {
      type uint32;
      units "seconds";
      description
        "The interval after which an adjustment to the utilised
        bandwidth on the interface is made. This value must be
        greater than, or equal to, the collection interval for
        statistics.  This value is referred to as N in
        draft-sitaraman-sr-rsvp-coexistence-rec-01.

        After N seconds have expired, the
        arithmetic mean of the samples is taken, and this is
        considered as the non-RSVP-TE utilisation of the
        interface. In the case that the adjustment interval is
        an integer >1 multiple of the collection interval, this
        serves to provide smoothing of the collected bandwidth
        statistics.";
      reference
        "draft-sitaraman-sr-rsvp-coexistence-rec-01";
    }

    leaf bandwidth-multiplier {
      type decimal64 {
        fraction-digits 4;
      }
      default 1.0000;
      description
        "A multiplier applied to the sampled bandwidth which
        determines the value that is propagated to the IGP TED.
        By default this value is 1.0000, and hence the actual
        sampled value is flooded.";
    }
  }

  grouping bandwidth-measurement-update-config {
    description
      "Configuration parameters related to when the bandwidth
      measurement information is used to update the IGP TED.";

    leaf update-trigger {
      type enumeration {
        enum ADJUSTED_MAX_RESERVABLE_PCT {
          description
            "Update of a new maximum reservable bandwidth IGP
            TLV is based on the value changing >= X% of
            the currently flooded adjusted-absolute-subscription-bw.
            The percentage of this value that is used is specified
            by the adjusted-max-reservable-bw-pct leaf.";
        }
        enum SR_TRAFFIC_PCT {
          description
            "Update of the new maximum reservable bandwidth IGP
            TLV is based on the value changing >= X% of the last
            calculated segment routing traffic utilisation for the
            interface. The percentage delta of this value is
            specified by the sr-traffic-pct leaf.";
        }
      }
      description
        "The trigger that should be used to determine when the IGP
        TED is updated with new information as to the effective
        maximum reservable bandwidth
        (adjusted-absolute-subscription-bw)";
    }

    leaf adjusted-max-reservable-bw-pct {
      when "../update-trigger = 'ADJUSTED_MAX_RESERVABLE_PCT'" {
        description
          "Only allow the adjusted-max-reservable-bw update trigger
          to be specified when the update-trigger mode is specified
          to be a percentage of the currently flooded value.";
      }
      type oc-types:percentage;
      description
        "The delta in the adjusted-max-reservable-bandwidth that
        should trigger an update in the value which is flooded
        through the IGP TED.
        The delta is measured as a percentage of the
        current adjusted value of the maximum reservable bandwidth
        of the interface, as specified by the
        adjusted-absolute-subscription-bw RSVP-TE leaf.";
      reference
        "draft-sitaraman-sr-rsvp-coexistence-rec-01";
    }

    leaf sr-traffic-pct {
      when "../update-trigger = 'SR_TRAFFIC_PCT'" {
        description
          "Only allow the SR traffic percentage trigger to be
          specified when the update trigger is defined to be a
          percentage of the last calculated SR traffic value.";
      }
      type oc-types:percentage;
      description
        "The change in the calculated SR traffic on the interface
        that should trigger an update in the value of the
        maximum reservable bandwidth flooded through the IGP TED.
        The value is specified as a percentage of the
        last-calculated-sr-traffic state leaf.";
    }
  }

  grouping bandwidth-measurement-global-structural {
    description
      "Structural grouping for the measurement of segment routing
      traffic, and its advertisement into the IGP TED.";

    container bandwidth-measurement {
      description
        "Configuration and operational state parameters related to
        how bandwidth utilisation is measured and flooded into the
        IGP.";

      container config {
        description
          "Configuration parameters relating to bandwidth
          measurement.";

        uses bandwidth-measurement-global-config;
      }

      container state {
        config false;
        description
          "Operational state parameters relating to bandwidth
          measurement";

        uses bandwidth-measurement-global-config;
        uses bandwidth-measurement-global-state;
      }

      container update-trigger {
        description
          "Configuration and operational state parameters related
          to the update trigger for flooding new bandwidth
          information into the IGP.";

        container config {
          description
            "Configuration parameters related to the bandwidth
            measurement update trigger.";

          uses bandwidth-measurement-update-config;
        }

        container state {
          config false;
          description
            "Operational state parameters related to the bandwidth
            measurement update trigger.";

          uses bandwidth-measurement-update-config;
        }
      }
    }
  }

  augment "/oc-ni:network-instances/oc-ni:network-instance/" +
          "oc-ni:mpls/oc-ni:te-global-attributes" {
    description
      "Add the bandwidth measurement parameters to MPLS global
      traffic engineering hierarchy.";

    uses bandwidth-measurement-global-structural;
  }

  grouping bandwidth-measurement-rsvp-te-adjusted-state {
    description
      "Logical grouping augmented into the RSVP-TE hierarchy to
      provide an operational state value which reflects the
      adjusted RSVP-TE available bandwidth.";

    leaf adjusted-absolute-subscription-bw {
      type uint64;
      units "kbps";
      description
        "The adjusted absolute value (in kbps) of the
        bandwidth which is reservable to RSVP-TE on the
        local system. In the case that the bandwidth-measurement
        configuration does not account for non-RSVP-TE traffic
        then this value is equal to the
        calculated-absolute-subscription-bw, in the case that
        non-RSVP-TE traffic is being accounted for, it is lower
        such that calculated-absolute-subscription-bw -
        adjusted-absolute-subscription-bw = the current calculated
        non-RSVP-TE traffic.

        This value reflects the last flooded value of the maximum
        reservable bandwidth, or subscription.";
    }
  }

  augment "/oc-ni:network-instances/oc-ni:network-instance/" +
    "oc-ni:mpls/oc-ni:signaling-protocols/oc-ni:rsvp-te/" +
    "oc-ni:interface-attributes/oc-ni:interface/" +
    "oc-ni:subscription/oc-ni:state" {

    description
      "Augmentation to add the adjusted RSVP-TE available bandwidth
      state to the RSVP-TE signaling protocol.";

    uses bandwidth-measurement-rsvp-te-adjusted-state;
  }

  grouping bandwidth-measurement-intf-structural {
    description
      "Structural grouping containing interface bandwidth
      measurement configuration and operational state
      parameters.";

    container bandwidth-measurement {
      description
        "Configuration and operational state parameters relating to
        per-interface bandwidth measurement. These parameters are
        used in the case that RSVP-TE coexists with other MPLS
        signaling protocols on an interface.";

      container state {
        config false;
        description
          "Operational state parameters relating to the containing
          interface's bandwidth measurement.";

        uses bandwidth-measurement-intf-state;
      }
    }
  }

  grouping bandwidth-measurement-intf-state {
    description
      "Operational state parameters per-interface for the measured
      bandwidth on an interface";

    leaf last-sample-time {
      type oc-types:timeticks64;
      description
        "The time at which the last sample of bandwidth utilisation
        for both RSVP-TE and non-RSVP-TE traffic was taken. This value
        is represented in nanoseconds since the Unix epoch.";
    }

    leaf last-sample-measured-rsvp-util {
      type uint64;
      units "kbps";
      description
        "The measured RSVP-TE bandwidth utilisation at the last sample
        (whose time is indicated in last-sample-time). This value is
        expressed as a 64-bit unsigned integer representing the number
        of kilobits per second that RSVP-TE traffic is consuming on
        the interface.";
    }

    leaf last-sample-measured-sr-util {
      type uint64;
      units "kbps";
      description
        "The measured Segment Routing bandwidth utilisation at the
        last sample (whose time is indicated in last-sample-time).
        This value is expressed as a 64-bit unsigned integer
        representing the number of kilobits per second that Segment
        Routing traffic is consuming on the interface.";
    }

    leaf last-calculated-time {
      type oc-types:timeticks64;
      description
        "The time at which the last calculated value for bandwidth
        utilisation was performed.";
    }

    leaf last-calculated-sr-utilisation {
      type uint64;
      description
        "The last calculated value of the Segment Routing  utilisation
        (taken post any averaging or adjustment that occurs). This
        value is updated regardless of whether the value was flooded
        or not.";
    }

    leaf last-flooded-time {
      type oc-types:timeticks64;
      description
        "The time, expressed in nanoseconds since the epoch, at which
        the bandwidth utilisation of non-RSVP-TE traffic resulted in
        the value being flooded in the IGP. If the configuration of the
        local system specifies a 0% change requires flooding, this leaf
        will always reflect the value of the last-calculated-time. In
        systems that have suppression due to a >0% delta being required
        then it indicates the last time that the percentage threshold
        was exceeded.";
    }
  }

  augment "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:mpls" +
          "/oc-ni:te-interface-attributes/oc-ni:interface" {
    description
      "Augment the per-interface bandwidth measurement parameters into the
      MPLS hierarchy of network instance.";

    uses bandwidth-measurement-intf-structural;
  }
}
