<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc ipr="trust200902" docName="draft-decraene-mpls-slid-encoded-entropy-label-id-05" category="std" updates="6790">
	<front>
		<title abbrev="Slice Identification in MPLS EL">Using Entropy Label for Network Slice Identification in MPLS networks.</title>
		<author initials="B." surname="Decraene" fullname="Bruno Decraene" role="editor">
			<organization>Orange</organization>
			<address>
				<email>bruno.decraene@orange.com</email>
			</address>
		</author>
		<author initials="C." surname="Filsfils" fullname="Clarence Filsfils">
			<organization>Cisco Systems, Inc.</organization>
			<address>
				<postal>
					<street></street>
					<country>Belgium</country>
				</postal>
				<email>cf@cisco.com</email>
			</address>
		</author>
		<author initials="W." surname="Henderickx" fullname="Wim Henderickx">
			<organization>Nokia</organization>
			<address>
				<postal>
					<street>Copernicuslaan 50</street>
					<city>Antwerp 2018</city>
					<region>CA</region>
					<code>95134</code>
					<country>Belgium</country>
				</postal>
				<email>wim.henderickx@nokia.com</email>
			</address>
		</author>
		<author initials="T." surname="Saad" fullname="Tarek Saad">
			<organization>Juniper Networks</organization>
			<address>
				<email>tsaad@juniper.net</email>
			</address>
		</author>
		<author initials="V." surname="Beeram" fullname="Vishnu Pavan Beeram">
			<organization>Juniper Networks</organization>
			<address>
				<email>vbeeram@juniper.net</email>
			</address>
		</author>
		<author fullname="Luay Jalil" initials="L." surname="Jalil">
			<organization>Verizon</organization>
			<address>
				<email>luay.jalil@verizon.com</email>
			</address>
		</author>
		<date year="2022" />
		<area>General</area>
		<workgroup>MPLS</workgroup>
		<keyword>Internet-Draft</keyword>
		<abstract>
			<t>
				This document updates
				<xref target="RFC6790" />
				to extend the use of the TTL field of the Entropy Label in order to provide a flexible set of flags called the Entropy Label Control field.
			</t>
			<t>This document also defines a solution to encode a slice identifier in MPLS in order to distinguish packets that belong to different slices, to allow enforcing per network slice policies (.e.g, Qos).</t>
			<t>The slice identification is independent of the topology. It allows for QoS/DiffServ policy on a per slice basis in addition to the per packet QoS/DiffServ policy provided by the MPLS Traffic Class field.</t>
			<t>In order to minimize the size of the MPLS stack and to ease incremental deployment the slice identifier is encoded as part of the Entropy Label.</t>
		</abstract>
	</front>
	<middle>
		<section anchor="introduction" title="Introduction">
			<t>This document defines a solution to encode a slice identifier in MPLS in order to provide QoS on a per slice basis. It allows for QoS/DiffServ policy on a per slice basis in addition to the per packet QoS/DiffServ policy provided by the MPLS Traffic Class field. The slice identification is independent of the topology and the QoS of the network, thus enabling scalable network slicing.</t>
			<t>
				This document encodes the slice identifier in a portion of the MPLS Entropy Label (EL) defined in
				<xref target="RFC6790" />
				. This has advantages as it avoids the use of additional label which would increase the size of the label stack. This also reuses the data plane processing of the Entropy Label on the egress LSR, the signaling of the Entropy Label capability from the egress to the ingress
				<xref target="RFC9088" />
				<xref target="RFC9089" />
				, and the signaling capability of transit routers to read this label
				<xref target="RFC8491" />
				which allows for an easier and faster incremental deployment.
			</t>
		</section>
		<section anchor="Language" title="Requirements Language">
			<t>
				The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14
				<xref target="RFC2119" />
				<xref target="RFC8174" />
				when, and only when, they appear in all capitals, as shown here.
			</t>
		</section>
		<section anchor="ELC" title="Entropy Label Control field">
			<t>
				<xref target="RFC6790" />
				defines the MPLS Entropy Label.
				<xref target="RFC6790" />
				section 4.2 defines the use of the Entropy Label Indicator (ELI) followed by the Entropy Label (EL) and the MPLS header fields (Label, TC, S, TTL) in each.
				<xref target="RFC6790" />
				also specifies that the TTL field of the EL must be set to zero by the ingress LSR.
			</t>

			<t>
				Following the procedures of
				<xref target="RFC6790" />
				EL is never used for forwarding and its TTL is never looked at nor decremented:
				<list style="symbols">
					<t>An EL capable Egress LSR performs a lookup on the ELI and as a result pop two labels: ELI and EL.</t>
					<t>
						An EL non-capable Egress LSR performs a lookup on the ELI and as a result must drop the packet as specified in
						<xref target="RFC3031" />
						for the handling of an invalid incoming label.
					</t>
				</list>
			</t>
			<t>Hence essentially the TTL field of the EL behaves as a reserved field which must be set to zero when sent and ignored when received.</t>
			<t>This documents extends the TTL field of the EL and calls it the Entropy Label Control (ELC) field. The ELC is a set of eight flags: ELC0 for bit 0, ELC1 for bit 1,..., ELC7 for bit 7.</t>
			<t>Given that the MPLS header is very compact (32 bits) with no reserved bits and that MPLS is used within a trusted administrative domain, the semantic of these bits is not standardized but defined on a per administrative domain basis. This allows for increased re-use and flexibility of this scarce resource. As a consequence, an application using one of those buts MUST allow the choice of the bit by configuration by the network operator.</t>
		</section>
		<section anchor="sec-slid" title="Slice Identifier">
			<t>
				Each network slice in an MPLS domain is uniquely identified by a Slice Identifier (SLID)
				<xref target="I-D.bestbar-teas-ns-packet" />
				. This section encodes the SLID in a portion of the MPLS Entropy Label defined in
				<xref target="RFC6790" />
				.
			</t>
			<t>The number of bits to be used for encoding the SLID in the EL is governed by a local policy and uniform within a network slice policy domain.</t>
			<section anchor="sec-ingress" title="Ingress LSR">
				<t>When an ingress LSR classifies that a packet belongs to the slice and that the egress has indicated via signaling that it can process EL for the tunnel, the ingress LSR pushes an Entropy Label with the:</t>
				<t>
					<list style="symbols">
						<t>SLID encoded in the most significant bits of the Entropy Label.</t>
						<t>
							the entropy information encoded in the remaining lower bits of the Entropy Label as described in section 4.2 of
							<xref target="RFC6790" />
							.
						</t>
						<t>SPI bit (SLID Presence Indicator) set in one bit of the ELC field.</t>
					</list>
				</t>

				<t>The choice of the ELC field used for SPI, and the number of bits to be used for encoding the SLID MUST be configurable by the network operator.</t>
				<t>The slice classification method is outside the scope of this document.</t>
				<t>
					The encoding of the Slide ID in the Entropy Label is in line with the specification of the Flow Label as the slide identification _is_ a property of the flow:
					<list style="symbols">
						<t>For a given flow it is constant in all packets.</t>
						<t>It's a property specific to the flow so would typically be used to determine the Entropy Label.</t>
					</list>
				</t>
			</section>
			<section anchor="sec-transit" title="Transit LSR">
				<t>Any LSR that forwards a packet with the SPI bit set MUST use the SLID to select a slice and apply per-slice policies.</t>
				<t>There are many different policies that could define a slice for a particular application or service. The most basic of these is bandwidth-allocation, an implementation complying with this specification SHOULD support the bandwidth-allocation slice as defined in the next section.</t>
			</section>
			<section anchor="sec-bandwidth" title="Bandwidth-Allocation Slice">
				<t>A per-slice policy is configured at each interface of each router in the domain, with one traffic shaper per SLID. The bit rate of each shaper is configured to reflect the bandwidth allocation of the per-slice policy.</t>
				<t>If shapers are not available, or desirable, an implementation MAY configure one scheduling queue per SLID with a guaranteed bandwidth equal to the bandwidth-allocation for the slice. This option allows a slice to consume more bandwidth than its allocation when available.</t>
				<t>Per-slice shapers or queues effectively provides a virtual port per slice. This solution MAY be complemented with a per-virtual-port hierarchical DiffServ policy. Within the context of one specific slice, packets are further classified into children DiffServ queues which hang from the virtual port. The Traffic Class value in the MPLS header SHOULD be used for queue selection.</t>
			</section>
			<section anchor="sec-backward-compatibility" title="Backward Compatibility">
				<t>
					The Entropy Label usage described in this document is consistent with
					<xref target="RFC6790" />
					as ingress LSRs freely chooses the EL of a given flow, and transit LSRs treat the EL as an opaque set of bits.
				</t>
				<t>
					As per
					<xref target="RFC6790" />
					an ingress LSR that does not support this extension has the SPI bit cleared, and thus does not enable the SLID semantic of the Entropy bits. Hence, SLID-aware transit LSRs will not classify these packets into a slice.
				</t>
			</section>
			<section anchor="benefits" title="Benefits">
				<t>
					From a Segment Routing architecture perspective, this network slice identifier for SR-MPLS is inline with the network slice identifier for SRv6 proposed in
					<xref target="I-D.filsfils-spring-srv6-stateless-slice-id" />
					.
				</t>
				<t>
					From an SR-MPLS perspective, using the EL to carry the network slice identifier has multiple benefits:
					<list style="symbols">
						<t>This limits the number of labels pushed on the MPLS stack compared to using a pair of labels (ELI+EL) for flow entropy plus two or three labels for the slice indicator and the slice identifier. This is beneficial for the ingress LSR which may have limitations with regards to the number of labels pushed, for the transit LSR which may have limitations with regards to the label stack depth to be examined during transit in order to read both the entropy and the SLID. This presents additional benefit to network operators by reducing the packet overhead for traffic carried through the network;</t>
						<t>This avoids defining new extensions for the signaling of the egress capability to support the slice indicator and the slice identifier;</t>
						<t>This improves incremental deployment as all egress LSRs supporting EL can be sent the slice identifier from day one, allowing slice classification on transit LSRs.</t>
					</list>
				</t>
			</section>
		</section>
		<section anchor="Examples" title="Examples of more ELC usages">
			<section anchor="E2Eloss" title="End to end absolute loss measurements">
				<t>
					This section describes the usage of a ELC flag to enable packet loss measurements, as described in section 3.1 of
					<xref target="RFC8321" />
					.
				</t>
				<t>TBD</t>
			</section>
			<section anchor="Sampling" title="Programmed sampling of packets">
				<t>This section describes the usage of a ELC flag to detect end to end packet loss.</t>
				<t>TBD</t>
			</section>
		</section>
		<section anchor="Deployment" title="Deployment Considerations">
			<t>
				The number of bits to be used for encoding the SLID in the EL affects the number of effective entropy bits. The total number of raw bits available for encoding entropy is not changed as the slice ID is part of the flow identification and contains some entropy. However this is expected to reduce the effective number of entropy bit as the slice ID is likely to less effectively encode entropy information compared to the use of a good hash function. The effective reduction of entropy depends on how good the
				<xref target="RFC6790" />
				entropy value is computed (which is implementation dependent) and the statistical distribution of the usage of slice identifier. In order to minimize this reduction, network operators should set the size of the field encoding the slice identifier to the minimum size required for the number of slides used in deployment.
			</t>
		</section>
		<section anchor="Implementations" title="Implementation Status">
			<t>
				The following hardware platforms support “end-to-end” network slicing/ partitioning as described in
				<xref target="sec-slid" />
				:
				<list style="symbols">
					<t>Cisco NCS platforms based on Broadcom Jericho2 family of ASIC. The support includes the ingress as well as the transit LSRs roles.</t>
				</list>
			</t>
		</section>
		<section anchor="Security" title="Security Considerations">
			<t>The MPLS forwarding plane is insecure. If an adversary can affect the forwarding plane, then they can inject data, remove data, corrupt data, or modify data.</t>
			<t>This documents additionnally allows an adversary to change the slice of a packet, and to add or remove indicators/flags.</t>
			<t>Link-level security mechanisms can help mitigate some on-link attacks, but does nothing to preclude hostile nodes.</t>
		</section>
		<section anchor="IANA_Consideration" title="IANA Considerations">
			<t>This document has no IANA actions.</t>
		</section>
		<section anchor="authors-notes" title="Changes / Authors Notes">
			<t>[RFC Editor: Please remove this section before publication]</t>
			<t>00: Initial version.</t>
			<t>01: New co-author</t>
			<t>02: Editorial precision that the slice ID is a component of flow entropy hence inline with the use of entropy label.</t>
			<t>03: Refresh.</t>
			<t>04: New sections: Implementation Status, Security Considerations, Deployment Considerations, Requirements Language, IANA Considerations. Editorial: replace "SR-MPLS" by "MPLS".</t>
			<t>05: Refresh.</t>
		</section>
		<section anchor="Acknowledgements" title="Acknowledgements">
			<t>Authors would like to thanks Zafar Ali for his contributions.</t>
		</section>
	</middle>
	<back>
		<references title='Normative References'>
			<?rfc include="reference.RFC.2119"?>
			<?rfc include="reference.RFC.6790"?>
			<?rfc include="reference.RFC.8174"?>
			<?rfc include="reference.RFC.9088"?>
			<?rfc include="reference.RFC.9089"?>
		</references>
		<references title='Informative References'>
			<?rfc include="reference.RFC.3031"?>
			<?rfc include="reference.I-D.bestbar-teas-ns-packet"?>
			<?rfc include="reference.I-D.filsfils-spring-srv6-stateless-slice-id"?>
			<?rfc include="reference.RFC.8491"?>
			<?rfc include="reference.RFC.8321"?>
		</references>
	</back>
</rfc>