<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-spring-segment-routing-15"
     ipr="trust200902">
  <front>
    <title abbrev="Segment Routing">Segment Routing Architecture</title>

    <author fullname="Clarence Filsfils" initials="C." role="editor"
            surname="Filsfils">
      <organization>Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street/>

          <city>Brussels</city>

          <region/>

          <code/>

          <country>BE</country>
        </postal>

        <email>cfilsfil@cisco.com</email>
      </address>
    </author>

    <author fullname="Stefano Previdi" initials="S." role="editor"
            surname="Previdi">
      <organization>Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>Italy</country>
        </postal>

        <email>stefano@previdi.net</email>
      </address>
    </author>

    <author fullname="Les Ginsberg" initials="L" surname="Ginsberg">
      <organization>Cisco Systems, Inc</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <region/>

          <code/>

          <country/>
        </postal>

        <phone/>

        <facsimile/>

        <email>ginsberg@cisco.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Bruno Decraene" initials="B." surname="Decraene">
      <organization>Orange</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>FR</country>
        </postal>

        <email>bruno.decraene@orange.com</email>
      </address>
    </author>

    <author fullname="Stephane Litkowski" initials="S." surname="Litkowski">
      <organization>Orange</organization>

      <address>
        <postal>
          <street/>

          <city/>

          <code/>

          <country>FR</country>
        </postal>

        <email>stephane.litkowski@orange.com</email>
      </address>
    </author>

    <author fullname="Rob Shakir" initials="R." surname="Shakir">
      <organization>Google, Inc.</organization>

      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>

          <city>Mountain View, CA</city>

          <code>94043</code>

          <country>US</country>
        </postal>

        <email>robjs@google.com</email>
      </address>
    </author>

    <date day="25" month="January" year="2018"/>

    <workgroup>Network Working Group</workgroup>

    <abstract>
      <t>Segment Routing (SR) leverages the source routing paradigm. A node
      steers a packet through an ordered list of instructions, called
      segments. A segment can represent any instruction, topological or
      service-based. A segment can have a semantic local to an SR node or
      global within an SR domain. SR allows to enforce a flow through any
      topological path while maintaining per-flow state only at the ingress
      nodes to the SR domain.</t>

      <t>Segment Routing can be directly applied to the MPLS architecture with
      no change on the forwarding plane. A segment is encoded as an MPLS
      label. An ordered list of segments is encoded as a stack of labels. The
      segment to process is on the top of the stack. Upon completion of a
      segment, the related label is popped from the stack.</t>

      <t>Segment Routing can be applied to the IPv6 architecture, with a new
      type of routing header. A segment is encoded as an IPv6 address. An
      ordered list of segments is encoded as an ordered list of IPv6 addresses
      in the routing header. The active segment is indicated by the
      Destination Address of the packet. The next active segment is indicated
      by a pointer in the new routing header.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>Segment Routing (SR) leverages the source routing paradigm. A node
      steers a packet through an SR Policy instantiated as an ordered list of
      instructions called segments. A segment can represent any instruction,
      topological or service-based. A segment can have a semantic local to an
      SR node or global within an SR domain. SR supports per-flow explicit
      routing while maintaining per-flow state only at the ingress nodes to
      the SR domain.</t>

      <t>A segment is often referred to by its Segment Identifier (SID).</t>

      <t>A segment may be associated with a topological instruction. A
      topological local segment may instruct a node to forward the packet via
      a specific outgoing interface. A topological global segment may instruct
      an SR domain to forward the packet via a specific path to a destination.
      Different segments may exist for the same destination, each with
      different path objectives (e.g., which metric is minimized, what
      constraints are specified).</t>

      <t>A segment may be associated with a service instruction (e.g. the
      packet should be processed by a container or VM associated with the
      segment). A segment may be associated with a QoS treatment (e.g., shape
      the packets received with this segment at x Mbps).</t>

      <t>The SR architecture supports any type of instruction associated with
      a segment.</t>

      <t>The SR architecture supports any type of control-plane: distributed,
      centralized or hybrid.</t>

      <t>In a distributed scenario, the segments are allocated and signaled by
      IS-IS or OSPF or BGP. A node individually decides to steer packets on a
      source-routed policy (e.g., pre-computed local protection <xref
      target="I-D.ietf-spring-resiliency-use-cases"/> ) . A node individually
      computes the source-routed policy.</t>

      <t>In a centralized scenario, the segments are allocated and
      instantiated by an SR controller. The SR controller decides which nodes
      need to steer which packets on which source-routed policies. The SR
      controller computes the source-routed policies. The SR architecture does
      not restrict how the controller programs the network. Likely options are
      NETCONF, PCEP and BGP. The SR architecture does not restrict the number
      of SR controllers. Specifically multiple SR controllers may program the
      same SR domain. The SR architecture allows these SR controllers to
      discover which SID&rsquo;s are instantiated at which nodes and which
      sets of local (SRLB) and global labels (SRGB) are available at which
      node.</t>

      <t>A hybrid scenario complements a base distributed control-plane with a
      centralized controller. For example, when the destination is outside the
      IGP domain, the SR controller may compute a source-routed policy on
      behalf of an IGP node. The SR architecture does not restrict how the
      nodes which are part of the distributed control-plane interact with the
      SR controller. Likely options are PCEP and BGP.</t>

      <t>Hosts MAY be part of an SR Domain. A centralized controller can
      inform hosts about policies either by pushing these policies to hosts or
      responding to requests from hosts.</t>

      <t>The SR architecture can be instantiated on various dataplanes. This
      document introduces two dataplane instantiations of SR: SR over MPLS
      (SR-MPLS) and SR over IPv6 (SRv6).</t>

      <t>Segment Routing can be directly applied to the MPLS architecture with
      no change on the forwarding plane <xref
      target="I-D.ietf-spring-segment-routing-mpls"> </xref> A segment is
      encoded as an MPLS label. An SR Policy is instantiated as a stack of
      labels. The segment to process (the active segment) is on the top of the
      stack. Upon completion of a segment, the related label is popped from
      the stack.</t>

      <t>Segment Routing can be applied to the IPv6 architecture with a new
      type of routing header called the SR header (SRH) <xref
      target="I-D.ietf-6man-segment-routing-header"/> . An instruction is
      associated with a segment and encoded as an IPv6 address. An SRv6
      segment is also called an SRv6 SID. An SR Policy is instantiated as an
      ordered list of SRv6 SID&rsquo;s in the routing header. The active
      segment is indicated by the Destination Address(DA) of the packet. The
      next active segment is indicated by the SegmentsLeft (SL) pointer in the
      SRH. When an SRv6 SID is completed, the SL is decremented and the next
      segment is copied to the DA. When a packet is steered on an SR policy,
      the related SRH is added to the packet.</t>

      <t>In the context of an IGP-based distributed control-plane, two
      topological segments are defined: the IGP adjacency segment and the IGP
      prefix segment.</t>

      <t>In the context of a BGP-based distributed control-plane, two
      topological segments are defined: the BGP peering segment and the BGP
      prefix segment.</t>

      <t>The headend of an SR Policy binds a SID (called Binding segment or
      BSID) to its policy. When the headend receives a packet with active
      segment matching the BSID of a local SR Policy, the headend steers the
      packet into the associated SR Policy.</t>

      <t>This document defines the IGP, BGP and Binding segments for the
      SR-MPLS and SRv6 dataplanes.</t>

      <t>Note: This document defines the architecture for Segment Routing,
      including definitions of basic objects and functions and a description
      of the overall design. It does NOT define the means of implementing the
      architecture - that is contained in numerous referencing documents, some
      of which are mentioned in this document as a convenience to the
      reader.</t>
    </section>

    <section anchor="TERMINOLOGY" title="Terminology">
      <t>SR-MPLS: the instantiation of SR on the MPLS dataplane</t>

      <t>SRv6: the instantiation of SR on the IPv6 dataplane.</t>

      <t>Segment: an instruction a node executes on the incoming packet (e.g.,
      forward packet according to shortest path to destination, or, forward
      packet through a specific interface, or, deliver the packet to a given
      application/service instance).</t>

      <t>SID: a segment identifier. Note that the term SID is commonly used in
      place of the term Segment, though this is technically imprecise as it
      overlooks any necessary translation.</t>

      <t>SR-MPLS SID: an MPLS label or an index value into an MPLS label space
      explicitly associated with the segment.</t>

      <t>SRv6 SID: an IPv6 address explicitly associated with the segment.</t>

      <t>Segment Routing Domain (SR Domain): the set of nodes participating in
      the source based routing model. These nodes may be connected to the same
      physical infrastructure (e.g., a Service Provider's network). They may
      as well be remotely connected to each other (e.g., an enterprise VPN or
      an overlay). If multiple protocol instances are deployed, the SR domain
      most commonly includes all of the protocol instances in a network.
      However, some deployments may wish to sub-divide the network into
      multiple SR domains, each of which includes one or more protocol
      instances. It is expected that all nodes in an SR Domain are managed by
      the same administrative entity.</t>

      <t>Active Segment: the segment that is used by the receiving router to
      process the packet. In the MPLS dataplane it is the top label. In the
      IPv6 dataplane it is the destination address. <xref
      target="I-D.ietf-6man-segment-routing-header"/>.</t>

      <t>PUSH: the instruction consisting of the insertion of a segment at the
      top of the segment list. In SR-MPLS the top of the segment list is the
      topmost (outer) label of the label stack. In SRv6, the top of the
      segment list is represented by the first segment in the Segment Routing
      Header as defined in <xref
      target="I-D.ietf-6man-segment-routing-header"/>.</t>

      <t>NEXT: when the active segment is completed, NEXT is the instruction
      consisting of the inspection of the next segment. The next segment
      becomes active. In SR-MPLS, NEXT is implemented as a POP of the top
      label. In SRv6, NEXT is implemented as the copy of the next segment from
      the SRH to the Destination Address of the IPv6 header.</t>

      <t>CONTINUE: the active segment is not completed and hence remains
      active. In SR-MPLS, CONTINUE instruction is implemented as a SWAP of the
      top label. <xref target="RFC3031"/> In SRv6, this is the plain IPv6
      forwarding action of a regular IPv6 packet according to its Destination
      Address.</t>

      <t>SR Global Block (SRGB): the set of global segments in the SR Domain.
      If a node participates in multiple SR domains, there is one SRGB for
      each SR domain. In SR-MPLS, SRGB is a local property of a node and
      identifies the set of local labels reserved for global segments. In
      SR-MPLS, using identical SRGBs on all nodes within the SR Domain is
      strongly recommended. Doing so eases operations and troubleshooting as
      the same label represents the same global segment at each node. In SRv6,
      the SRGB is the set of global SRv6 SIDs in the SR Domain.</t>

      <t>SR Local Block (SRLB): local property of an SR node. If a node
      participates in multiple SR domains, there is one SRLB for each SR
      domain. In SR-MPLS, SRLB is a set of local labels reserved for local
      segments. In SRv6, SRLB is a set of local IPv6 addresses reserved for
      local SRv6 SID&rsquo;s. In a controller-driven network, some controllers
      or applications may use the control plane to discover the available set
      of local segments.</t>

      <t>Global Segment: a segment which is part of the SRGB of the domain.
      The instruction associated to the segment is defined at the SR Domain
      level. A topological shortest-path segment to a given destination within
      an SR domain is a typical example of a global segment.</t>

      <t>Local Segment: In SR-MPLS, this is a local label outside the SRGB. It
      may be part of the explicitly advertised SRLB. In SRv6, this can be any
      IPv6 address i.e., the address may be part of the SRGB but used such
      that it has local significance. The instruction associated to the
      segment is defined at the node level.</t>

      <t>IGP Segment: the generic name for a segment attached to a piece of
      information advertised by a link-state IGP, e.g. an IGP prefix or an IGP
      adjacency.</t>

      <t>IGP-Prefix Segment: an IGP-Prefix Segment is an IGP Segment
      representing an IGP prefix. When an IGP-Prefix Segment is global within
      the SR IGP instance/topology it identifies an instruction to forward the
      packet along the path computed using the routing algorithm specified in
      the algorithm field, in the topology and the IGP instance where it is
      advertised. Also referred to as Prefix Segment.</t>

      <t>Prefix SID: the SID of the IGP-Prefix Segment.</t>

      <t>IGP-Anycast Segment: an IGP-Anycast Segment is an IGP-Prefix Segment
      which identify an anycast prefix advertised by a set of routers.</t>

      <t>Anycast-SID: the SID of the IGP-Anycast Segment.</t>

      <t>IGP-Adjacency Segment: an IGP-Adjacency Segment is an IGP Segment
      attached to a unidirectional adjacency or a set of unidirectional
      adjacencies. By default, an IGP-Adjacency Segment is local (unless
      explicitly advertised otherwise) to the node that advertises it. Also
      referred to as Adjacency Segment.</t>

      <t>Adj-SID: the SID of the IGP-Adjacency Segment.</t>

      <t>IGP-Node Segment: an IGP-Node Segment is an IGP-Prefix Segment which
      identifies a specific router (e.g., a loopback). Also referred to as
      Node Segment.</t>

      <t>Node-SID: the SID of the IGP-Node Segment.</t>

      <t>SR Policy: an ordered list of segments. The headend of an SR Policy
      steers packets onto the SR policy. The list of segments can be specified
      explicitly in SR-MPLS as a stack of labels and in SRv6 as an ordered
      list of SRv6 SID&rsquo;s. Alternatively, the list of segments is
      computed based on a destination and a set of optimization objective and
      constraints (e.g., latency, affinity, SRLG, ...). The computation can be
      local or delegated to a PCE server. An SR policy can be configured by
      the operator, provisioned via NETCONF <xref target="RFC6241"/> or
      provisioned via PCEP <xref target="RFC5440"/> . An SR policy can be used
      for traffic-engineering, OAM or FRR reasons.</t>

      <t>Segment List Depth: the number of segments of an SR policy. The
      entity instantiating an SR Policy at a node N should be able to discover
      the depth insertion capability of the node N. For example, the PCEP SR
      capability advertisement described in <xref
      target="I-D.ietf-pce-segment-routing"/> is one means of discovering this
      capability.</t>

      <t>Forwarding Information Base (FIB): the forwarding table of a node</t>
    </section>

    <section anchor="IGPSEGMENTS" title="Link-State IGP Segments">
      <t>Within an SR domain, an SR-capable IGP node advertises segments for
      its attached prefixes and adjacencies. These segments are called IGP
      segments or IGP SIDs. They play a key role in Segment Routing and
      use-cases as they enable the expression of any path throughout the SR
      domain. Such a path is either expressed as a single IGP segment or a
      list of multiple IGP segments.</t>

      <t>Advertisement of IGP segments requires extensions in link-state IGP
      protocols. These extensions are defined in <xref
      target="I-D.ietf-isis-segment-routing-extensions"/> <xref
      target="I-D.ietf-ospf-segment-routing-extensions"/> <xref
      target="I-D.ietf-ospf-ospfv3-segment-routing-extensions"/></t>

      <section anchor="PREFIXSID" title="IGP-Prefix Segment, Prefix-SID">
        <t>An IGP-Prefix segment is an IGP segment attached to an IGP prefix.
        An IGP-Prefix segment is global (unless explicitly advertised
        otherwise) within the SR domain. The context for an IGP-Prefix segment
        includes the prefix, topology, and algorithm. Multiple SIDs MAY be
        allocated to the same prefix so long as the tuple &lt;prefix,
        topology, algorithm&gt; is unique.</t>

        <t>Multiple instances and topologies are defined in IS-IS and OSPF in:
        <xref target="RFC5120"/>, <xref target="RFC8202"/>, <xref
        target="RFC6549"/> and <xref target="RFC4915"/>.</t>

        <section anchor="PREFIXSIDALGO" title="Prefix-SID Algorithm">
          <t>Segment Routing supports the use of multiple routing algorithms
          i.e, different constraint based shortest path calculations can be
          supported. An algorithm identifier is included as part of a
          Prefix-SID advertisement. Specification of how an algorithm specific
          path calculation is done is required in the document defining the
          algorithm.</t>

          <t>This document defines two algorithms:<list style="symbols">
              <t>"Shortest Path": this algorithm is the default behavior. The
              packet is forwarded along the well known ECMP-aware SPF
              algorithm employed by the IGPs. However it is explicitly allowed
              for a midpoint to implement another forwarding based on local
              policy. The "Shortest Path" algorithm is in fact the default and
              current behavior of most of the networks where local policies
              may override the SPF decision.</t>

              <t>"Strict Shortest Path (Strict-SPF)": This algorithm mandates
              that the packet is forwarded according to ECMP-aware SPF
              algorithm and instructs any router in the path to ignore any
              possible local policy overriding the SPF decision. The SID
              advertised with Strict-SPF algorithm ensures that the path the
              packet is going to take is the expected, and not altered, SPF
              path. Note that Fast Reroute (FRR) <xref target="RFC5714"/>
              mechanisms are still compliant with the Strict Shortest Path. In
              other words, a packet received with a Strict-SPF SID may be
              rerouted through a FRR mechanism. Strict-SPF uses the same
              topology used by "Shortest Path". Obviously, nodes which do not
              support Strict-SPF will not install forwarding entries for this
              algorithm. Restricting the topology only to those nodes which
              support this algorithm will not produce the desired forwarding
              paths since the desired behavior is to follow the path
              calculated by "Shortest Path". Therefore, a source SR node MUST
              NOT use a source-routing policy containing a strict SPF segment
              if the path crosses a node not supporting the strict-SPF
              algorithm.</t>
            </list></t>

          <t>An IGP-Prefix Segment identifies the path, to the related prefix,
          computed as per the associated algorithm. A packet injected anywhere
          within the SR domain with an active Prefix-SID is expected to be
          forwarded along a path computed using the specified algorithm. For
          this to be possible, a fully connected topology of routers
          supporting the specified algorithm is required.</t>
        </section>

        <section anchor="PREFIXSIDMPLS" title="SR-MPLS ">
          <t>When SR is used over the MPLS dataplane SIDs are an MPLS label or
          an index into an MPLS label space (either SRGB or SRLB).</t>

          <t>Where possible, it is recommended that identical SRGBs be
          configured on all nodes in an SR Domain. This simplifies
          troubleshooting as the same label will be associated with the same
          prefix on all nodes. In addition, it simplifies support for anycast
          as detailed in Section 3.3.</t>

          <t>The following behaviors are associated with SR operating over the
          MPLS dataplane:</t>

          <t><list style="symbols">
              <t>the IGP signaling extension for IGP-Prefix segment includes a
              flag to indicate whether directly connected neighbors of the
              node on which the prefix is attached should perform the NEXT
              operation or the CONTINUE operation when processing the SID.
              This behavior is equivalent to Penultimate Hop Popping (NEXT) or
              Ultimate Hop Popping (CONTINUE) in MPLS.</t>

              <t>A Prefix-SID is allocated in the form of an MPLS label (or an
              index in the SRGB) according to a process similar to IP address
              allocation. Typically, the Prefix-SID is allocated by policy by
              the operator (or NMS) and the SID very rarely changes.</t>

              <t>While SR allows to attach a local segment to an IGP prefix,
              it is specifically assumed that when the terms "IGP-Prefix
              Segment" and "Prefix-SID" are used, the segment is global (the
              SID is allocated from the SRGB or as an index into the
              advertised SRGB). This is consistent with all the described
              use-cases that require global segments attached to IGP
              prefixes.</t>

              <t>The allocation process MUST NOT allocate the same Prefix-SID
              to different IP prefixes.</t>

              <t>If a node learns a Prefix-SID having a value that falls
              outside the locally configured SRGB range, then the node MUST
              NOT use the Prefix-SID and SHOULD issue an error log reporting a
              misconfiguration.</t>

              <t>If a node N advertises Prefix-SID SID-R for a prefix R that
              is attached to N, if N specifies CONTINUE as the operation to be
              performed by directly connected neighbors, N MUST maintain the
              following FIB entry:<figure>
                  <artwork><![CDATA[   Incoming Active Segment: SID-R
   Ingress Operation: NEXT
   Egress interface: NULL]]></artwork>
                </figure></t>

              <t>A remote node M MUST maintain the following FIB entry for any
              learned Prefix-SID SID-R attached to IP prefix R: <figure>
                  <artwork><![CDATA[   Incoming Active Segment: SID-R
   Ingress Operation:
      If the next-hop of R is the originator of R
      and instructed to remove the active segment: NEXT
      Else: CONTINUE
   Egress interface: the interface towards the next-hop along the 
                     path computed using the algorithm advertised with 
                     the SID toward prefix R.]]></artwork>
                </figure></t>
            </list></t>

          <t>As Prefix-SIDs are specific to a given algorithm, if traffic
          associated with an algorithm arrives at a node which does not
          support that algorithm the traffic will be dropped as there will be
          no forwarding entry matching the incoming label.</t>
        </section>

        <section anchor="PREFIXSIDIPV6" title="SRv6">
          <t>When SR is used over the IPv6 dataplane: <list style="symbols">
              <t>A Prefix-SID is an IPv6 address.</t>

              <t>An operator MUST explicitly instantiate an SRv6 SID. IPv6
              node addresses are not SRv6 SIDs by default.</t>
            </list></t>

          <t>A node N advertising an IPv6 address R usable as a segment
          identifier MUST maintain the following FIB entry:<figure>
              <artwork><![CDATA[   Incoming Active Segment: R
   Ingress Operation: NEXT
   Egress interface: NULL]]></artwork>
            </figure></t>

          <t>Note that forwarding to R does not require an entry in the FIBs
          of all other routers for R. Forwarding can be and most often will be
          achieved by a shorter mask prefix which covers R.</t>

          <t>Independent of Segment Routing support, any remote IPv6 node will
          maintain a plain IPv6 FIB entry for any prefix, no matter if the
          prefix represents a segment or not. This allows forwarding of
          packets to the node which owns the SID even by nodes which do not
          support Segment Routing.</t>

          <t>Support of multiple algorithms applies to SRv6. Since algorithm
          specific SIDs are simply IPv6 addresses, algorithm specific
          forwarding entries can be achieved by assigning algorithm specific
          subnets to the (set of) algorithm specific SIDs which a node
          allocates.</t>

          <t>Nodes which do not support a given algorithm may still have a FIB
          entry covering an algorithm specific address even though an
          algorithm specific path has not been calculated by that node. This
          is mitigated by the fact that nodes which do not support a given
          algorithm will not be included in the topology associated with that
          algorithm specific SPF and so traffic using the algorithm specific
          destination will normally not flow via the excluded node. If such
          traffic were to arrive and be forwarded by such a node, it will
          still progress towards the destination node. The nexthop will either
          be a node which supports the algorithm - in which case the packet
          will be forwarded along algorithm specific paths (or be dropped if
          none are available) - or the nexthop will be a node which does NOT
          support the algorithm - in which case the packet will continue to be
          forwarded along Algorithm 0 paths towards the destination node.</t>
        </section>
      </section>

      <section anchor="NODESID" title="IGP-Node Segment, Node-SID">
        <t>An IGP Node-SID MUST NOT be associated with a prefix that is owned
        by more than one router within the same routing domain.</t>
      </section>

      <section anchor="ANYSID" title="IGP-Anycast Segment, Anycast SID">
        <t>An "Anycast Segment" or "Anycast SID" enforces the ECMP-aware
        shortest-path forwarding towards the closest node of the anycast set.
        This is useful to express macro-engineering policies or protection
        mechanisms.</t>

        <t>An IGP-Anycast segment MUST NOT reference a particular node.</t>

        <t>Within an anycast group, all routers in an SR domain MUST advertise
        the same prefix with the same SID value.</t>

        <section anchor="AnycastMPLS" title="Anycast SID in SR-MPLS">
          <figure anchor="FIGTRANSIT" title="Transit device groups ">
            <artwork><![CDATA[                            +--------------+
                            |   Group A    |
                            |192.0.2.10/32 | 
                            |    SID:100   |
                            |              |
                     +-----------A1---A3----------+
                     |      |    | \ / |   |      |
          SID:10     |      |    |  /  |   |      |     SID:30
    203.0.113.1/32   |      |    | / \ |   |      |  203.0.113.3/32
            PE1------R1----------A2---A4---------R3------PE3
              \     /|      |              |      |\     /
               \   / |      +--------------+      | \   /
                \ /  |                            |  \ /
                 /   |                            |   /
                / \  |                            |  / \
               /   \ |      +--------------+      | /   \
              /     \|      |              |      |/     \
            PE2------R2----------B1---B3---------R4------PE4
    203.0.113.2/32   |      |    | \ / |   |      | 203.0.113.4/32
          SID:20     |      |    |  /  |   |      |     SID:40
                     |      |    | / \ |   |      |
                     +-----------B2---B4----------+
                            |              |
                            |   Group B    |
                            | 192.0.2.1/32 |
                            |    SID:200   |
                            +--------------+]]></artwork>
          </figure>

          <t>The figure above describes a network example with two groups of
          transit devices. Group A consists of devices {A1, A2, A3 and A4}.
          They are all provisioned with the anycast address 192.0.2.10/32 and
          the anycast SID 100.</t>

          <t>Similarly, group B consists of devices {B1, B2, B3 and B4} and
          are all provisioned with the anycast address 192.0.2.1/32, anycast
          SID 200. In the above network topology, each PE device has a path to
          each of the groups A and B.</t>

          <t>PE1 can choose a particular transit device group when sending
          traffic to PE3 or PE4. This will be done by pushing the anycast SID
          of the group in the stack.</t>

          <t>Processing the anycast, and subsequent segments, requires special
          care.</t>

          <figure anchor="FIGANYCAST"
                  title="Transit paths via anycast group A ">
            <artwork><![CDATA[                        +-------------------------+
                        |       Group A           |
                        |     192.0.2.10/32       |
                        |        SID:100          |
                        |-------------------------|
                        |                         |
                        |   SRGB:         SRGB:   |
     SID:10             |(1000-2000)   (3000-4000)|             SID:30
       PE1---+       +-------A1-------------A3-------+       +---PE3
              \     /   |    | \           / |    |   \     /
               \   /    |    |  +-----+   /  |    |    \   /
        SRGB:   \ /     |    |         \ /   |    |     \ /   SRGB:
     (7000-8000) R1     |    |          \    |    |      R3 (6000-7000)
                / \     |    |         / \   |    |     / \
               /   \    |    |  +-----+   \  |    |    /   \
              /     \   |    | /           \ |    |   /     \
       PE2---+       +-------A2-------------A4-------+       +---PE4
     SID:20             |   SRGB:         SRGB:   |             SID:40
                        |(2000-3000)   (4000-5000)|
                        |                         |
                        +-------------------------+]]></artwork>
          </figure>

          <t>Considering an MPLS deployment, in the above topology, if device
          PE1 (or PE2) requires to send a packet to the device PE3 (or PE4) it
          needs to encapsulate the packet in an MPLS payload with the
          following stack of labels. <list style="symbols">
              <t>Label allocated by R1 for anycast SID 100 (outer label).</t>

              <t>Label allocated by the nearest router in group A for SID 30
              (for destination PE3).</t>
            </list></t>

          <t>While the first label is easy to compute, in this case since
          there are more than one topologically nearest devices (A1 and A2),
          unless A1 and A2 allocated the same label value to the same prefix,
          determining the second label is impossible. Devices A1 and A2 may be
          devices from different hardware vendors. If both don't allocate the
          same label value for SID 30, it is impossible to use the anycast
          group "A" as a transit anycast group towards PE3. Hence, PE1 (or
          PE2) cannot compute an appropriate label stack to steer the packet
          exclusively through the group A devices. Same holds true for devices
          PE3 and PE4 when trying to send a packet to PE1 or PE2.</t>

          <t>To ease the use of anycast segment, it is recommended to
          configure identical SRGBs on all nodes of a particular anycast
          group. Using this method, as mentioned above, computation of the
          label following the anycast segment is straightforward.</t>

          <t>Using anycast segment without configuring identical SRGBs on all
          nodes belonging to the same device group may lead to misrouting (in
          an MPLS VPN deployment, some traffic may leak between VPNs).</t>
        </section>
      </section>

      <section anchor="ADJSID" title="IGP-Adjacency Segment, Adj-SID">
        <t>The adjacency is formed by the local node (i.e., the node
        advertising the adjacency in the IGP) and the remote node (i.e., the
        other end of the adjacency). The local node MUST be an IGP node. The
        remote node may be an adjacent IGP neighbor or a non-adjacent neighbor
        (e.g., a Forwarding Adjacency, <xref target="RFC4206"/>).</t>

        <t>A packet injected anywhere within the SR domain with a segment list
        {SN, SNL}, where SN is the Node-SID of node N and SNL is an Adj-SID
        attached by node N to its adjacency over link L, will be forwarded
        along the shortest-path to N and then be switched by N, without any IP
        shortest-path consideration, towards link L. If the Adj-SID identifies
        a set of adjacencies, then the node N load-balances the traffic among
        the various members of the set.</t>

        <t>Similarly, when using a global Adj-SID, a packet injected anywhere
        within the SR domain with a segment list {SNL}, where SNL is a global
        Adj-SID attached by node N to its adjacency over link L, will be
        forwarded along the shortest-path to N and then be switched by N,
        without any IP shortest-path consideration, towards link L. If the
        Adj-SID identifies a set of adjacencies, then the node N does
        load-balance the traffic among the various members of the set. The use
        of global Adj-SID allows to reduce the size of the segment list when
        expressing a path at the cost of additional state (i.e.: the global
        Adj-SID will be inserted by all routers within the area in their
        forwarding table).</t>

        <t>An "IGP Adjacency Segment" or "Adj-SID" enforces the switching of
        the packet from a node towards a defined interface or set of
        interfaces. This is key to theoretically prove that any path can be
        expressed as a list of segments.</t>

        <t>The encodings of the Adj-SID include a set of flags supporting the
        following functionalities:</t>

        <t><list style="symbols">
            <t>Eligible for Protection (e.g., using IPFRR or MPLS-FRR).
            Protection allows that in the event the interface(s) associated
            with the Adj-SID are down, that the packet can still be forwarded
            via an alternate path. The use of protection is clearly a policy
            based decision i.e., for a given policy protection may or may not
            be desirable.</t>

            <t>Indication whether the Adj-SID has local or global scope.
            Default scope SHOULD be Local.</t>

            <t>Indication whether the Adj-SID is persistent across control
            plane restarts. Persistence is a key attribute in ensuring that an
            SR Policy does not temporarily result in misforwarding due to
            reassignment of an Adj-SID.</t>
          </list></t>

        <t>A weight (as described below) is also associated with the Adj-SID
        advertisement.</t>

        <t>A node SHOULD allocate one Adj-SID for each of its adjacencies.</t>

        <t>A node MAY allocate multiple Adj-SIDs for the same adjacency. An
        example is to support an Adj-SID which is eligible for protection and
        an Adj-SID which is NOT eligible for protection.</t>

        <t>A node MAY associate the same Adj-SID to multiple adjacencies.</t>

        <t>In order to be able to advertise in the IGP all the Adj-SIDs
        representing the IGP adjacencies between two nodes, parallel adjacency
        suppression MUST NOT be performed by the IGP.</t>

        <t>When a node binds an Adj-SID to a local data-link L, the node MUST
        install the following FIB entry:<figure>
            <artwork><![CDATA[   Incoming Active Segment: V
   Ingress Operation: NEXT
   Egress Interface: L]]></artwork>
          </figure></t>

        <t>The Adj-SID implies, from the router advertising it, the forwarding
        of the packet through the adjacency(ies) identified by the Adj-SID,
        regardless of its IGP/SPF cost. In other words, the use of adjacency
        segments overrides the routing decision made by the SPF algorithm.</t>

        <section anchor="PARALLEL" title="Parallel Adjacencies">
          <t>Adj-SIDs can be used in order to represent a set of parallel
          interfaces between two adjacent routers.</t>

          <t>A node MUST install a FIB entry for any locally originated
          adjacency segment (Adj-SID) of value W attached to a set of links B
          with:<figure>
              <artwork><![CDATA[   Incoming Active Segment: W
   Ingress Operation: NEXT
   Egress interface: load-balance between any data-link within set B]]></artwork>
            </figure></t>

          <t>When parallel adjacencies are used and associated to the same
          Adj-SID, and in order to optimize the load balancing function, a
          "weight" factor can be associated to the Adj-SID advertised with
          each adjacency. The weight tells the ingress (or an
          SDN/orchestration system) about the load-balancing factor over the
          parallel adjacencies. As shown in <xref target="FIGPARALLEL"/>, A
          and B are connected through two parallel adjacencies<figure
              align="center" anchor="FIGPARALLEL"
              title="Parallel Links and Adj-SIDs">
              <artwork align="center"><![CDATA[      link-1    
    +--------+        
    |        |
S---A        B---C
    |        |
    +--------+ 
      link-2    ]]></artwork>
            </figure>Node A advertises following Adj-SIDs and weights: <list
              style="symbols">
              <t>Link-1: Adj-SID 1000, weight: 1</t>

              <t>Link-2: Adj-SID 1000, weight: 2</t>
            </list>Node S receives the advertisements of the parallel
          adjacencies and understands that by using Adj-SID 1000 node A will
          load-balance the traffic across the parallel links (link-1 and
          link-2) according to a 1:2 ratio i.e., twice as many packets will
          flow over Link-2 as compared to Link-1.</t>
        </section>

        <section anchor="LANADJ" title="LAN Adjacency Segments">
          <t>In LAN subnetworks, link-state protocols define the concept of
          Designated Router (DR, in OSPF) or Designated Intermediate System
          (DIS, in IS-IS) that conduct flooding in broadcast subnetworks and
          that describe the LAN topology in a special routing update (OSPF
          Type2 LSA or IS-IS Pseudonode LSP).</t>

          <t>The difficulty with LANs is that each router only advertises its
          connectivity to the DR/DIS and not to each of the individual nodes
          in the LAN. Therefore, additional protocol mechanisms (IS-IS and
          OSPF) are necessary in order for each router in the LAN to advertise
          an Adj-SID associated to each neighbor in the LAN.</t>
        </section>
      </section>

      <section anchor="INTERAREA" title="Inter-Area Considerations">
        <t>In the following example diagram it is assumed that the all areas
        are part of a single SR Domain.</t>

        <t>The example here below assumes the IPv6 control plane with the MPLS
        dataplane.</t>

        <figure align="center" anchor="INTERAREAFIG"
                title="Inter-Area Topology Example">
          <artwork><![CDATA[
              !          !
              !          !
       B------C-----F----G-----K
      /       |          |     |
S---A/        |          |     |
     \        |          |     |
      \D------I----------J-----L----Z (2001:DB8::2:1/128, Node-SID 150)
              !          !             
      Area-1  ! Backbone ! Area 2
              !   area   !]]></artwork>
        </figure>

        <t>In area 2, node Z allocates Node-SID 150 to his local IPv6 prefix
        2001:DB8::2:1/128.</t>

        <t>Area Border Routers (ABR) G and J will propagate the prefix and its
        SIDs into the backbone area by creating a new instance of the prefix
        according to normal inter-area/level IGP propagation rules.</t>

        <t>Nodes C and I will apply the same behavior when leaking prefixes
        from the backbone area down to area 1. Therefore, node S will see
        prefix 2001:DB8::2:1/128 with Prefix-SID 150 and advertised by nodes C
        and I.</t>

        <t>It therefore results that a Prefix-SID remains attached to its
        related IGP Prefix through the inter-area process, which is the
        expected behavior in a single SR Domain.</t>

        <t>When node S sends traffic to 2001:DB8::2:1/128, it pushes
        Node-SID(150) as active segment and forward it to A.</t>

        <t>When packet arrives at ABR I (or C), the ABR forwards the packet
        according to the active segment (Node-SID(150)). Forwarding continues
        across area borders, using the same Node-SID(150), until the packet
        reaches its destination.</t>
      </section>
    </section>

    <section title="BGP Peering Segments">
      <t>BGP segments may be allocated and distributed by BGP.</t>

      <section title="BGP Prefix Segment">
        <t>A BGP-Prefix segment is a BGP segment attached to a BGP prefix.</t>

        <t>A BGP-Prefix segment is global (unless explicitly advertised
        otherwise) within the SR domain.</t>

        <t>The BGP Prefix SID is the BGP equivalent to the IGP Prefix
        Segment.</t>

        <t>A likely use-case for the BGP Prefix Segment is an IGP-free
        hyper-scale spine-leaf topology where connectivity is learned solely
        via BGP <xref target="RFC7938"/></t>
      </section>

      <section anchor="BGPSEGMENTS" title="BGP Peering Segments">
        <t>In the context of BGP Egress Peer Engineering (EPE), as described
        in <xref target="I-D.ietf-spring-segment-routing-central-epe"/>, an
        EPE enabled Egress PE node MAY advertise segments corresponding to its
        attached peers. These segments are called BGP peering segments or BGP
        peering SIDs. They enable the expression of source-routed inter-domain
        paths.</t>

        <t>An ingress border router of an AS may compose a list of segments to
        steer a flow along a selected path within the AS, towards a selected
        egress border router C of the AS and through a specific peer. At
        minimum, a BGP peering Engineering policy applied at an ingress PE
        involves two segments: the Node SID of the chosen egress PE and then
        the BGP peering segment for the chosen egress PE peer or peering
        interface.</t>

        <t>Three types of BGP peering segments/SIDs are defined: PeerNode SID,
        PeerAdj SID and PeerSet SID. <list style="symbols">
            <t>PeerNode SID: a BGP PeerNode segment/SID is a local segment. At
            the BGP node advertising it, its semantics is: <list>
                <t>SR header operation: NEXT.</t>

                <t>Next-Hop: the connected peering node to which the segment
                is related.</t>
              </list></t>

            <t>PeerAdj SID: a BGP PeerAdj segment/SID is a local segment. At
            the BGP node advertising it, the semantic is: <list>
                <t>SR header operation: NEXT.</t>

                <t>Next-Hop: the peer connected through the interface to which
                the segment is related.</t>
              </list></t>

            <t>PeerSet SID. a BGP PeerSet segment/SID is a local segment. At
            the BGP node advertising it, the semantic is: <list>
                <t>SR header operation: NEXT.</t>

                <t>Next-Hop: load-balance across any connected interface to
                any peer in the related group.</t>
              </list>A peer set could be all the connected peers from the same
            AS or a subset of these. A group could also span across AS. The
            group definition is a policy set by the operator.</t>
          </list></t>

        <t>The BGP extensions necessary in order to signal these BGP peering
        segments are defined in <xref
        target="I-D.ietf-idr-bgpls-segment-routing-epe"/></t>
      </section>
    </section>

    <section anchor="BindingSegment" title="Binding Segment">
      <t>In order to provide greater scalability, network opacity, and service
      independence, SR utilizes a Binding SID (BSID). The BSID is bound to an
      SR policy, instantiation of which may involve a list of SIDs. Any
      packets received with active segment = BSID are steered onto the bound
      SR Policy.</t>

      <t>A BSID may either be a local or a global SID. If local, a BSID SHOULD
      be allocated from the SRLB. If global, a BSID MUST be allocated from the
      SRGB.</t>

      <t>Use of a BSID allows the instantiation of the policy (the SID list)
      to be stored only on the node(s) which need to impose the policy.
      Direction of traffic to a node supporting the policy then only requires
      imposition of the BSID. If the policy changes, this also means that only
      the nodes imposing the policy need to be updated. Users of the policy
      are not impacted.</t>

      <section title="IGP Mirroring Context Segment">
        <t>One use case for a Binding Segment is to provide support for an IGP
        node to advertise its ability to process traffic originally destined
        to another IGP node, called the Mirrored node and identified by an IP
        address or a Node-SID, provided that a "Mirroring Context" segment be
        inserted in the segment list prior to any service segment local to the
        mirrored node.</t>

        <t>When a given node B wants to provide egress node A protection, it
        advertises a segment identifying node's A context. Such segment is
        called "Mirror Context Segment" and identified by the Mirror SID.</t>

        <t>The Mirror SID is advertised using the binding segment defined in
        SR IGP protocol extensions <xref
        target="I-D.ietf-isis-segment-routing-extensions"/> .</t>

        <t>In the event of a failure, a point of local repair (PLR) diverting
        traffic from A to B does a PUSH of the Mirror SID on the protected
        traffic. B, when receiving the traffic with the Mirror SID as the
        active segment, uses that segment and processes underlying segments in
        the context of A.</t>
      </section>
    </section>

    <section anchor="MULTICAST" title="Multicast">
      <t>Segment Routing is defined for unicast. The application of the
      source-route concept to Multicast is not in the scope of this
      document.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document does not require any action from IANA.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Segment Routing is applicable to both MPLS and IPv6 data planes.</t>

      <t>Segment Routing adds some meta-data (instructions) to the packet,
      with the list of forwarding path elements (e.g., nodes, links, services,
      etc.) that the packet must traverse. It has to be noted that the
      complete source routed path may be represented by a single segment. This
      is the case of the Binding SID.</t>

      <t>SR by default operates within a trusted domain. Traffic MUST be
      filtered at the domain boundaries.</t>

      <t>The use of best practices to reduce the risk of tampering within the
      trusted domain is important. Such practices are discussed in <xref
      target="RFC4381"/> and are applicable to both SR-MPLS and SRv6.</t>

      <section anchor="MPLSDATAPLANE" title="SR-MPLS">
        <t>When applied to the MPLS data plane, Segment Routing does not
        introduce any new behavior or any change in the way MPLS data plane
        works. Therefore, from a security standpoint, this document does not
        define any additional mechanism in the MPLS data plane.</t>

        <t>SR allows the expression of a source routed path using a single
        segment (the Binding SID). Compared to RSVP-TE which also provides
        explicit routing capability, there are no fundamental differences in
        term of information provided. Both RSVP-TE and Segment Routing may
        express a source routed path using a single segment.</t>

        <t>When a path is expressed using a single label, the syntax of the
        meta-data is equivalent between RSVP-TE <xref target="RFC3209"/> and
        SR.</t>

        <t>When a source routed path is expressed with a list of segments
        additional meta-data is added to the packet consisting of the source
        routed path the packet must follow expressed as a segment list.</t>

        <t>When a path is expressed using a label stack, if one has access to
        the meaning (i.e.: the Forwarding Equivalence Class) of the labels,
        one has the knowledge of the explicit path. For the MPLS data plane,
        as no data plane modification is required, there is no fundamental
        change of capability. Yet, the occurrence of label stacking will
        increase.</t>

        <t>SR domain boundary routers MUST filter any external traffic
        destined to a label associated with a segment within the trusted
        domain. This includes labels within the SRGB of the trusted domain,
        labels within the SRLB of the specific boundary router, and labels
        outside either of these blocks. External traffic is any traffic
        received from an interface connected to a node outside the domain of
        trust.</t>

        <t>From a network protection standpoint, there is an assumed trust
        model such that any node imposing a label stack on a packet is assumed
        to be allowed to do so. This is a significant change compared to plain
        IP offering shortest path routing but not fundamentally different
        compared to existing techniques providing explicit routing capability
        such as RSVP-TE. By default, the explicit routing information MUST NOT
        be leaked through the boundaries of the administered domain. Segment
        Routing extensions that have been defined in various protocols,
        leverage the security mechanisms of these protocols such as
        encryption, authentication, filtering, etc.</t>

        <t>In the general case, a segment routing capable router accepts and
        install labels only if these labels have been previously advertised by
        a trusted source. The received information is validated using existing
        control plane protocols providing authentication and security
        mechanisms. Segment Routing does not define any additional security
        mechanism in existing control plane protocols.</t>

        <t>Segment Routing does not introduce signaling between the source and
        the mid points of a source routed path. With SR, the source routed
        path is computed using SIDs previously advertised in the IP control
        plane. Therefore, in addition to filtering and controlled
        advertisement of SIDs at the boundaries of the SR domain, filtering in
        the data plane is also required. Filtering MUST be performed on the
        forwarding plane at the boundaries of the SR domain and may require
        looking at multiple labels/instruction.</t>

        <t>For the MPLS data plane, there are no new requirements as the
        existing MPLS architecture already allows such source routing by
        stacking multiple labels. And for security protection, <xref
        target="RFC4381"/> and <xref target="RFC5920"/> already call for the
        filtering of MPLS packets on trust boundaries.</t>
      </section>

      <section anchor="IPV6DATAPLANE" title="SRv6 ">
        <t>When applied to the IPv6 data plane, Segment Routing does introduce
        the Segment Routing Header (SRH, <xref
        target="I-D.ietf-6man-segment-routing-header"/>) which is a type of
        Routing Extension header as defined in <xref target="RFC8200"/>.</t>

        <t>The SRH adds some meta-data to the IPv6 packet, with the list of
        forwarding path elements (e.g., nodes, links, services, etc.) that the
        packet must traverse and that are represented by IPv6 addresses. A
        complete source routed path may be encoded in the packet using a
        single segment (single IPv6 address).</t>

        <t>SR domain boundary routers MUST filter any external traffic
        destined to an address within the SRGB of the trusted domain or the
        SRLB of the specific boundary router. External traffic is any traffic
        received from an interface connected to a node outside the domain of
        trust.</t>

        <t>From a network protection standpoint, there is an assumed trust
        model such that any node adding an SRH to the packet is assumed to be
        allowed to do so. Therefore, by default, the explicit routing
        information MUST NOT be leaked through the boundaries of the
        administered domain. Segment Routing extensions that have been defined
        in various protocols, leverage the security mechanisms of these
        protocols such as encryption, authentication, filtering, etc.</t>

        <t>In the general case, an SR IPv6 router accepts and install segments
        identifiers (in the form of IPv6 addresses), only if these SIDs are
        advertised by a trusted source. The received information is validated
        using existing control plane protocols providing authentication and
        security mechanisms. Segment Routing does not define any additional
        security mechanism in existing control plane protocols.</t>

        <t>Problems which may arise when the above behaviors are not
        implemented or when the assumed trust model is violated (e.g., through
        a security breach) include:</t>

        <t><list style="symbols">
            <t>Malicious looping</t>

            <t>Evasion of access controls</t>

            <t>Hiding the source of DOS attacks</t>
          </list></t>

        <t>Security concerns with source routing at the IPv6 data plane are
        more completely discussed in <xref target="RFC5095"/>. The new
        IPv6-based segment routing header is defined in <xref
        target="I-D.ietf-6man-segment-routing-header"/>. This document also
        discusses the above security concerns.</t>
      </section>

      <section title="Congestion Control">
        <t>SR does not introduce new requirements for congestion control. By
        default, traffic delivery is assumed to be best effort. Congestion
        control may be implemented at endpoints. Where SR policies are in use
        bandwidth allocation may be managed by monitoring incoming traffic
        associated with the binding SID identifying the SR policy. Other
        solutions such as <xref target="RFC8084"/> may be applicable.</t>
      </section>
    </section>

    <section anchor="Manageability" title="Manageability Considerations">
      <t>In SR enabled networks, the path the packet takes is encoded in the
      header. As the path is not signaled through a protocol, OAM mechanisms
      are necessary in order for the network operator to validate the
      effectiveness of a path as well as to check and monitor its liveness and
      performance. However, it has to be noted that SR allows to reduce
      substantially the number of states in transit nodes and hence the number
      of elements that a transit node has to manage is smaller.</t>

      <t>SR OAM use cases for the MPLS data plane are defined in <xref
      target="I-D.ietf-spring-oam-usecase"/>. SR OAM procedures for the MPLS
      data plane are defined in <xref target="RFC8287"/>.</t>

      <t>SR routers receive advertisements of SIDs (index, label or IPv6
      address) from the different routing protocols being extended for SR.
      Each of these protocols have monitoring and troubleshooting mechanisms
      to provide operation and management functions for IP addresses that must
      be extended in order to include troubleshooting and monitoring functions
      of the SID.</t>

      <t>SR architecture introduces the usage of global segments. Each global
      segment MUST be bound to a unique index or address within an SR domain.
      The management of the allocation of such index or address by the
      operator is critical for the network behavior to avoid situations like
      mis-routing. In addition to the allocation policy/tooling that the
      operator will have in place, an implementation SHOULD protect the
      network in case of conflict detection by providing a deterministic
      resolution approach.</t>

      <t>When a path is expressed using a label stack, the occurrence of label
      stacking will increase. A node may want to signal in the control plane
      its ability in terms of size of the label stack it can support.</t>

      <t>A YANG data model <xref target="RFC6020"/> for segment routing
      configuration and operations has been defined in <xref
      target="I-D.ietf-spring-sr-yang"/>.</t>

      <t>When Segment Routing is applied to the IPv6 data plane, segments are
      identified through IPv6 addresses. The allocation, management and
      troubleshooting of segment identifiers is no different than the existing
      mechanisms applied to the allocation and management of IPv6
      addresses.</t>

      <t>The DA of the packet gives the active segment address. The segment
      list in the SRH gives the entire path of the packet. The validation of
      the source routed path is done through inspection of DA and SRH present
      in the packet header matched to the equivalent routing table
      entries.</t>

      <t>In the context of SR over the IPv6 data plane, the source routed path
      is encoded in the SRH as described in <xref
      target="I-D.ietf-6man-segment-routing-header"/>. The SR IPv6 source
      routed path is instantiated into the SRH as a list of IPv6 address where
      the active segment is in the Destination Address (DA) field of the IPv6
      packet header. Typically, by inspecting in any node the packet header,
      it is possible to derive the source routed path it belongs to. Similar
      to the context of SR over MPLS data plane, an implementation may
      originate path control and monitoring packets where the source routed
      path is inserted in the SRH and where each segment of the path inserts
      in the packet the relevant data in order to measure the end to end path
      and performance.</t>
    </section>

    <section anchor="Contributors" title="Contributors">
      <t>The following people have substantially contributed to the definition
      of the Segment Routing architecture and to the editing of this
      document:<figure>
          <artwork><![CDATA[Ahmed Bashandy
Cisco Systems, Inc.
Email: bashandy@cisco.com]]></artwork>
        </figure><figure>
          <artwork><![CDATA[Martin Horneffer
Deutsche Telekom
Email: Martin.Horneffer@telekom.de]]></artwork>
        </figure><figure>
          <artwork><![CDATA[Wim Henderickx
Nokia
Email: wim.henderickx@nokia.com]]></artwork>
        </figure><figure>
          <artwork><![CDATA[Jeff Tantsura
Email: jefftant@gmail.com]]></artwork>
        </figure><figure>
          <artwork><![CDATA[Edward Crabbe
Email: edward.crabbe@gmail.com]]></artwork>
        </figure><figure>
          <artwork><![CDATA[Igor Milojevic
Email: milojevicigor@gmail.com]]></artwork>
        </figure><figure>
          <artwork><![CDATA[Saku Ytti
TDC
Email: saku@ytti.fi]]></artwork>
        </figure></t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>We would like to thank Dave Ward, Peter Psenak, Dan Frost, Stewart
      Bryant, Pierre Francois, Thomas Telkamp, Ruediger Geib, Hannes Gredler,
      Pushpasis Sarkar, Eric Rosen, Chris Bowers and Alvaro Retana for their
      comments and review of this document.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.3031.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8200.xml"?>
    </references>

    <references title="Informative References">
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.4206.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.3209.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.4381.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5920.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5095.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6549.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.4915.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5120.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8202.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5440.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.5714.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6020.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.6241.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.7938.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8084.xml"?>

      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8287.xml"?>

      <?rfc include="reference.I-D.ietf-isis-segment-routing-extensions.xml"?>

      <?rfc include="reference.I-D.ietf-ospf-segment-routing-extensions.xml"?>

      <?rfc include="reference.I-D.ietf-ospf-ospfv3-segment-routing-extensions.xml"?>

      <?rfc include="reference.I-D.ietf-pce-segment-routing.xml"?>

      <?rfc include="reference.I-D.ietf-6man-segment-routing-header.xml"?>

      <?rfc include="reference.I-D.ietf-spring-segment-routing-mpls.xml"?>

      <?rfc include="reference.I-D.ietf-spring-oam-usecase.xml"?>

      <?rfc include="reference.I-D.ietf-spring-segment-routing-central-epe.xml"?>

      <?rfc include="reference.I-D.ietf-spring-sr-yang.xml"?>

      <?rfc include="reference.I-D.ietf-spring-resiliency-use-cases.xml"?>

      <?rfc include="reference.I-D.ietf-idr-bgpls-segment-routing-epe.xml"?>
    </references>
  </back>
</rfc>
