rfc9491xml2.original.xml | rfc9491.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!-- 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.RF | ||||
C.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.830 | ||||
0.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/refere | ||||
nce.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/refere | ||||
nce.I-D.draft-ietf-spring-segment-routing-mpls-12.xml"> | ||||
<!ENTITY SRV6 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/referenc | ||||
e.I-D.draft-ietf-6man-segment-routing-header-09.xml"> | ||||
<!ENTITY SRSPGM SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/refere | ||||
nce.I-D.draft-ietf-spring-sr-service-programming-07.xml"> | ||||
<!DOCTYPE rfc [ | ||||
<!ENTITY nbsp " "> | ||||
<!ENTITY zwsp "​"> | ||||
<!ENTITY nbhy "‑"> | ||||
<!ENTITY wj "⁠"> | ||||
]> | ]> | |||
<?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="Guichar | ||||
d" 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 Ne | ||||
twork 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 a | ||||
s 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 ca | ||||
n 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 classific | ||||
ation 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 SF | ||||
s. | ||||
</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 intr | ||||
oduced <xref target="RFC7665"></xref>. | ||||
</t><t> | ||||
SFC techniques are meant to rationalize the servi | ||||
ce delivery logic and master the resulting complexity while optimizing service a | ||||
ctivation time cycles for operators | ||||
that need more agile service delivery procedures | ||||
to better accommodate ever-demanding customer requirements. SFC allows network o | ||||
perators 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 function | ||||
s in the right sequence. | ||||
<xref target="RFC7498"></xref> provides an overvi | ||||
ew of the overall SFC problem space and <xref target="RFC7665"></xref> specifies | ||||
an SFC data plane architecture. | ||||
The SFC architecture does not make assumptions o | ||||
n how advanced features (e.g., load-balancing, loose or strict service paths) co | ||||
uld be enabled within | ||||
a domain. Various deployment options are made av | ||||
ailable 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 th | ||||
e information required for SFC purposes (e.g., communicate a service chain point | ||||
er, encode a list of loose/explicit paths, | ||||
or disseminate a service chain identifier togethe | ||||
r with a set of context information). Likewise, many approaches can also be cons | ||||
idered for the channel to be used to carry | ||||
SFC-specific information (e.g., define a new head | ||||
er, re-use existing packet header fields, or define an IPv6 extension header). A | ||||
mong all these approaches, the IETF created a | ||||
transport-independent SFC encapsulation scheme: N | ||||
SH <xref target="RFC8300"></xref>. This design is pragmatic as it does not requi | ||||
re replicating the same specification effort as a function of underlying | ||||
transport encapsulation. Moreover, this design a | ||||
pproach encourages consistent SFC-based service delivery in networks enabling di | ||||
stinct 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", "SHA | ||||
LL 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 on | ||||
ly 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 Netwo | ||||
rk Service Header directly within a link-layer header. In this document, we assi | ||||
gn an IP | ||||
protocol number [TBA1] for the NSH, so that it c | ||||
an 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 thro | ||||
ugh an | ||||
SR policy instantiated as an ordered list of inst | ||||
ructions called segments. While initially designed for policy-based source routi | ||||
ng, 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 <xre | ||||
f 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 tar | ||||
get="RFC7498"></xref>, | ||||
traffic steering is only a subset of the issues t | ||||
hat 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 consid | ||||
ered when designing an SFC data plane solution. | ||||
</t><t> | ||||
While each scheme (i.e., NSH-based SFC and SR-bas | ||||
ed 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 trans | ||||
port plane: in this scenario SR-MPLS or SRv6 provides the transport encapsulatio | ||||
n 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 assoc | ||||
iated 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 Servi | ||||
ce Function Path (SFP) but different SR policy can coexist on the same SFP witho | ||||
ut conflict during SFF processing.</t> | ||||
</section> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category=" | |||
<section title="NSH-based SFC with SR-MPLS or SRv6 Transport Tunnel"> | std" consensus="yes" docName="draft-ietf-spring-nsh-sr-15" number="9491" ipr="tr | |||
<t> | ust200902" obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth="3" | |||
Because of the transport-independent nature of NS | symRefs="true" sortRefs="true" version="3"> | |||
H-based service function chains, it is expected that the NSH has broad applicabi | ||||
lity across different network domains (e.g., access, core). | ||||
By way of illustration the various SFs involved i | ||||
n a service function chain may be available in a single data center, or spread t | ||||
hroughout multiple locations (e.g., data centers, different Points of Presence ( | ||||
POPs)), depending | ||||
upon the network operator preference and/or avail | ||||
ability of service resources. Regardless of where the SFs are deployed it is nec | ||||
essary 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> | <front> | |||
The following three figures provide an example of | <title abbrev="NSH SR SFC">Integration of the Network Service Header (NSH) | |||
an SFC established flow F that has SF instances located in different data cente | and Segment Routing for Service Function Chaining (SFC)</title> | |||
rs, DC1 and DC2. For the purpose of illustration, let | <seriesInfo name="RFC" value="9491"/> | |||
the SFC's NSH SPI be 100 and the initial Service | <author fullname="James N Guichard" initials="J" surname="Guichard" role="ed | |||
Index (SI) be 255. | itor"> | |||
</t><t> | <organization>Futurewei Technologies</organization> | |||
Referring to <xref target="figure_1"></xref>, pac | <address> | |||
kets of flow F in DC1 are classified into an NSH-based SFC and encapsulated afte | <postal> | |||
r classification | <street>2330 Central Expressway</street> | |||
as <Inner Pkt><NSH: SPI 100, SI 255>& | <city>Santa Clara</city> | |||
lt;Outer-transport> and forwarded to SFF1 (which is the first SFF hop for thi | <country>United States of America</country> | |||
s service function chain). | </postal> | |||
</t><t> | <email>james.n.guichard@futurewei.com</email> | |||
After removing the outer transport encapsulation | </address> | |||
, SFF1 uses the SPI and SI carried within the NSH encapsulation to determine tha | </author> | |||
t it should forward the packet to SF1. SF1 applies its service, | <author fullname="Jeff Tantsura" initials="J" surname="Tantsura" role="edito | |||
decrements the SI by 1, and returns the packet t | r"> | |||
o SFF1. SFF1 therefore has <SPI 100, SI 254> when the packet comes back fr | <organization>Nvidia</organization> | |||
om SF1. SFF1 does a lookup on <SPI 100, SI 254> which | <address> | |||
results in <next-hop: DC1-GW1> and forward | <postal> | |||
s the packet to DC1-GW1. | <street/> | |||
</t><t> | <city/> | |||
<figure title="SR for inter-DC SFC - Part 1" anch | <country>United States of America</country> | |||
or="figure_1"> | </postal> | |||
<artwork> | <email>jefftant.ietf@gmail.com</email> | |||
</address> | ||||
</author> | ||||
<date month="November" year="2023"/> | ||||
<area>RTG</area> | ||||
<workgroup>SPRING</workgroup> | ||||
<keyword>NSH</keyword> | ||||
<keyword>SR</keyword> | ||||
<keyword>MPLS-SR</keyword> | ||||
<keyword>SRv6</keyword> | ||||
<keyword>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 (SFFs) along a given Service | ||||
Function Path (SFP), whereas the NSH is responsible for maintaining the | ||||
integrity of the service plane, the SFC instance context, and any | ||||
associated metadata. | ||||
</t> | ||||
<t> This integration demonstrates that the NSH and SR can work cooperative | ||||
ly | ||||
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 | ||||
the NSH. | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<middle> | ||||
<section numbered="true" toc="default"> | ||||
<name>Introduction</name> | ||||
<t> | ||||
</t> | ||||
<section numbered="true" toc="default"> | ||||
<name>SFC Overview and Rationale</name> | ||||
<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 Third | ||||
Generation Partnership Project (3GPP) Gi interface (N6 interface in 5G | ||||
architecture) has shown limitations such as 1) redundant | ||||
classification features that must be supported by many SFs to execute | ||||
their function; 2) some SFs that receive traffic that they are not suppo | ||||
sed | ||||
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, SFC techniques have been introduced <xref | ||||
target="RFC7665" format="default"/>. | ||||
</t> | ||||
<t> SFC techniques are meant to rationalize the service delivery logic | ||||
and reduce 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" | ||||
format="default"/> provides an overview of the overall SFC problem | ||||
space, and <xref target="RFC7665" format="default"/> specifies an SFC | ||||
data plane architecture. The SFC architecture does not make | ||||
assumptions on how advanced features (e.g., load balancing, loose or str | ||||
ict | ||||
service paths) could be enabled within a domain. Various | ||||
deployment options are made available to operators with the SFC | ||||
architecture; 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, reuse 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" | ||||
format="default"/>. 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 numbered="true" toc="default"> | ||||
<name>Requirements Language</name> | ||||
<t> The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
"<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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 numbered="true" toc="default"> | ||||
<name>SFC within Segment Routing Networks</name> | ||||
<t><xref target="RFC8300" format="default"/> specifies how to | ||||
encapsulate the NSH directly within a link-layer header. In this | ||||
document, IANA has assigned IP protocol number 145 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>As described in <xref target="RFC8402" format="default"/>, 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" format="default"/>. | ||||
</t> | ||||
<t> The two SR data plane encapsulations, namely <xref target="RFC8660" | ||||
format="default">SR-MPLS</xref> and <xref target="RFC8754" | ||||
format="default">Segment Routing over IPv6 (SRv6)</xref>, can encode an | ||||
SF as a segment so that a service function chain can be specified as a seg | ||||
ment | ||||
list. Nevertheless, and as discussed in <xref target="RFC7498" | ||||
format="default"/>, 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 to complement each other through two representative | ||||
application scenarios. Both application scenarios may be supported using | ||||
either SR-MPLS or SRv6: | ||||
</t> | ||||
<dl spacing="normal" newline="true"> | ||||
<dt>NSH-based SFC with the SR-based transport plane:</dt> | ||||
<dd>In this scenario, SR-MPLS or SRv6 provides the transport | ||||
encapsulation between SFFs, while the NSH is used to convey and trigger S | ||||
FC | ||||
policies.</dd> | ||||
<dt>SR-based SFC with the integrated NSH service plane:</dt> | ||||
<dd>In this scenario, each service hop of the service function chain | ||||
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 the NSH is responsible for maintaining | ||||
the service plane and holding the SFC instance context (including | ||||
associated metadata).</dd> | ||||
</dl> | ||||
<t>Of course, it is possible to combine both of these two scenarios to | ||||
support specific deployment requirements and use cases. | ||||
</t> | ||||
<t>A classifier <bcp14>MUST</bcp14> use one NSH Service Path Identifier | ||||
(SPI) for each SR policy so that different traffic flows can use the | ||||
same NSH Service Function Path (SFP) and different SR policies can | ||||
coexist on the same SFP without conflict during SFF processing.</t> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>NSH-Based SFC with SR-MPLS or the SRv6 Transport Tunnel</name> | ||||
<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" format="default"/>, packets of | ||||
flow F in DC1 are classified into an NSH-based service function chain, | ||||
encapsulated after classification as <Inner Pkt><NSH: SPI 100, | ||||
SI 255><Outer-transport>, 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. Therefore, SFF1 has <SPI 100, SI | ||||
254> when the packet comes back from SF1. SFF1 does a lookup on | ||||
<SPI 100, SI 254>, which results in <next-hop: DC1-GW1> and | ||||
forwards the packet to DC1-GW1. | ||||
</t> | ||||
<figure anchor="figure_1"> | ||||
<name>SR for Inter-DC SFC - Part 1</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+--------------------------- DC1 ----------------------------+ | +--------------------------- DC1 ----------------------------+ | |||
| +-----+ | | | +-----+ | | |||
| | SF1 | | | | | SF1 | | | |||
| +--+--+ | | | +--+--+ | | |||
| | | | | | | | |||
| | | | | | | | |||
| +------------+ | +------------+ | | | +------------+ | +------------+ | | |||
| | N(100,255) | | | N(100,254) | | | | | N(100,255) | | | N(100,254) | | | |||
| +------------+ | +------------+ | | | +------------+ | +------------+ | | |||
| | F:Inner Pkt| | | F:Inner Pkt| | | | | F:Inner Pkt| | | F:Inner Pkt| | | |||
skipping to change at line 229 ¶ | skipping to change at line 253 ¶ | |||
|| | | | | | | | || | | | | | | | |||
|+------------+ +------+ +---------+ | | |+------------+ +------+ +---------+ | | |||
| | | | | | |||
| +------------+ +------------+ | | | +------------+ +------------+ | | |||
| | N(100,255) | | N(100,254) | | | | | N(100,255) | | N(100,254) | | | |||
| +------------+ +------------+ | | | +------------+ +------------+ | | |||
| | F:Inner Pkt| | F:Inner Pkt| | | | | F:Inner Pkt| | F:Inner Pkt| | | |||
| +------------+ +------------+ | | | +------------+ +------------+ | | |||
| | | | | | |||
+------------------------------------------------------------+ | +------------------------------------------------------------+ | |||
]]></artwork></figure> | ||||
</artwork> | <t> Referring now to <xref target="figure_2" format="default"/>, DC1-GW1 | |||
</figure> | performs a lookup using the information conveyed in the NSH, which | |||
</t><t> | results in <next-hop: DC2-GW1, encapsulation: SR>. The SR | |||
Referring now to <xref target="figure_2"></xref>, | encapsulation, which may be SR-MPLS or SRv6, has the SR segment list to | |||
DC1-GW1 performs a lookup using the information conveyed in the NSH which resul | forward the packet across the inter-DC network to DC2. | |||
ts in <next-hop: DC2-GW1, encapsulation: SR>. | </t> | |||
The SR encapsulation, which may be SR-MPLS or SRv | <figure anchor="figure_2"> | |||
6, has the SR segment-list to forward the packet across the inter-DC network to | <name>SR for Inter-DC SFC - Part 2</name> | |||
DC2. | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<figure title="SR for inter-DC SFC - Part 2" anch | ||||
or="figure_2"> | ||||
<artwork> | ||||
+----------- Inter DC ----------------+ | +----------- Inter DC ----------------+ | |||
(4) | (5) | | (4) | (5) | | |||
+------+ ----> | +---------+ ----> +---------+ | | +------+ ----> | +---------+ ----> +---------+ | | |||
| | NSH | | | SR | | | | | | NSH | | | SR | | | | |||
+ SFF1 +----------|-+ DC1-GW1 +-------------+ DC2-GW1 + | | + SFF1 +----------|-+ DC1-GW1 +-------------+ DC2-GW1 + | | |||
| | | | | | | | | | | | | | | | | | |||
+------+ | +---------+ +---------+ | | +------+ | +---------+ +---------+ | | |||
| | | | | | |||
| +------------+ | | | +------------+ | | |||
| | S(DC2-GW1) | | | | | S(DC2-GW1) | | | |||
| +------------+ | | | +------------+ | | |||
| | N(100,254) | | | | | N(100,254) | | | |||
| +------------+ | | | +------------+ | | |||
| | F:Inner Pkt| | | | | F:Inner Pkt| | | |||
| +------------+ | | | +------------+ | | |||
+-------------------------------------+ | +-------------------------------------+ | |||
]]></artwork> | ||||
</artwork> | </figure> | |||
</figure> | <t> When the packet arrives at DC2, as shown in <xref target="figure_3" | |||
format="default"/>, the SR encapsulation is removed, and DC2-GW1 | ||||
</t><t> | performs a lookup on the NSH, which results in next hop: SFF2. When SFF2 | |||
When the packet arrives at DC2, as shown in <xref | receives the packet, it performs a lookup on <NSH: SPI 100, SI | |||
target="figure_3"></xref>, the SR encapsulation is removed and DC2-GW1 performs | 254> and determines to forward the packet to SF2. SF2 applies its | |||
a lookup on the NSH which results in | service, decrements the SI by 1, and returns the packet to | |||
next hop: SFF2. When SFF2 receives the packet, it | SFF2. Therefore, SFF2 has <NSH: SPI 100, SI 253> when the packet | |||
performs a lookup on <NSH: SPI 100, SI 254> and determines to forward the | comes back from SF2. SFF2 does a lookup on <NSH: SPI 100, SI | |||
packet to SF2. SF2 applies its service, | 253>, which results in the end of the service function chain. | |||
decrements the SI by 1, and returns the packet t | </t> | |||
o SFF2. SFF2 therefore has <NSH: SPI 100, SI 253> when the packet comes ba | <figure anchor="figure_3"> | |||
ck from SF2. SFF2 does a lookup on <NSH: SPI 100, SI 253> | <name>SR for Inter-DC SFC - Part 3</name> | |||
which results in the end of the service function | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
chain. | ||||
<figure title="SR for inter-DC SFC - Part 3" anch | ||||
or="figure_3"> | ||||
<artwork> | ||||
+------------------------ DC2 ----------------------+ | +------------------------ DC2 ----------------------+ | |||
| +-----+ | | | +-----+ | | |||
| | SF2 | | | | | SF2 | | | |||
| +--+--+ | | | +--+--+ | | |||
| | | | | | | | |||
| | | | | | | | |||
| +------------+ | +------------+ | | | +------------+ | +------------+ | | |||
| | N(100,254) | | | N(100,253) | | | | | N(100,254) | | | N(100,253) | | | |||
| +------------+ | +------------+ | | | +------------+ | +------------+ | | |||
| | F:Inner Pkt| | | F:Inner Pkt| | | | | F:Inner Pkt| | | F:Inner Pkt| | | |||
skipping to change at line 293 ¶ | skipping to change at line 320 ¶ | |||
+ DC1-GW1 +--------|-+ DC2-GW1 +------------+ SFF2 | | | + DC1-GW1 +--------|-+ DC2-GW1 +------------+ SFF2 | | | |||
| | | | | | | | | | | | | | | | | | |||
+---------+ | +----------+ +------+ | | +---------+ | +----------+ +------+ | | |||
| | | | | | |||
| +------------+ +------------+ | | | +------------+ +------------+ | | |||
| | N(100,254) | | F:Inner Pkt| | | | | N(100,254) | | F:Inner Pkt| | | |||
| +------------+ +------------+ | | | +------------+ +------------+ | | |||
| | F:Inner Pkt| | | | | F:Inner Pkt| | | |||
| +------------+ | | | +------------+ | | |||
+---------------------------------------------------+ | +---------------------------------------------------+ | |||
]]></artwork> | ||||
</artwork> | </figure> | |||
</figure> | <t> | |||
The benefits of this scheme are listed hereafter: | The benefits of this scheme are listed hereafter: | |||
</t><t> | </t> | |||
<list style="symbols"> | <ul spacing="normal"> | |||
<t> | <li>The network operator is able to take advantage of the | |||
The network operator is able to t | transport-independent nature of the NSH encapsulation while the | |||
ake advantage of the transport-independent nature of the NSH encapsulation, whil | service is provisioned end-to-end.</li> | |||
e the service is provisioned end-to-end. | <li>The network operator is able to take advantage of the | |||
</t><t> | traffic-steering (traffic-engineering) capability of SR where | |||
The network operator is able to t | appropriate.</li> | |||
ake advantage of the traffic steering (traffic engineering) capability of SR whe | <li>Clear responsibility division and scope between the NSH and SR.</li> | |||
re appropriate. | </ul> | |||
</t><t> | <t>Note that this scenario is applicable to any case where multiple | |||
Clear responsibility division and | segments of a service function chain are distributed across multiple | |||
scope between NSH and SR. | domains or where traffic-engineered paths are necessary between SFFs | |||
</t> | (strict forwarding paths, for example). Further, note that the above | |||
</list> | example can also be implemented using end-to-end segment routing between | |||
</t><t> | SFF1 and SFF2. (As such, DC-GW1 and DC-GW2 are forwarding the packets | |||
Note that this scenario is applicable to any case | based on segment routing instructions and are not looking at the NSH | |||
where multiple segments of a service function chain are distributed across mult | header for forwarding.) | |||
iple domains or where traffic-engineered paths are necessary | </t> | |||
between SFFs (strict forwarding paths for example | </section> | |||
). Further, note that the above example can also be implemented using end-to-end | <section numbered="true" toc="default"> | |||
segment routing between SFF1 and SFF2. (As such DC-GW1 and DC-GW2 | <name>SR-Based SFC with the Integrated NSH Service Plane</name> | |||
are forwarding the packets based on segment routi | <t>In this scenario, we assume that the SFs are NSH-aware; therefore, | |||
ng instructions and are not looking at the NSH header for forwarding.) | it should not be necessary to implement an SFC proxy to achieve SFC. | |||
</t> | The operation relies upon SR-MPLS or SRv6 to perform SFF-SFF transport | |||
</section> | and the NSH to provide the service plane between SFs, thereby maintaining | |||
<section title="SR-based SFC with Integrated NSH Service Plane"> | SFC | |||
<t> | context (e.g., the service plane path referenced by the SPI) and any | |||
In this scenario we assume that the SFs are NSH-a | associated metadata. | |||
ware and therefore it should not be necessary to implement an SFC proxy to achie | </t> | |||
ve SFC. | <t>When a service function chain is established, a packet associated | |||
The operation relies upon SR-MPLS or SRv6 to perf | with that chain will first carry an NSH that will be used to maintain | |||
orm SFF-SFF transport and NSH to provide the service plane between SFs thereby m | the end-to-end service plane through use of the SFC context. The SFC | |||
aintaining SFC context (e.g., the service plane path referenced by the SPI) and | context is used by an SFF to determine the SR segment list for | |||
any associated metadata. | forwarding the packet to the next-hop SFFs. The packet is then | |||
</t><t> | encapsulated using the SR header and forwarded in the SR domain | |||
When a service function chain is established, a p | following normal SR operations. | |||
acket associated with that chain will first carry an NSH that will be used to ma | </t> | |||
intain the end-to-end service plane through use of the SFC context. | <t>When a packet has to be forwarded to an SF attached to an SFF, the | |||
The SFC context is used by an SFF to determine th | SFF performs a lookup on the segment identifier (SID) associated with | |||
e SR segment list for forwarding the packet to the next-hop SFFs. | the SF. In the case of SR-MPLS, this will be a Prefix-SID <xref | |||
The packet is then encapsulated using the SR head | target="RFC8402" format="default"/>. In the case of SRv6, the behavior | |||
er and forwarded in the SR domain following normal SR operations. | described within this document is assigned the name END.NSH, and <xref | |||
</t><t> | target="NSHEPB"/> describes the allocation of the code point by IANA. The | |||
When a packet has to be forwarded to an SF attach | result of this lookup allows the SFF to retrieve the next-hop context | |||
ed to an SFF, the SFF performs a lookup on the segment identifier (SID) associat | between the SFF and SF (e.g., the destination Media Access Control (MAC) | |||
ed with the SF. In the case of SR-MPLS this will be a prefix SID <xref target="R | address in case Ethernet encapsulation is used between the SFF and SF). In | |||
FC8402"></xref>. | addition, the SFF strips the SR information from the packet, updates the | |||
In the case of SRv6, the behavior described with | SR information, and saves it to a cache indexed by the NSH Service Path | |||
in this document is assigned the name END.NSH, and section 9.2 requests allocati | Identifier (SPI) and the Service Index (SI) decremented by 1. This saved | |||
on of a code point by IANA. The result of this lookup allows the SFF | SR information is used to encapsulate and forward the packet(s) coming | |||
to retrieve the next hop context between the SFF | back from the SF. | |||
and SF (e.g., the destination MAC address in case Ethernet encapsulation is use | </t> | |||
d between SFF and SF). In addition, the SFF strips the SR | <t>The behavior of remembering the SR segment list occurs at the end of | |||
information from the packet, updates the SR info | the regularly defined logic. The behavior of reattaching the | |||
rmation, and saves it to a cache indexed by the NSH Service Path Identifier (SPI | segment list occurs before the SR process of forwarding the packet to | |||
) and the Service Index (SI) decremented by 1. This saved SR | the next entry in the segment list. Both behaviors are further detailed | |||
information is used to encapsulate and forward t | in <xref target="sec-5"/>. | |||
he packet(s) coming back from the SF. | </t> | |||
</t><t> | <t>When the SF receives the packet, it processes it as usual. When the | |||
The behavior of remembering the SR segment-list | SF is co-resident with a classifier, the already-processed packet may be | |||
occurs at the end of the regularly defined logic. The behavior of reattaching th | reclassified. The SF sends the packet back to the SFF. Once the SFF | |||
e segment-list occurs before the SR process | receives this packet, it extracts the SR information using the NSH SPI | |||
of forwarding the packet to the next entry in th | and SI as the index into the cache. The SFF then pushes the retrieved SR | |||
e segment-list. Both behaviors are further detailed in section 5. | header on top of the NSH header and forwards the packet to the next | |||
</t><t> | segment in the segment list. The lookup in the SFF cache might fail if | |||
When the SF receives the packet, it processes it | reclassification at the SF changed the NSH SPI and/or SI to values that | |||
as usual. When the SF is co-resident with a classifier, the already processed p | do not exist in the SFF cache. In such a case, the SFF must generate an | |||
acket may be re-classified. The SF sends | error and drop the packet. | |||
the packet back to the SFF. Once the SFF receive | </t> | |||
s this packet, it extracts the SR information using the NSH SPI and SI as the in | <t> <xref target="figure_4" format="default"/> illustrates an example of | |||
dex into the cache. The SFF then pushes | this scenario. </t> | |||
the retrieved SR header on top of the NSH header | <figure anchor="figure_4"> | |||
, and forwards the packet to the next segment in the segment-list. The lookup in | <name>NSH over SR for SFC</name> | |||
the SFF cache might fail if | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
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 ex | ||||
ample of this scenario. | ||||
<figure title="NSH over SR for SFC" anchor="figur | ||||
e_4"> | ||||
<artwork> | ||||
+-----+ +-----+ | +-----+ +-----+ | |||
| SF1 | | SF2 | | | SF1 | | SF2 | | |||
+--+--+ +--+--+ | +--+--+ +--+--+ | |||
| | | | | | |||
| | | | | | |||
+-----------+ | +-----------+ +-----------+ | +-----------+ | +-----------+ | +-----------+ +-----------+ | +-----------+ | |||
|N(100,255) | | |N(100,254) | |N(100,254) | | |N(100,253) | , | |N(100,255) | | |N(100,254) | |N(100,254) | | |N(100,253) | | |||
+-----------+ | +-----------+ +-----------+ | +-----------+ | +-----------+ | +-----------+ +-----------+ | +-----------+ | |||
|F:Inner Pkt| | |F:Inner Pkt| |F:Inner Pkt| | |F:Inner Pkt| | |F:Inner Pkt| | |F:Inner Pkt| |F:Inner Pkt| | |F:Inner Pkt| | |||
+-----------+ | +-----------+ +-----------+ | +-----------+ | +-----------+ | +-----------+ +-----------+ | +-----------+ | |||
(2) ^ | (3) | (5) ^ | (6) | | (2) ^ | (3) | (5) ^ | (6) | | |||
| | | | | | | | | | | | | | |||
| | | | | | | | | | | | | | |||
(1) | | v (4) | | v (7) | (1) | | v (4) | | v (7) | |||
+------------+ ---> +-+----+ ----> +---+--+ --> | +------------+ ---> +-+----+ ----> +---+--+ --> | |||
| | NSHoverSR | | NSHoverSR | | IP | | | NSHoverSR | | NSHoverSR | | IP | |||
| Classifier +-----------+ SFF1 +---------------------+ SFF2 | | | Classifier +-----------+ SFF1 +---------------------+ SFF2 | | |||
skipping to change at line 373 ¶ | skipping to change at line 430 ¶ | |||
| S(SF1) | | S(SF2) | | F:Inner Pkt| | | S(SF1) | | S(SF2) | | F:Inner Pkt| | |||
+------------+ +------------+ +------------+ | +------------+ +------------+ +------------+ | |||
| S(SFF2) | | N(100,254) | | | S(SFF2) | | N(100,254) | | |||
+------------+ +------------+ | +------------+ +------------+ | |||
| S(SF2) | | F:Inner Pkt| | | S(SF2) | | F:Inner Pkt| | |||
+------------+ +------------+ | +------------+ +------------+ | |||
| N(100,255) | | | N(100,255) | | |||
+------------+ | +------------+ | |||
| F:Inner Pkt| | | F:Inner Pkt| | |||
+------------+ | +------------+ | |||
]]></artwork> | ||||
</figure> | ||||
<t>The benefits of this scheme include the following: | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>It is economically sound for SF vendors to only support one | ||||
unified SFC solution. The SF is unaware of the SR.</li> | ||||
<li>It simplifies the SFF (i.e., the SR router) by nullifying the | ||||
needs for reclassification and SR proxy.</li> | ||||
<li>SR is also used for forwarding purposes, including between SFFs.</li | ||||
> | ||||
<li>It takes advantage of SR to eliminate the NSH forwarding state in | ||||
SFFs. This applies each time strict or loose SFPs are in use.</li> | ||||
<li>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.</li> | ||||
</ul> | ||||
</section> | ||||
<section numbered="true" toc="default" anchor="sec-5"> | ||||
<name>Packet Processing for SR-Based SFC</name> | ||||
<t> This section describes the End.NSH behavior (SRv6), Prefix-SID | ||||
behavior (SR-MPLS), and NSH processing logic.</t> | ||||
<section numbered="true" toc="default"> | ||||
<name>SR-Based SFC (SR-MPLS) Packet Processing</name> | ||||
<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 numbered="true" toc="default"> | ||||
<name>SR-Based SFC (SRv6) Packet Processing</name> | ||||
<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" sectionFormat="comma" section="4.3.1.1"/>, up through | ||||
line S15.</t> | ||||
<t> After S15, if S is a local End.NSH SID, then:</t> | ||||
</artwork> | <sourcecode type="pseudocode"><![CDATA[ | |||
</figure> | S15.1. Remove and store IPv6 and SRH headers in local cache | |||
indexed by <NSH: service-path-id, service-index -1> | ||||
The benefits of this scheme include: | S15.2. Submit the packet to the NSH FIB lookup and transmit | |||
</t><t> | to the destination associated with <NSH: | |||
<list style="symbols"> | service-path-id, service-index> | |||
<t> | ]]></sourcecode> | |||
It is economically sound for SF v | ||||
endors 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 pu | ||||
rposes including between SFFs. | ||||
</t><t> | ||||
It takes advantage of SR to elimi | ||||
nate the NSH forwarding state in SFFs. This applies each time strict or loose SF | ||||
Ps are in use. | ||||
</t><t> | ||||
It requires no interworking as wo | ||||
uld be the case if SR-MPLS based SFC and NSH-based SFC were deployed as independ | ||||
ent 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 (SRv | ||||
6), 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-lis | ||||
t (label stack) from the packet, updates | ||||
the SR information, and saves it to a cache inde | ||||
xed by the NSH Service Path Identifier (SPI) and the Service Index (SI) decremen | ||||
ted by 1. This saved SR information is used | ||||
to re-encapsulate and forward the packet(s) comi | ||||
ng 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 targe | ||||
t="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 <NSH: service-path-id, service-index -1></t> | ||||
<t> | ||||
S15.2. Submit the packet to the NSH FIB lookup a | ||||
nd transmit to the destination associated with <NSH: service-path-id, service | ||||
-index></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 <NSH: service-path-id | ||||
, service-index> from the NSH header. | ||||
Then resume processing from <xref target="RFC875 | ||||
4"></xref> section 4.3.1.1 with line S.16.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="Encapsulation" title="Encapsulation"> | ||||
<t> | ||||
</t> | <aside><t>Note: The End.NSH behavior interrupts the normal SRH packet | |||
<section anchor="MPLS-SR" title="NSH using SR-MPLS Transport"> | processing, as described in <xref target="RFC8754" | |||
<t> | sectionFormat="comma" section="4.3.1.1"/>, which does not continue | |||
SR-MPLS instantiates Segment IDs (SIDs) as MPLS l | to S16 at this time.</t></aside> | |||
abels and therefore the segment routing header is a stack of MPLS labels. | <t> When a packet is returned to the SFF from the SF, reattach the | |||
</t><t> | cached IPv6 and SRH headers based on the <NSH: service-path-id, | |||
When carrying NSH within an SR-MPLS transport, th | service-index> from the NSH header. Then, resume processing from | |||
e full encapsulation headers are as illustrated in <xref target="figure_5"></xre | <xref target="RFC8754" sectionFormat="comma" section="4.3.1.1"/> | |||
f>. | with line S16.</t> | |||
</t><t> | </section> | |||
<figure align="center" title="NSH using SR-MPLS T | </section> | |||
ransport" anchor="figure_5"> | <section anchor="Encapsulation" numbered="true" toc="default"> | |||
<artwork> | <name>Encapsulation</name> | |||
<t> | ||||
</t> | ||||
<section anchor="MPLS-SR" numbered="true" toc="default"> | ||||
<name>NSH Using SR-MPLS Transport</name> | ||||
<t> SR-MPLS instantiates segment identifiers (SIDs) as MPLS labels; | ||||
therefore, the segment routing header is a stack of MPLS labels. | ||||
</t> | ||||
<t> When carrying an NSH within an SR-MPLS transport, the full | ||||
encapsulation headers are as illustrated in <xref target="figure_5" | ||||
format="default"/>. | ||||
</t> | ||||
<figure anchor="figure_5"> | ||||
<name>NSH Using SR-MPLS Transport</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
+------------------+ | +------------------+ | |||
~ MPLS-SR Labels ~ | ~ SR-MPLS Labels ~ | |||
+------------------+ | +------------------+ | |||
| NSH Base Hdr | | | NSH Base Hdr | | |||
+------------------+ | +------------------+ | |||
| Service Path Hdr | | | Service Path Hdr | | |||
+------------------+ | +------------------+ | |||
~ Metadata ~ | ~ Metadata ~ | |||
+------------------+ | +------------------+ | |||
]]></artwork> | ||||
</figure> | ||||
<t>As described in <xref target="RFC8402" format="default"/>, | ||||
"[t]he 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 an 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 the NSH follows the SR-MPLS label stack as described by <xref | ||||
target="RFC8596" format="default"/>. | ||||
</t> | ||||
<t> If the CONTINUE operation is to be used, this is the equivalent of | ||||
MPLS Ultimate Hop Popping (UHP); 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 the NSH to the wrong SFF. This is | ||||
realized by setting the No Penultimate Hop Popping (No-PHP) flag in | ||||
Prefix-SID Sub-TLV <xref target="RFC8667" format="default"/> <xref | ||||
target="RFC8665" format="default"/>. It is <bcp14>RECOMMENDED</bcp14> | ||||
that a specific Prefix-SID be allocated at each node for use by the | ||||
SFC application for this purpose. | ||||
</t> | ||||
</section> | ||||
<section anchor="SRv6" numbered="true" toc="default"> | ||||
<name>NSH Using SRv6 Transport</name> | ||||
<t>When carrying a NSH within an SRv6 transport, the full encapsulation | ||||
is as illustrated in <xref target="figure_6" format="default"/>. | ||||
</t> | ||||
<figure anchor="figure_6"> | ||||
<name>NSH Using SRv6 Transport</name> | ||||
<artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
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>Encapsulation of the NSH following SRv6 is indicated by the IP protoc | ||||
ol | ||||
number for the NSH in the Next Header of the SRH.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="Security" numbered="true" toc="default"> | ||||
<name>Security Considerations</name> | ||||
<t> | ||||
Generic SFC-related security considerations are d | ||||
iscussed in <xref target="RFC7665" format="default"/>.</t> | ||||
<t> | ||||
NSH-specific security considerations are discusse | ||||
d in <xref target="RFC8300" format="default"/>.</t> | ||||
<t> Generic security considerations related to segment routing are | ||||
discussed in <xref target="RFC8754" sectionFormat="of" section="7"/> and | ||||
<xref target="RFC8663" sectionFormat="of" section="5"/>. | ||||
</artwork> | </t> | |||
</figure> | </section> | |||
</t><t> | <section numbered="true" toc="default"> | |||
<xref target="RFC8402">As described in</xref>, th | <name>Backwards Compatibility</name> | |||
e IGP signaling extension for IGP-Prefix segment includes a flag to indicate whe | <t>For SRv6/IPv6, if a processing node does not recognize the NSH, it shou | |||
ther | ld | |||
directly connected neighbors of the node on which | follow the procedures described in <xref target="RFC8200" | |||
the prefix is attached should perform the NEXT operation or the CONTINUE operat | sectionFormat="of" section="4"/>. For SR-MPLS, if a processing node does | |||
ion when processing the SID. | not recognize the NSH, it should follow the procedures laid out in <xref | |||
When NSH is carried beneath SR-MPLS it is necessa | target="RFC3031" sectionFormat="of" section="3.18"/>. | |||
ry to terminate the NSH-based SFC at the tail-end node of the SR-MPLS label stac | </t> | |||
k. This can be achieved using | </section> | |||
either the NEXT or CONTINUE operation. | <section numbered="true" toc="default"> | |||
</t><t> | <name>Caching Considerations</name> | |||
If the NEXT operation is to be used, then at the | <t>The cache mechanism must remove cached entries at an appropriate time | |||
end of the SR-MPLS path it is necessary to provide an indication to the tail-en | determined by the implementation. Further, an implementation | |||
d that NSH follows the SR-MPLS label | <bcp14>MAY</bcp14> allow network operators to set the said time value. | |||
stack as described by <xref target="RFC8596"></x | In the case where a packet arriving from an SF does not have a matching | |||
ref>. | cached entry, the SFF <bcp14>SHOULD</bcp14> log this event and | |||
</t><t> | <bcp14>MUST</bcp14> drop the packet. </t> | |||
If the CONTINUE operation is to be used, this is | </section> | |||
the equivalent of MPLS Ultimate Hop Popping (UHP) and therefore it is necessary | <section numbered="true" toc="default"> | |||
to ensure that the penultimate hop node | <name>MTU Considerations</name> | |||
does not pop the top label of the SR-MPLS label | <t>Aligned with <xref target="RFC8300" sectionFormat="of" section="5"/> | |||
stack and thereby expose NSH to the wrong SFF. This is realized by setting No-PH | and <xref target="RFC8754" sectionFormat="of" section="5.3"/>, it is | |||
P flag in | <bcp14>RECOMMENDED</bcp14> for network operators to increase the | |||
Prefix-SID Sub-TLV <xref target="RFC8667"></xref | underlying MTU so that SR/NSH traffic is forwarded within an SR domain | |||
>, <xref target="RFC8665"></xref>. It is RECOMMENDED that a specific prefix-SID | without fragmentation. | |||
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 en | ||||
capsulation is as illustrated in <xref target="figure_6"></xref>. | ||||
</t><t> | ||||
<figure align="center" title="NSH using SRv6 Tran | ||||
sport" 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 th | ||||
e 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 d | ||||
iscussed in <xref target="RFC7665"></xref>.</t> | ||||
<t> | ||||
NSH-specific security considerations are discusse | ||||
d in <xref target="RFC8300"></xref>.</t> | ||||
<t> | ||||
Generic segment routing related security conside | ||||
rations 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 recogniz | ||||
e NSH it should follow the procedures described in section 4 of <xref target="RF | ||||
C8200"></xref>. For SR-MPLS, if a | ||||
processing node does not recognize NSH it should foll | ||||
ow 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 appropri | ||||
ate 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 matc | ||||
hing cached entry, the SFF SHOULD log this event, and MUST drop the packet. </t> | ||||
</section> | ||||
<section title="MTU Considerations"> | </t> | |||
<t> | </section> | |||
Aligned with Section 5 of [RFC8300] and Section | <section anchor="IANA" numbered="true" toc="default"> | |||
5.3 of <xref target="RFC8754"></xref>, it is RECOMMENDED for network operators t | <name>IANA Considerations</name> | |||
o increase the underlying MTU so that SR/NSH traffic is forwarded | <section anchor="NSHPROTO" numbered="true" toc="default"> | |||
within an SR domain without fragmentation. | <name>Protocol Number for the NSH</name> | |||
<t>IANA has assigned protocol number 145 for the NSH | ||||
<xref target="RFC8300" format="default"/> in the "Assigned Internet | ||||
Protocol Numbers" registry | ||||
<eref target="https://www.iana.org/assignments/protocol-numbers/" bracket | ||||
s="angle"/>.</t> | ||||
<table anchor="iana-1" align="center"> | ||||
<name>Assigned Internet Protocol Numbers Registry</name> | ||||
<thead> | ||||
<tr> | ||||
<th>Decimal</th> | ||||
<th>Keyword</th> | ||||
<th>Protocol</th> | ||||
<th>IPv6 Extension Header</th> | ||||
<th>Reference</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>145</td> | ||||
<td>NSH</td> | ||||
<td>Network Service Header</td> | ||||
<td>N</td> | ||||
<td>RFC 9491</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</t> | </section> | |||
</section> | <section anchor="NSHEPB" numbered="true" toc="default"> | |||
<name>SRv6 Endpoint Behavior for the NSH</name> | ||||
<section anchor="IANA" title="IANA Considerations"> | <t>IANA has allocated the following value in the "SRv6 Endpoint | |||
Behaviors" subregistry under the "Segment Routing" registry:</t> | ||||
<section anchor="NSHPROTO" title="Protocol Number for NSH"> | <table anchor="iana-2" align="center"> | |||
<figure><artwork>IANA is requested to assign a protocol number TBA1 for t | <name>SRv6 Endpoint Behaviors Subregistry</name> | |||
he NSH [RFC8300] from the | <thead> | |||
"Assigned Internet Protocol Numbers" registry available at | <tr> | |||
https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml | <th>Value</th> | |||
<th>Hex</th> | ||||
<th>Endpoint Behavior</th> | ||||
<th>Reference</th> | ||||
<th>Change Controller</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>84</td> | ||||
<td>0x0054</td> | ||||
<td>End.NSH - NSH Segment</td> | ||||
<td>RFC 9491</td> | ||||
<td>IETF</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
+---------+---------+--------------+---------------+----------------+ | </section> | |||
| Decimal | Keyword | Protocol | IPv6 | Reference | | </section> | |||
| | | | 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 End | ||||
point Behaviors" | ||||
sub-registry belonging to the top-level "Segment-routing with IPv6 data | ||||
plane (SRv6) Parameters" registry, the following allocations: | ||||
Value Description Reference | </middle> | |||
-------------------------------------------------------------- | <back> | |||
TBA2 End.NSH - NSH Segment [This.ID] | ||||
</artwork></figure> | <displayreference target="I-D.ietf-spring-sr-service-programming" to="SERVICE-PR | |||
</section> | OGRAMMING"/> | |||
</section> | ||||
<section anchor="Contributors" title="Contributing Authors"> | <references> | |||
<t><figure><artwork> | <name>References</name> | |||
The following co-authors, along with their respective affiliations at | <references> | |||
the time of publication, provided valuable inputs and text contributions | <name>Normative References</name> | |||
to this document. | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
119.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
174.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
402.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
300.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
754.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
660.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
663.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
665.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
667.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3 | ||||
031.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
200.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
498.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
665.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
596.xml"/> | ||||
Mohamed Boucadair | <reference anchor="I-D.ietf-spring-sr-service-programming"> | |||
Orange | <front> | |||
mohamed.boucadair@orange.com | <title>Service Programming with Segment Routing</title> | |||
<author fullname="Francois Clad" initials="F." surname="Clad" role="editor"> | ||||
<organization>Cisco Systems, Inc.</organization> | ||||
</author> | ||||
<author fullname="Xiaohu Xu" initials="X." surname="Xu" role="editor"> | ||||
<organization>China Mobile</organization> | ||||
</author> | ||||
<author fullname="Clarence Filsfils" initials="C." surname="Filsfils"> | ||||
<organization>Cisco Systems, Inc.</organization> | ||||
</author> | ||||
<author fullname="Daniel Bernier" initials="D." surname="Bernier"> | ||||
<organization>Bell Canada</organization> | ||||
</author> | ||||
<author fullname="Cheng Li" initials="C." surname="Li"> | ||||
<organization>Huawei</organization> | ||||
</author> | ||||
<author fullname="Bruno Decraene" initials="B." surname="Decraene"> | ||||
<organization>Orange</organization> | ||||
</author> | ||||
<author fullname="Shaowen Ma" initials="S." surname="Ma"> | ||||
<organization>Mellanox</organization> | ||||
</author> | ||||
<author fullname="Chaitanya Yadlapalli" initials="C." surname="Yadlapalli"> | ||||
<organization>AT&T</organization> | ||||
</author> | ||||
<author fullname="Wim Henderickx" initials="W." surname="Henderickx"> | ||||
<organization>Nokia</organization> | ||||
</author> | ||||
<author fullname="Stefano Salsano" initials="S." surname="Salsano"> | ||||
<organization>Universita di Roma "Tor Vergata"</organization> | ||||
</author> | ||||
<date day="21" month="August" year="2023"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-spring-sr-service-programmin | ||||
g-08"/> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
Joel Halpern | <section anchor="Contributors" numbered="false" toc="default"> | |||
Ericsson | <name>Contributors</name> | |||
joel.halpern@ericsson.com | <t>The following coauthors provided valuable inputs and text | |||
contributions to this document.</t> | ||||
Syed Hassan | <contact fullname="Mohamed Boucadair"> | |||
Cisco System, inc. | <organization>Orange</organization> | |||
shassan@cisco.com | <address> | |||
<email>mohamed.boucadair@orange.com</email> | ||||
</address> | ||||
</contact> | ||||
Wim Henderickx | <contact fullname="Joel Halpern"> | |||
Nokia | <organization>Ericsson</organization> | |||
wim.henderickx@nokia.com | <address> | |||
<email>joel.halpern@ericsson.com</email> | ||||
</address> | ||||
</contact> | ||||
Haoyu Song | <contact fullname="Syed Hassan"> | |||
Futurewei Technologies | <organization>Cisco System, inc.</organization> | |||
haoyu.song@futurewei.com | <address> | |||
</artwork></figure></t> | <email>shassan@cisco.com</email> | |||
</section> | </address> | |||
</contact> | ||||
</middle> | <contact fullname="Wim Henderickx"> | |||
<organization>Nokia</organization> | ||||
<address> | ||||
<email>wim.henderickx@nokia.com</email> | ||||
</address> | ||||
</contact> | ||||
<back> | <contact fullname="Haoyu Song"> | |||
<references title="Normative References"> | <organization>Futurewei Technologies</organization> | |||
&RFC2119; | <address> | |||
&RFC8174; | <email>haoyu.song@futurewei.com</email> | |||
&RFC8402; | </address> | |||
&NSH; | </contact> | |||
&RFC8754; | ||||
&RFC8660; | ||||
&RFC8663; | ||||
&RFC8665; | ||||
&RFC8667; | ||||
&RFC3031; | ||||
&RFC8200; | ||||
</references> | ||||
<references title="Informative References"> | ||||
&SFCSTATE; | ||||
&SFCARCH; | ||||
&RFC8596; | ||||
&SRSPGM; | ||||
</references> | </section> | |||
</back> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 35 change blocks. | ||||
726 lines changed or deleted | 701 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |