<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<!ENTITY SFCARCH SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7665.xml">
<!ENTITY SFCSTATE SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7498.xml">
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8665 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8665.xml">
<!ENTITY RFC8667 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8667.xml">
<!ENTITY RFC8402 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml">
<!ENTITY RFC3031 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3031.xml">
<!ENTITY RFC8200 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml">
<!ENTITY NSH SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8300.xml">
<!ENTITY RFC8754 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml">
<!ENTITY RFC8660 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8660.xml">
<!ENTITY RFC8596 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8596.xml">
<!ENTITY RFC8663 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8663.xml">
<!ENTITY SRARCH SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-spring-segment-routing-15.xml">
<!ENTITY SRMPLS SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-spring-segment-routing-mpls-12.xml">
<!ENTITY SRV6 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-6man-segment-routing-header-09.xml">
<!ENTITY SRSPGM SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-spring-sr-service-programming-07.xml">

]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation --> <!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="3"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-ietf-spring-nsh-sr-15" ipr="trust200902">
	<front>
		<title abbrev="NSH-SR SFC">Integration of Network Service Header (NSH) and Segment Routing 
for Service Function Chaining (SFC)</title>
		
		<author fullname="James N Guichard" initials="J" surname="Guichard" role="editor">
			<organization>Futurewei Technologies</organization>
			<address>
				<postal>
					<street>2330 Central Express Way</street>
					<city>Santa Clara</city>
					<country>USA</country>
				</postal>
				<email>james.n.guichard@futurewei.com</email>
			</address>
		</author>
 
		<author fullname="Jeff Tantsura" initials="J" surname="Tantsura" role="editor">
			<organization>Nvidia</organization>
			<address>
				<postal>
					<street></street>
					<city></city>
					<country>USA</country>
				</postal>
				<email>jefftant.ietf@gmail.com</email>
			</address>
		</author>
		 
		<date month="June" year="2023"/>

		<area>RTG</area>

		<workgroup>SPRING</workgroup>

		<keyword>NSH, SR, MPLS-SR, SRv6, SFC</keyword>

		<abstract>
			<t>
			        This document describes the integration of the Network Service Header (NSH) and Segment Routing (SR), 
                                as well as encapsulation details, to efficiently support Service Function Chaining (SFC) while maintaining 
                                separation of the service and transport planes as originally intended by the SFC architecture.
			</t><t>
			        Combining these technologies allows SR to be used for steering packets between Service Function 
                                Forwarders (SFF) along a given Service Function Path (SFP) while NSH has the responsibility for 
                                maintaining the integrity of the service plane, the SFC instance context, and any associated metadata.
			</t><t>
                                This integration demonstrates that NSH and SR can work cooperatively and provide a network operator 
                                with the flexibility to use whichever transport technology makes sense in specific areas of their network 
                                infrastructure while still maintaining an end-to-end service plane using NSH.
			</t>
		</abstract>
	</front>
	
	<middle>
		

		<section title="Introduction">
			<t>

			</t>
		<section title="SFC Overview and Rationale">
			<t>
				The dynamic enforcement of a service-derived and adequate forwarding policy for packets entering a network that supports advanced Service Functions (SFs) has become a 
				key challenge for network operators. For instance, cascading SFs at the 3GPP (Third Generation Partnership Project) Gi interface (N6 interface in 5G architecture) has 
                                shown limitations such as 1) redundant classification features must be supported by many SFs to execute their function, 2) some SFs receive traffic that they are not 
                                supposed to process (e.g., TCP proxies receiving UDP traffic) which inevitably affects their dimensioning and performance, and 3) an increased design complexity related 
                                to the properly ordered invocation of several SFs.
			</t><t>
				In order to solve those problems, and to decouple the service's topology from the underlying physical network while allowing for simplified service delivery, Service 
				Function Chaining (SFC) techniques have been introduced <xref target="RFC7665"></xref>.
			</t><t>
				SFC techniques are meant to rationalize the service delivery logic and master the resulting complexity while optimizing service activation time cycles for operators 
				that need more agile service delivery procedures to better accommodate ever-demanding customer requirements. SFC allows network operators to dynamically create service planes 
				that can be used by specific traffic flows. Each service plane is realized by invoking and chaining the relevant service functions in the right sequence.

				<xref target="RFC7498"></xref> provides an overview of the overall SFC problem space and <xref target="RFC7665"></xref> specifies an SFC data plane architecture. 
                                The SFC architecture does not make assumptions on how advanced features (e.g., load-balancing, loose or strict service paths) could be enabled within 
                                a domain. Various deployment options are made available to operators with the SFC architecture and this approach is fundamental to accommodate various and heterogeneous 
                                deployment contexts.
			</t><t>
				Many approaches can be considered for encoding the information required for SFC purposes (e.g., communicate a service chain pointer, encode a list of loose/explicit paths, 
				or disseminate a service chain identifier together with a set of context information). Likewise, many approaches can also be considered for the channel to be used to carry 
				SFC-specific information (e.g., define a new header, re-use existing packet header fields, or define an IPv6 extension header). Among all these approaches, the IETF created a 
				transport-independent SFC encapsulation scheme: NSH <xref target="RFC8300"></xref>. This design is pragmatic as it does not require replicating the same specification effort as a function of underlying 
                                transport encapsulation. Moreover, this design approach encourages consistent SFC-based service delivery in networks enabling distinct transport protocols in various network 
                                segments or even between SFFs vs SF-SFF hops. 
			</t>
                </section>
                <section 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>
		
		<section title="SFC within Segment Routing Networks">
                        <t>
                                [RFC8300] specifies how to encapsulate the Network Service Header directly within a link-layer header. In this document, we assign an IP 
                                protocol number [TBA1] for the NSH, so that it can also be encapsulated directly within an IP header. The procedures that follow make use of this property.
                        </t>
			<t>
				<xref target="RFC8402">As described in</xref>, SR leverages the source routing technique. Concretely, a node steers a packet through an
				SR policy instantiated as an ordered list of instructions called segments. While initially designed for policy-based source routing, SR also finds 
				its application in supporting SFC <xref target="I-D.ietf-spring-sr-service-programming"></xref>.
                        </t><t>
				The two SR data plane encapsulations, namely <xref target="RFC8660">SR-MPLS</xref> and <xref target="RFC8754">SRv6</xref>,
				can both encode an SF as a segment so that an SFC can be specified as a segment list. Nevertheless, and as discussed in <xref target="RFC7498"></xref>, 
				traffic steering is only a subset of the issues that motivated the design of the SFC architecture. Further considerations such as simplifying classification at intermediate 
				SFs and allowing for coordinated behaviors among SFs by means of supplying context information (a.k.a. metadata) should be considered when designing an SFC data plane solution.    
			</t><t> 
				While each scheme (i.e., NSH-based SFC and SR-based SFC) can work independently, this document describes how the two can be used together in concert and complement 
				each other through two representative application scenarios. Both application scenarios may be supported using either SR-MPLS or SRv6:
			</t><t>	
				<list style="symbols">

					<t>
						NSH-based SFC with SR-based transport plane: in this scenario SR-MPLS or SRv6 provides the transport encapsulation between SFFs while NSH is used to convey and trigger SFC policies.
					</t><t>
						SR-based SFC with integrated NSH service plane: in this scenario each service hop of the SFC is represented as a segment of the SR segment-list. SR is thus responsible
						for steering traffic through the necessary SFFs as part of the segment routing path while NSH is responsible for maintaining the service plane and holding the SFC
						instance context (including associated metadata).
					</t>
				
         		</list>
				It is of course possible to combine both of these two scenarios to support specific deployment requirements and use cases.
			
			</t>
                        <t> A classifier MUST use an NSH Service Path Identifier (SPI) per SR policy so that different traffic flows that use the same NSH Service Function Path (SFP) but different SR policy can coexist on the same SFP without conflict during SFF processing.</t>
		 
		</section>
<section title="NSH-based SFC with SR-MPLS or SRv6 Transport Tunnel"> 
			<t>
				Because of the transport-independent nature of NSH-based service function chains, it is expected that the NSH has broad applicability across different network domains (e.g., access, core).
				By way of illustration the various SFs involved in a service function chain may be available in a single data center, or spread throughout multiple locations (e.g., data centers, different Points of Presence (POPs)), depending
				upon the network operator preference and/or availability of service resources. Regardless of where the SFs are deployed it is necessary to provide traffic steering through a set
				of SFFs, and when NSH and SR are integrated, this is provided by SR-MPLS or SRv6.    
				
			</t><t>
				The following three figures provide an example of an SFC established flow F that has SF instances located in different data centers, DC1 and DC2. For the purpose of illustration, let
				the SFC's NSH SPI be 100 and the initial Service Index (SI) be 255.
			</t><t>
				Referring to <xref target="figure_1"></xref>, packets of flow F in DC1 are classified into an NSH-based SFC and encapsulated after classification
				as &lt;Inner Pkt&gt;&lt;NSH: SPI 100, SI 255&gt;&lt;Outer-transport&gt; and forwarded to SFF1 (which is the first SFF hop for this service function chain).
			</t><t>
                                After removing the outer transport encapsulation, SFF1 uses the SPI and SI carried within the NSH encapsulation to determine that it should forward the packet to SF1. SF1 applies its service, 
                                decrements the SI by 1, and returns the packet to SFF1. SFF1 therefore has &lt;SPI 100, SI 254&gt; when the packet comes back from SF1. SFF1 does a lookup on &lt;SPI 100, SI 254&gt; which 
                                results in &lt;next-hop: DC1-GW1&gt; and forwards the packet to DC1-GW1.
			</t><t>
				<figure title="SR for inter-DC SFC - Part 1" anchor="figure_1">
          			<artwork>

+--------------------------- DC1 ----------------------------+ 
|                          +-----+                           |                                                           
|                          | SF1 |                           |                                                          
|                          +--+--+                           |                                                           
|                             |                              |                                                                 
|                             |                              |                                                               
|        +------------+       |    +------------+            |                             
|        | N(100,255) |       |    | N(100,254) |            |                              
|        +------------+       |    +------------+            |                             
|        | F:Inner Pkt|       |    | F:Inner Pkt|            |                            
|        +------------+  ^    |  | +------------+            |                           
|                    (2) |    |  | (3)                       |                                                    
|                        |    |  v                           |                                                            
|                  (1)        |         (4)                  |                     
|+------------+   ---->    +--+---+    ---->     +---------+ |    
||            |    NSH     |      |     NSH      |         | |      
|| Classifier +------------+ SFF1 +--------------+ DC1-GW1 + | 
||            |            |      |              |         | |              
|+------------+            +------+              +---------+ |              
|                                                            |
|             +------------+       +------------+            |        
|             | N(100,255) |       | N(100,254) |            |         
|             +------------+       +------------+            |          
|             | F:Inner Pkt|       | F:Inner Pkt|            |          
|             +------------+       +------------+            |
|                                                            |
+------------------------------------------------------------+

          			</artwork>
				</figure>
			</t><t>
				Referring now to <xref target="figure_2"></xref>, DC1-GW1 performs a lookup using the information conveyed in the NSH which results in &lt;next-hop: DC2-GW1, encapsulation: SR&gt;. 
				The SR encapsulation, which may be SR-MPLS or SRv6, has the SR segment-list to forward the packet across the inter-DC network to DC2.  
				<figure title="SR for inter-DC SFC - Part 2" anchor="figure_2">
          			<artwork>

                  +----------- Inter DC ----------------+             
           (4)    |                (5)                  |                    
+------+  ---->   | +---------+   ---->     +---------+ |  
|      |   NSH    | |         |     SR      |         | |
+ SFF1 +----------|-+ DC1-GW1 +-------------+ DC2-GW1 + |
|      |          | |         |             |         | |         
+------+          | +---------+             +---------+ |      
                  |                                     |
                  |          +------------+             |
                  |          | S(DC2-GW1) |             |
                  |          +------------+             |
                  |          | N(100,254) |             |
                  |          +------------+             |
                  |          | F:Inner Pkt|             |
                  |          +------------+             |
                  +-------------------------------------+

          			</artwork>
				</figure>

			</t><t>
				When the packet arrives at DC2, as shown in <xref target="figure_3"></xref>, the SR encapsulation is removed and DC2-GW1 performs a lookup on the NSH which results in 
				next hop: SFF2. When SFF2 receives the packet, it performs a lookup on &lt;NSH: SPI 100, SI 254&gt; and determines to forward the packet to SF2. SF2 applies its service, 
                                decrements the SI by 1, and returns the packet to SFF2. SFF2 therefore has &lt;NSH: SPI 100, SI 253&gt; when the packet comes back from SF2.  SFF2 does a lookup on &lt;NSH: SPI 100, SI 253&gt; 
                                which results in the end of the service function chain. 
   
				<figure title="SR for inter-DC SFC - Part 3" anchor="figure_3">
          			<artwork>

                   +------------------------ DC2 ----------------------+ 
                   |                         +-----+                   |                                                           
                   |                         | SF2 |                   |                                                          
                   |                         +--+--+                   |                                                           
                   |                            |                      |                                                                 
                   |                            |                      |                                                               
                   |        +------------+      |    +------------+    |                             
                   |        | N(100,254) |      |    | N(100,253) |    |                              
                   |        +------------+      |    +------------+    |                             
                   |        | F:Inner Pkt|      |    | F:Inner Pkt|    |                            
                   |        +------------+  ^   |  | +------------+    |                           
                   |                    (7) |   |  | (8)               |                                                    
                   |                        |   |  v                   |                                                            
             (5)   |                 (6)        |     (9)              |          
+---------+  --->  | +----------+   ---->    +--+---+ ---->            |    
|         |   SR   | |          |    NSH     |      |  IP              |      
+ DC1-GW1 +--------|-+ DC2-GW1  +------------+ SFF2 |                  | 
|         |        | |          |            |      |                  |              
+---------+        | +----------+            +------+                  |              
                   |                                                   |
                   |           +------------+      +------------+      |        
                   |           | N(100,254) |      | F:Inner Pkt|      |         
                   |           +------------+      +------------+      |          
                   |           | F:Inner Pkt|                          |          
                   |           +------------+                          |
                   +---------------------------------------------------+

          			</artwork>
				</figure>				
				
				
				The benefits of this scheme are listed hereafter:
			</t><t>
				<list style="symbols">
					<t> 
						The network operator is able to take advantage of the transport-independent nature of the NSH encapsulation, while the service is provisioned end-to-end.
					</t><t>
						The network operator is able to take advantage of the traffic steering (traffic engineering) capability of SR where appropriate.
					</t><t>
						Clear responsibility division and scope between NSH and SR.
					</t>
				</list>
			</t><t>
				Note that this scenario is applicable to any case where multiple segments of a service function chain are distributed across multiple domains or where traffic-engineered paths are necessary
				between SFFs (strict forwarding paths for example). Further, note that the above example can also be implemented using end-to-end segment routing between SFF1 and SFF2. (As such DC-GW1 and DC-GW2 
				are forwarding the packets based on segment routing instructions and are not looking at the NSH header for forwarding.)
			</t>	
		</section>
		<section title="SR-based SFC with Integrated NSH Service Plane">
			<t>
				In this scenario we assume that the SFs are NSH-aware and therefore it should not be necessary to implement an SFC proxy to achieve SFC. 
				The operation relies upon SR-MPLS or SRv6 to perform SFF-SFF transport and NSH to provide the service plane between SFs thereby maintaining SFC context (e.g., the service plane path referenced by the SPI) and any associated metadata.
			</t><t> 
				When a service function chain is established, a packet associated with that chain will first carry an NSH that will be used to maintain the end-to-end service plane through use of the SFC context. 
				The SFC context is used by an SFF to determine the SR segment list for forwarding the packet to the next-hop SFFs. 
				The packet is then encapsulated using the SR header and forwarded in the SR domain following normal SR operations.
			</t><t>
				When a packet has to be forwarded to an SF attached to an SFF, the SFF performs a lookup on the segment identifier (SID) associated with the SF. In the case of SR-MPLS this will be a prefix SID <xref target="RFC8402"></xref>. 
                                In the case of SRv6, the behavior described within this document is assigned the name END.NSH, and section 9.2 requests allocation of a code point by IANA. The result of this lookup allows the SFF 
                                to retrieve the next hop context between the SFF and SF (e.g., the destination MAC address in case Ethernet encapsulation is used between SFF and SF). In addition, the SFF strips the SR 
                                information from the packet, updates the SR information, and saves it to a cache indexed by the NSH Service Path Identifier (SPI) and the Service Index (SI) decremented by 1. This saved SR 
                                information is used to encapsulate and forward the packet(s) coming back from the SF.
                        </t><t>
                                The behavior of remembering the SR segment-list occurs at the end of the regularly defined logic. The behavior of reattaching the segment-list occurs before the SR process 
                                of forwarding the packet to the next entry in the segment-list. Both behaviors are further detailed in section 5.
			</t><t>
                                When the SF receives the packet, it processes it as usual. When the SF is co-resident with a classifier, the already processed packet may be re-classified. The SF sends 
                                the packet back to the SFF. Once the SFF receives this packet, it extracts the SR information using the NSH SPI and SI as the index into the cache. The SFF then pushes 
                                the retrieved SR header on top of the NSH header, and forwards the packet to the next segment in the segment-list. The lookup in the SFF cache might fail if 
                                re-classification at the SF changed the NSH SPI and/or SI to values that do not exist in the SFF cache. In such a case, the SFF must generate an error and drop the packet.
			</t><t>
				<xref target="figure_4"></xref> illustrates an example of this scenario.

				<figure title="NSH over SR for SFC" anchor="figure_4">
          			<artwork>
	 
                        +-----+                       +-----+                                                                                 
                        | SF1 |                       | SF2 |                                                                                 
                        +--+--+                       +--+--+                                                                                   
                           |                             |                                                                 
                           |                             |                                                               
             +-----------+ | +-----------+ +-----------+ | +-----------+                                      
             |N(100,255) | | |N(100,254) | |N(100,254) | | |N(100,253) |                                       ,
             +-----------+ | +-----------+ +-----------+ | +-----------+                                   
             |F:Inner Pkt| | |F:Inner Pkt| |F:Inner Pkt| | |F:Inner Pkt|                            
             +-----------+ | +-----------+ +-----------+ | +-----------+                                  
                     (2) ^ | (3) |                 (5) ^ | (6) |                                                                       
                         | |     |                     | |     |                                                            
                         | |     |                     | |     |                     
                 (1)     | |     v      (4)            | |     v (7) 
