module openconfig-segment-routing {

  yang-version "1";

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

  // import some basic types
  import openconfig-extensions { prefix "oc-ext"; }
  import openconfig-mpls-types { prefix "oc-mpls-t"; }
  import openconfig-interfaces { prefix "oc-if"; }
  import ietf-inet-types { prefix "inet"; }
  import ietf-yang-types { prefix "yang"; }

  // meta
  organization "OpenConfig working group";

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

  description
    "Configuration and operational state parameters relating to the
    segment routing. This module defines a number of elements which are
    instantiated in multiple places throughout the OpenConfig collection
    of models.

    Particularly:
      - SRGB+LB dataplane instances - directly instantied by SR.
      - SRGB+LB dataplane reservations - instantiated within MPLS and future SR
                                      dataplanes.
      - SR SID advertisements - instantiated within the relevant IGP.
      - SR-specific counters - instantied within the relevant dataplane.";

  oc-ext:openconfig-version "0.0.3";

  revision "2017-01-12" {
    description
      "Minor compliance fixes.";
    reference "0.0.3";
  }

  revision "2016-12-15" {
    description
      "Updated revision of SR module.";
    reference "0.0.2";
  }

  revision "2016-07-28" {
    description
      "Initial revision of SR module.";
    reference "0.0.1";
  }

  typedef sr-dataplane-type {
    type enumeration {
      enum MPLS {
        description
          "The entity uses MPLS labels as Segment Identifiers.";
      }
      enum IPV6 {
        description
          "The entity uses IPv6 prefixes as Segment Identifiers.";
      }
    }
    description
      "Types of data plane that can be used to instantiate a Segment
      Routing block of SIDs.";
  }

  typedef sr-sid-type {
    type union {
      type oc-mpls-t:mpls-label;
      type inet:ipv6-address-no-zone;
    }
    description
      "The defined value of a segment identifier.";
  }

  grouping srgb-config {
    description
      "Configuration parameters relating to the SRGB.";

    leaf local-id {
      type string;
      description
        "Unique identifier for the segment routing global block on
        the local system.";
    }

    leaf dataplane-type {
      type sr-dataplane-type;
      description
        "The dataplane being used to instantiate the SRGB. When MPLS is specified
        the set of MPLS label blocks that are defined in the mpls-label-blocks
        list are used to make up the SRGB. When IPv6 is specified, the set of IPv6
        prefixes specified in the ipv6-prefixes list are used.";
    }

    leaf-list mpls-label-blocks {
      when "../dataplane-type = 'MPLS'" {
        description
          "Allow the MPLS label block to be specified only for SRGBs that are
          using the MPLS dataplane.";
      }
      type leafref {
        // We are at /network-instances/network-instance/segment-routing/
        // srgbs/srgb/config/mpls-label-blocks
        path "../../../../../mpls/global/reserved-label-blocks/" +
             "reserved-label-block/config/local-id";
      }
      description
        "A list of refences to the label blocks that are used to make
        up the SRGB.";
    }

    leaf-list ipv6-prefixes {
      when "../dataplane-type = 'IPV6'" {
        description
          "Allow IPv6 prefixes to be specified only when the dataplane
          realisation of the SRGB is IPv6.";
      }
      type inet:ipv6-prefix;
      description
        "A list of IPv6 prefixes which are to be used for segment routing using
        the IPv6 dataplane.";
    }
  }

  grouping srgb-state {
    description
      "Operational state parameters relating to the SRGB.";

    leaf size {
      type uint32;
      description
        "The total number of SRGB entries that are available within the SRGB.";
    }

    leaf used {
      type uint32;
      description
        "The total number of SRGB entries that have already been alocated by
        protocols referencing the SRGB.";
    }
  }

  grouping srlb-config {
    description
      "Configuration parameters relating to an SRLB.";

    leaf local-id {
      type string;
      description
        "A unique local identifier used for the Segment Routing Local Block.
        The identifier is used when referencing the SRLB within other
        contexts.";
    }

    leaf dataplane-type {
      type sr-dataplane-type;
      description
        "The dataplane that is to be used for the Segment Routing Local Block.
        When MPLS is specified, the local block corresponds to a block of MPLS
        labels; when IPv6 is specified it corresponds to an IPv6 prefix.";
    }

    leaf mpls-label-block {
      when "../dataplane-type = 'MPLS'" {
        description
          "Allow the MPLS label block to be specified only for SRLBs that are
          using the MPLS dataplane.";
      }
      type leafref {
        path "../../../../../mpls/global/reserved-label-blocks/" +
             "reserved-label-block/config/local-id";
      }
      description
        "A reference to the MPLS label block that is used to contain the
        SIDs of the SRLB.";
    }

    leaf ipv6-prefix {
      when "../dataplane-type = 'IPV6'" {
        description
          "Allow IPv6 prefixes to be specified only when the dataplane
          realisation of the SRGB is IPv6.";
      }
      type inet:ipv6-prefix;
      description
        "The IPv6 prefix that is used for the SRLB.";
    }
  }

