Segment Routing with the MPLS Data Plane
Extracted elements (25)
Mirror SID is designed as a generalization of RFC 5331's context label: a Mirror SID does not presuppose any specific encapsulation for the packet beneath the top label, making it applicable to any payload type, not just MPLS.
SR-MPLS requires no change to the MPLS forwarding plane because Segment IDs (SIDs) are instantiated as MPLS labels and the SR header is instantiated as a stack of MPLS labels. The existing MPLS architecture (RFC 3031) accommodates SR without modification.
The SR architecture permits multiple SIDs for the same prefix, enabling different forwarding behaviors (distinct paths, ECMP, UCMP) per destination. An operator assigns multiple MPLS labels or indices to the same prefix, each with a distinct forwarding behavior installed in the FIB.
Coexistence of SR over the MPLS forwarding plane with LDP (RFC 5036) is specified in RFC 8661. When a neighbor does not support SR, a router may fall back to using a downstream label determined by another MCC such as LDP to forward the packet.
A FEC that loses its incoming label to the tiebreaking rules MUST NOT be installed in the FIB with an outgoing Segment Routing label based on the SID corresponding to the lost incoming label. The ingress node must apply the same collision-resolution procedure using the receiving node's data when determining the outgoing label.
A network operator SHOULD configure at least one node segment per routing instance, topology, or algorithm so that the node is reachable within its routing domain and can be used by an SR Policy and TI-LFA.
An implementation MUST NOT allow MCCs belonging to the same router to assign the same incoming label to more than one SR FEC. When a collision occurs across MCCs, tiebreaking rules MUST deterministically select one FEC regardless of the order in which the colliding FEC-to-label mappings are received.
The label value corresponding to any SID MUST NOT come from the range of special-purpose MPLS labels defined in RFC 7274.
The list of ranges comprising the SRGB MUST NOT overlap, and every range MUST NOT cover or overlap with a reserved label value or range (RFC 7274). If the SRGB does not conform to these rules, it MUST be completely ignored by all routers in the routing domain.
The MCC MUST ensure every label value corresponding to any SID it installs is unique within the router—it MUST only represent that one SID and MUST NOT be used for any other forwarding purpose on the same router.
When redistributing SIDs with prefixes between routing protocol instances with different SRGBs, the index MUST NOT be redistributed. If the receiving instance chooses to advertise an index, it MUST allocate a fresh index relative to its own SRGB and compute the local label accordingly.
A local segment MAY be allocated from the SRLB (Segment Routing Local Block) or from any unused label not in the special-purpose range. The SRLB consists of local labels reserved by the node for certain local segments, with the same structural rules as the SRGB.
A Mirror SID causes the NEXT operation (pop topmost label) followed by a lookup in the mirrored forwarding table using the packet contents exposed after the pop. The Mirror SID is a generalization of the context label in RFC 5331 because it makes no assumptions about the packet type underneath the top label.
FEC fields are encoded in big-endian order for numerical comparison. Routing Instance ID is 16 bits; address family is 8 bits (IPv4=100, IPv6=110, IPv4 must be numerically less); all addresses are 128 bits (IPv4 in most-significant bits); prefixes are (8+128) bits with length preceding the prefix; Algorithm is 16 bits; Color ID is 32 bits.
FEC type codepoints for numerical ordering are: 120 for (Prefix, Routing Instance, Topology, Algorithm); 130 for (next hop, outgoing interface); 140 for parallel adjacency; 150 for SR Policy; 160 for Mirror SID. Alternative values may be used if the same relative ordering is maintained.
For PUSH and CONTINUE of a global SID Si toward neighbor N: if N lacks SR capability or has an invalid/too-small SRGB, the router falls back to standard MPLS forwarding, an alternative next hop, or drops the packet in that order. Otherwise, the outgoing label is calculated from N's SRGB and the SID index per Section 2.4.
In the MPLS domain, the active segment on a packet is always the topmost label. Its value is matched against the FIB entry calculated per Section 2.4. For global SIDs this label value is derived from the SID index and the neighbor's SRGB; for local SIDs the MCC directly specifies the label value.
Incoming label collision tiebreaking proceeds in order: (1) lowest FEC administrative distance wins; (2) if tied, smallest numerical FEC value wins using defined FEC encodings. First-come-first-served tiebreaking is explicitly prohibited. The network operator MUST deploy the same tiebreaking rules within an IGP flooding area.
SR FEC types for incoming label collision resolution are: (Prefix, Routing Instance, Topology, Algorithm); (next hop, outgoing interface); (number of adjacencies, list of next hops, list of outgoing interface IDs) for parallel adjacencies; (Endpoint, Color) for SR Policy; and (Mirror SID). Zero MUST be used for Topology and Algorithm fields when not defined by an MCC.
The CONTINUE operation swaps the incoming top label with an outgoing label whose value is calculated using the SRGB of the next-hop neighbor (Section 2.4). It is equivalent to the standard MPLS label-swap operation.
The NEXT operation pops the topmost MPLS label; the action before and/or after popping depends on the instruction associated with the active SID. For an Adj-SID, after popping, the packet is sent out the physical or virtual interface toward the next hop corresponding to the Adj-SID.
The PUSH operation prepends one or more MPLS labels to an incoming packet before sending it out a physical or virtual interface (e.g., UDP tunnel, L2TPv3) toward a next hop. TTL and Traffic Class fields of each label stack entry must be set per local policy; this document does not specify those rules.
The Segment Routing Global Block (SRGB) is represented as a list of MPLS label ranges [Ll(1),Lh(1)], [Ll(2),Lh(2)], ..., [Ll(k),Lh(k)]; the SRGB need not be a contiguous range of labels. The SRGB is used exclusively to instantiate global SIDs into the MPLS forwarding plane.
To map SID index I to an MPLS label within a multi-range SRGB, the total SRGB size is computed as the sum of all range sizes. The label is found by walking the ranges until the cumulative size exceeds I, then computing label = I - temp + Ll(j). The index must satisfy 0 <= I < size.
RFC 8660 does not introduce additional security requirements or mechanisms beyond those described in the Segment Routing Architecture (RFC 8402). Implementors are directed to RFC 8402 for all relevant security considerations.