+------------+   --->    +-+----+      ---->          +---+--+   -->
|            | NSHoverSR |      |    NSHoverSR        |      |    IP      
| Classifier +-----------+ SFF1 +---------------------+ SFF2 | 
|            |           |      |                     |      |              
+------------+           +------+                     +------+       

             +------------+        +------------+        +------------+
             |   S(SF1)   |        |   S(SF2)   |        | F:Inner Pkt|
             +------------+        +------------+        +------------+             
             |   S(SFF2)  |        | N(100,254) |
             +------------+        +------------+
             |   S(SF2)   |        | F:Inner Pkt|
             +------------+        +------------+
             | N(100,255) |              
             +------------+               
             | F:Inner Pkt|                
             +------------+

          			</artwork>
				</figure>
				
				The benefits of this scheme include:
			</t><t>
				<list style="symbols">
					<t> 
						It is economically sound for SF vendors to only support one unified SFC solution. The SF is unaware of the SR.
					</t><t>
						It simplifies the SFF (i.e., the SR router) by nullifying the needs for re-classification and SR proxy.
					</t><t>
						SR is also used for forwarding purposes including between SFFs.
					</t><t>
						It takes advantage of SR to eliminate the NSH forwarding state in SFFs. This applies each time strict or loose SFPs are in use. 
					</t><t>
						It requires no interworking as would be the case if SR-MPLS based SFC and NSH-based SFC were deployed as independent mechanisms in different
						parts of the network.	
					</t>
				</list>
			</t>
		</section>

         
                <section title="Packet Processing for SR-based SFC">
                         <t>
                                This section describes the End.NSH behavior (SRv6), Prefix SID behavior (SR-MPLS), and NSH processing logic.</t>
                <section title="SR-based SFC (SR-MPLS) Packet Processing">
                         <t>
                                When an SFF receives a packet destined to S and S is a local prefix SID associated with an SF, the SFF strips the SR segment-list (label stack) from the packet, updates 
                                the SR information, and saves it to a cache indexed by the NSH Service Path Identifier (SPI) and the Service Index (SI) decremented by 1. This saved SR information is used 
                                to re-encapsulate and forward the packet(s) coming back from the SF.</t>

                </section>
                <section title="SR-based SFC (SRv6) Packet Processing">
                         <t>
                                This section describes the End.NSH behavior and NSH processing logic for SRv6. The pseudocode is shown below.</t>
                         <t>
                                When N receives a packet destined to S and S is a local End.NSH SID, the processing is the same as that specified by <xref target="RFC8754"></xref> section 4.3.1.1, up through line S.15.</t>
                         <t>
                                After S.15, if S is a local End.NSH SID, then:</t>
                         <t>
                                S15.1. Remove and store IPv6 and SRH headers in local cache indexed by &lt;NSH: service-path-id, service-index -1&gt;</t>
                         <t>
                                S15.2. Submit the packet to the NSH FIB lookup and transmit to the destination associated with &lt;NSH: service-path-id, service-index&gt;</t>
                         <t>
                                Note: The End.NSH behavior interrupts the normal SRH packet processing as described in <xref target="RFC8754"></xref> section 4.3.1.1, which does not continue to S16 at this time.</t>
                         <t>
                                When a packet is returned to the SFF from the SF, reattach the cached IPv6 and SRH headers based on the &lt;NSH: service-path-id, service-index&gt; from the NSH header. 
                                Then resume processing from <xref target="RFC8754"></xref> section 4.3.1.1 with line S.16.</t>
                </section>
                </section>
		<section anchor="Encapsulation" title="Encapsulation">
			<t>
				
			</t>
		<section anchor="MPLS-SR" title="NSH using SR-MPLS Transport">
			<t>
				SR-MPLS instantiates Segment IDs (SIDs) as MPLS labels and therefore the segment routing header is a stack of MPLS labels. 
			</t><t>
				When carrying NSH within an SR-MPLS transport, the full encapsulation headers are as illustrated in <xref target="figure_5"></xref>.
			</t><t>
				<figure align="center" title="NSH using SR-MPLS Transport" anchor="figure_5">
          			<artwork>

		       +------------------+
		       ~   MPLS-SR Labels ~
		       +------------------+
		       |   NSH Base Hdr   |
		       +------------------+
		       | Service Path Hdr |
		       +------------------+
		       ~     Metadata     ~
		       +------------------+
                    
          			</artwork>
				</figure>
			</t><t>
				<xref target="RFC8402">As described in</xref>, 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.
				When NSH is carried beneath SR-MPLS it is necessary to terminate the NSH-based SFC at the tail-end node of the SR-MPLS label stack. This can be achieved using
                                either the NEXT or CONTINUE operation. 
                        </t><t>
                                If the NEXT operation is to be used, then at the end of the SR-MPLS path it is necessary to provide an indication to the tail-end that NSH follows the SR-MPLS label 
                                stack as described by <xref target="RFC8596"></xref>.
                        </t><t>
                                If the CONTINUE operation is to be used, this is the equivalent of MPLS Ultimate Hop Popping (UHP) and therefore it is necessary to ensure that the penultimate hop node 
                                does not pop the top label of the SR-MPLS label stack and thereby expose NSH to the wrong SFF. This is realized by setting No-PHP flag in
                                Prefix-SID Sub-TLV <xref target="RFC8667"></xref>, <xref target="RFC8665"></xref>. It is RECOMMENDED that a specific prefix-SID be allocated at each node for use 
                                by the SFC application for this purpose.		
			</t>
		</section>
		<section anchor="SRv6"  title="NSH using SRv6 Transport">
			<t>When carrying NSH within an SRv6 transport the full encapsulation is as illustrated in <xref target="figure_6"></xref>.
			</t><t>
				<figure align="center" title="NSH using SRv6 Transport" anchor="figure_6">
          			<artwork>

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Next Header   |  Hdr Ext Len  | Routing Type  | Segments Left |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Last Entry   |     Flags     |              Tag              | S
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ e
    |                                                               | g
    |            Segment List[0] (128-bit IPv6 address)             | m
    |                                                               | e
    |                                                               | n
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ t
    |                                                               |
    |                                                               | R
    ~                              ...                              ~ o
    |                                                               | u
    |                                                               | t
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ i
    |                                                               | n
    |            Segment List[n] (128-bit IPv6 address)             | g
    |                                                               |
    |                                                               | S
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ R
    //                                                             // H
    //         Optional Type Length Value objects (variable)       //
    //                                                             //
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |Ver|O|U|    TTL    |   Length  |U|U|U|U|MD Type| Next Protocol |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ N
    |          Service Path Identifier              | Service Index | S
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ H
    |                                                               |
    ~              Variable-Length Context Headers  (opt.)          ~
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    
                    
          			</artwork>
				</figure>
			</t>
			<t>Encapsulation of NSH following SRv6 is indicated by the IP protocol number for NSH in the Next Header of the SRH.</t> 
		</section>
		</section>
		<section anchor="Security" title="Security Considerations">
			<t>
				Generic SFC-related security considerations are discussed in <xref target="RFC7665"></xref>.</t> 
                        <t>
				NSH-specific security considerations are discussed in <xref target="RFC8300"></xref>.</t>
                      
                        <t>
                                Generic segment routing related security considerations are discussed in section 7 of <xref target="RFC8754"></xref> and section 5 of <xref target="RFC8663"></xref>.
 
			</t>
		</section>
                <section title="Backwards Compatibility">
                        <t>For SRv6/IPv6, if a processing node does not recognize NSH it should follow the procedures described in section 4 of <xref target="RFC8200"></xref>. For SR-MPLS, if a 
                           processing node does not recognize NSH it should follow the procedures laid out in section 3.18 of <xref target="RFC3031"></xref>.
                        </t>
                </section>
                <section title="Caching Considerations">
                <t>The cache mechanism must remove cached entries at an appropriate time determined by the implementation. Further, an implementation MAY allow network operators to set the said time value. 
                   In the case a packet arriving from an SF does not have a matching cached entry, the SFF SHOULD log this event, and MUST drop the packet. </t>
                </section> 

                <section title="MTU Considerations">
                        <t>
                                Aligned with Section 5 of [RFC8300] and Section 5.3 of <xref target="RFC8754"></xref>, it is RECOMMENDED for network operators to increase the underlying MTU so that SR/NSH traffic is forwarded 
                                within an SR domain without fragmentation.  

                        </t>
                </section>
		