  grouping sr-structural {
    description
      "Top-level structural grouping defining Segment Routing Global Blocks.";

    container srgbs {
      description
        "Configuration and operational state parameters relating to the
        SRGBs defined for the system.";

      list srgb {
        key "local-id";

        description
          "A single definition of an SRGB which may comprise of multiple
          sets of dataplane addresses (IPv6 addresses, or MPLS labels).";

        leaf local-id {
          type leafref {
            path "../config/local-id";
          }
          description
            "A reference to the identifier for the SRGB.";
        }

        container config {
          description
            "Configuration parameters relating to the SRGB.";
          uses srgb-config;
        }

        container state {
          config false;
          description
            "State parameters relating to the SRGB.";
          uses srgb-config;
          uses srgb-state;
        }
      }
    }

    container srlbs {
      description
        "Configuration and operational state parameters relating to the
        Segment Routing Local Blocks (SRLBs) defined for the system.";

      list srlb {
        key "local-id";

        description
          "A definition of a Segment Routing Local Block, defined to be
          a set of Segment Identifiers (specified as MPLS labels or
          IPv6 addreses) that are defined for local allocation by the
          system. A block may optionally be advertised into an IGP.";

        leaf local-id {
          type leafref {
            path "../config/local-id";
          }
          description
            "Reference to the local identifier used for the SRLB.";
        }

        container config {
          description
            "Configuration parameters relating to the SRLB.";
          uses srlb-config;
        }

        container state {
          config false;
          description
            "Operational state parmeters relating to the SRLB.";
          uses srlb-config;
        }
      }
    }
  }

  grouping sr-mpls-top {
    description
      "Structural grouping defining SR definition within MPLS.";

    container segment-routing {
      description
        "MPLS-specific Segment Routing configuration and operational state
        parameters";

      container aggregate-sid-counters {
        description
          "Per-SID counters aggregated across all interfaces on the local system";

        list aggregate-sid-counter {
          key "mpls-label";
          config false;

          description
            "Counters aggregated across all of the interfaces of the local
            system corresponding to traffic received or forwarded with a
            particular SID";

          leaf mpls-label {
            type leafref {
              path "../state/mpls-label";
            }
            description
              "The MPLS label representing the segment identifier";
          }

          container state {
            config false;
            description
              "State parameters for per-SID statistics";
            uses sr-mpls-sid-counters-state;
            uses sr-mpls-common-counters;
          }
        }
      }

      container interfaces {
        description
          "Interface related Segment Routing parameters.";

        list interface {
          key "interface-id";

          description
            "Parameters and MPLS-specific configuration relating to Segment
            Routing on an interface.";

          leaf interface-id {
            type leafref {
              path "../config/interface-id";
            }
            description
              "A reference to the ID for the interface for which SR is
              configured";
          }

          container config {
            description
              "MPLS-specific Segment Routing configuration parameters
              related to an interface.";
            uses sr-mpls-interface-config;
          }

          container state {
            config false;
            description
              "MPLS-specific Segment Routing operational state parameters
              related to an interface.";
            uses sr-mpls-interface-config;
            uses sr-mpls-interface-state;
          }

          container sid-counters {
            description
              "Per-SID statistics for MPLS";

            list sid-counter {
              key "mpls-label";
              config false;

              description
                "Per segment identifier counters for the MPLS dataplane.";

              leaf mpls-label {
                type leafref {
                  path "../state/mpls-label";
                }
                description
                  "The MPLS label representing the segment identifier";
              }

              container state {
                config false;
                description
                  "State parameters for per-SID statistics";
                uses sr-mpls-sid-counters-state;
                uses sr-mpls-common-counters;
              }

              container forwarding-classes {
                description
                  "Per-SID per-forwarding class counters for Segment Routing.";

                list forwarding-class {
                  key "exp";
                  config false;

                  description
                    "SID entries for the forwarding class associated with the
                    referenced MPLS EXP.";

                  leaf exp {
                    type leafref {
                      path "../state/exp";
                    }
                    description
                      "Reference to the value of the EXP bits of the segment
                      identifier.";
                  }

                  container state {
                    config false;
                    description
                      "Per-SID, per forwarding class counters for Segment Routing
                      with the MPLS dataplane";

                    uses sr-mpls-interface-sid-fc-state;
                    uses sr-mpls-common-counters;
                  }
                }
              }
            }
          }
          uses oc-if:interface-ref;
        }
      }
    }
  }