<section anchor="IANA" title="IANA Considerations">

	<section anchor="NSHPROTO" title="Protocol Number for NSH">
	<figure><artwork>IANA is requested to assign a protocol number TBA1 for the NSH [RFC8300] from the 
"Assigned Internet Protocol Numbers" registry available at 
https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml

   +---------+---------+--------------+---------------+----------------+
   | Decimal | Keyword |   Protocol   |      IPv6     |   Reference    |
   |         |         |              |   Extension   |                |
   |         |         |              |     Header    |                |
   +---------+---------+--------------+---------------+----------------+
   |   TBA1  |   NSH   |   Network    |       N       | [This Document]|
   |         |         |   Service    |               |                |
   |         |         |    Header    |               |                |
   +---------+---------+--------------+---------------+----------------+
	</artwork></figure>
	</section>
	<section anchor="NSHEPB" title="SRv6 Endpoint Behavior for NSH">
	<figure><artwork>This I-D requests IANA to allocate, within the "SRv6 Endpoint Behaviors" 
sub-registry belonging to the top-level "Segment-routing with IPv6 data 
plane (SRv6) Parameters" registry, the following allocations:

      Value      Description                               Reference
      --------------------------------------------------------------
      TBA2       End.NSH  - NSH Segment                    [This.ID]

	</artwork></figure>
	</section>
</section>
      
 
 
		
		<section anchor="Contributors" title="Contributing Authors">
			<t><figure><artwork>
The following co-authors, along with their respective affiliations at 
the time of publication, provided valuable inputs and text contributions 
to this document.  

Mohamed Boucadair
Orange
mohamed.boucadair@orange.com

Joel Halpern
Ericsson
joel.halpern@ericsson.com

Syed Hassan
Cisco System, inc.
shassan@cisco.com

Wim Henderickx
Nokia
wim.henderickx@nokia.com

Haoyu Song
Futurewei Technologies
haoyu.song@futurewei.com
			</artwork></figure></t>
		</section>
	
	</middle>
	
	<back>
		<references title="Normative References">
                        &RFC2119;
                        &RFC8174;
                        &RFC8402;
			&NSH;	
			&RFC8754;
                        &RFC8660;
                        &RFC8663;
                        &RFC8665;
                        &RFC8667;
                        &RFC3031;
                        &RFC8200;
		</references>
		<references title="Informative References">
			&SFCSTATE;
                        &SFCARCH;
                        &RFC8596;
                        &SRSPGM;	
			
		</references>
	</back>

</rfc>