  grouping sr-mpls-interface-config {
    description
      "MPLS-specific Segment Routing configuration for an interface";

    leaf interface-id {
      type string;
      description
        "A unique identifier for the interface.";
    }
  }

  grouping sr-mpls-interface-state {
    description
      "MPLS-specific Segment Routing operational state parameters for an
      interface";

    uses sr-mpls-common-counters;
  }

  grouping sr-mpls-interface-sid-fc-state {
    description
      "Per-SID per forwarding class statistics for SR with the MPLS dataplane";

    leaf exp {
      type uint8 {
        range "0..7";
      }
      description
        "The value of the MPLS EXP (experimental) or Traffic Class bits that the
        SID statistics relate to. Packets received with a MPLS label value
        equal to the SID's MPLS label and EXP bits equal to the this value
        should be counted towards the associated ingress statistics. Packets
        that are forwarded to the destination MPLS label corresponding to the
        SID should be counted towards this value. In the egress direction, where
        forwarding follows a SID value that requires PHP at the local node,
        packets should still be counted towards the egress counters.";
    }
  }

  grouping sr-mpls-sid-counters-state {
    description
      "Per-SID statistics leaves";

    leaf mpls-label {
      type oc-mpls-t:mpls-label;
      description
        "The MPLS label used for the segment identifier";
    }
  }

  grouping sr-mpls-common-counters {
    description
      "Per segment identifier counters used in the model";

      leaf in-pkts {
        type yang:counter64;
        description
          "A cumulative counter of the packets received within the context
          which have matched a label corresponding to an SR Segment Identifier.";
      }

      leaf in-octets {
        type yang:counter64;
        description
          "The cumulative counter of the total bytes received within the context
          which have matched a label corresponding to an SR Segment Identifier";
      }

      leaf out-pkts {
        type yang:counter64;
        description
          "A cumulative counter of the total number of packets transmitted by
          the local system within the context which have a label imposed that
          corresponds to an Segment Identifier.";
      }

      leaf out-octets {
        type yang:counter64;
        description
          "A cumulative counter of the total bytes transmitted by the local
          system within the context which have a label imported that
          corresponds to an SR Segment Identifier.";
      }
  }

  grouping sr-igp-config {
    description
      "Configuration parameters relating to segment routing within an
      IGP.";

    leaf enabled {
      type boolean;
      description
        "When this leaf is set to true, the segment routing extensions are
        utilised within the IGP.";
    }

    leaf srgb {
      type leafref {
        path "../../../../../../../segment-routing/srgbs/srgb/config/local-id";
      }
      description
        "A reference to the Segment Routing Global Block (SRGB) that is
        to be used by this IGP instance.";
    }

    leaf srlb {
      // Leaf is defined at
      // /network-instances/network-instance/protocols/protocol/<igp>/global/
      // segment-routing/config
      type leafref {
        path "../../../../../../../segment-routing/srlbs/srlb/config/local-id";
      }
      description
        "A reference to the Segment Routing Local Block (SRLB) that is to
        be advertised by the IGP instance.";
    }
  }

  grouping sr-igp-top {
    description
      "Per-instance configuration and state parameters for Segment Routing
      in an IGP.";

    container segment-routing {
      description
        "Configuration and operational state relating to segment routing.";

      container config {
        description
          "Configuration parameters relating to the configuration of segment
          routing for the IGP instance.";
        uses sr-igp-config;
      }

      container state {
        config false;
        description
          "Operational state parameters relating to segment routing for the
          IGP instance.";
        uses sr-igp-config;
      }
    }
  }

  grouping sr-igp-interface-prefix-sid-config {
    description
      "Configuration parameters relating to an IGP prefix SID advertisement";

    leaf prefix {
      type inet:ip-prefix;
      description
        "The IP prefix for which the IGP prefix SID should be advertised. The
        value specified is a local prefix on the interface which is advertised
        into the IGP.";
    }

    leaf sid-id {
      type sr-sid-type;
      description
        "The Segment Identifier to be used when advertising the IGP Prefix SID.";
    }

    leaf label-options {
      type enumeration {
        enum NO_PHP {
          description
            "When this value is specified, the penultimate hop must not pop
            the Prefix-SID label before forwarding it to the local system.";
        }
        enum EXPLICIT_NULL {
          description
            "When set, the penultimate hop must swap the prefix SID for the
            relevant explicit null label before forwarding the packet.";
        }
      }
      description
        "The options associated with the IGP prefix SID for MPLS. The value
        of this leaf specifies the option that the SID should be advertised
        into the IGP with.";
    }
  }

  grouping sr-igp-interface-adjsid-config {
    description
      "Configuration parameters relating to an Adj-SID on an interface";

    leaf sid-id {
      type union {
        type sr-sid-type;
        type enumeration {
            enum DYNAMIC {
              description
                "The SID chosen for the Adjacency SID should be dynamically
                allocated from the system's dynamic range of Segment
                Identifiers. For MPLS, this range should be considered to be
                those labels that do not fall within a reserved label block.";
            }
        }
      }
      description
        "The value of the Adj-SID to be advertised. Where a static SID
        identifier is specified, this should be advertised directly by the
        system. Where the DYNAMIC value is specified, this should be treated
        as a dynamically allocated value. When the MPLS data plane is in use
        the dynamic value should not fall within a reserved-label-block.";
    }

    leaf protection-eligible {
      type boolean;
      default true;
      description
        "Whether the Adj-SID should be considered to be eligible for protection
        using IP or MPLS FRR during a network failure. When this value is set to
        true, the B-flag of the Adj-SID is set to 1, and the local system should
        provide FRR paths for the associated label forwarding entry. When it is
        set to false, the local system must not provide FRR for the specified
        LFIB entry.";
    }

    leaf group {
      type boolean;
      default false;
      description
        "When set to true, the Adj-SID is indicated to be part of a group, and
        the G flag is set to 1 in the corresponding advertisement in the IGP.";
    }

    leaf neighbor {
      type inet:ip-address;
      description
        "The remote system on the interface with which the Adj-SID is
        associated.";
    }
  }

  grouping sr-igp-interface-adjsid-state {
    description
      "Operational state parameters relating to the adjacency SID for an
      interface";

    leaf allocated-dynamic-local {
      type sr-sid-type;
      description
        "Where an Adjacency SID with a dynamic value is to be allocated by
        the system, this leaf reports to the value of the Adj-SID allocated
        to this interface.";
    }
  }

  grouping sr-igp-interface-top {
    description
      "Per-interface configuration and operational state relating to an
      interface within the IGP.";

    container segment-routing {
      description
        "Configuration and operatioanl state parameters relating to segment
        routing for an interface within the IGP.";

      container prefix-sids {
        description
          "Configuration and operational state parameters relating to
          the advertisement of a segment routing IGP-Prefix SID for this
          interface.";

        list prefix-sid {
          key "prefix";

          description
            "An IGP prefix that should have a segment routing IGP-Prefix SID
            allocated to it. The value of the SID is specified by the SID ID,
            as an absolute value. If the absolute value falls within the SRGB,
            the Global flag should be advertised by the system.";

          leaf prefix {
            type leafref {
              path "../config/prefix";
            }
            description
              "Reference to the prefix for which the IGP-Prefix SID is to be
              advertised";
          }

          container config {
            description
              "Configuration parameters for the IGP Prefix SID.";
            uses sr-igp-interface-prefix-sid-config;
          }

          container state {
            config false;
            description
              "Operational state parameters for the IGP-Prefix SID.";
            uses sr-igp-interface-prefix-sid-config;
          }
        }
      }

      container adjacency-sids {
        description
          "Configuration and operational state parameters relating to
          the advertisement of a segment routing adjacency SID for this
          interface.";

        list adjacency-sid {
          key "neighbor sid-id";

          description
            "An Adjacency SID to be advertised for the specified interface.
            The Adj-SID's identifier (the SID ID) must be unique, with flags
            specified indicating the parameters that should be set for the SID.
            Where a SID value is specified that is allocated from the SRGB, the
            global flag must be set by the system.";

          leaf sid-id {
            type leafref {
              path "../config/sid-id";
            }
            description
              "Reference to the segment identifier to be used by the local
              system.";
          }

          leaf neighbor {
            type leafref {
              path "../config/neighbor";
            }
            description
              "Reference to the neighbor with which the Adjacency SID is
              associated.";
          }

          container config {
            description
              "Configuraton parameters relating to the AdjSID.";
            uses sr-igp-interface-adjsid-config;
          }

          container state {
            config false;
            description
              "Operational state parameters relating to the AdjSID.";
            uses sr-igp-interface-adjsid-config;
            uses sr-igp-interface-adjsid-state;
          }
        }
      }
    }
  }

  grouping sr-top {
    description
      "Top level grouping for Segment Routing";

    container segment-routing {
      description
        "Configuration and operational state parameters relating to
        segment routing.";

      uses sr-structural;
    }
  }
}
