| rfc9015.original | rfc9015.txt | |||
|---|---|---|---|---|
| BESS Working Group A. Farrel | Internet Engineering Task Force (IETF) A. Farrel | |||
| Internet-Draft Old Dog Consulting | Request for Comments: 9015 Old Dog Consulting | |||
| Intended status: Standards Track J. Drake | Category: Standards Track J. Drake | |||
| Expires: February 22, 2021 E. Rosen | ISSN: 2070-1721 E. Rosen | |||
| Juniper Networks | Juniper Networks | |||
| J. Uttaro | J. Uttaro | |||
| AT&T | AT&T | |||
| L. Jalil | L. Jalil | |||
| Verizon | Verizon | |||
| August 21, 2020 | May 2021 | |||
| BGP Control Plane for the Network Service Header in Service Function | BGP Control Plane for the Network Service Header in Service Function | |||
| Chaining | Chaining | |||
| draft-ietf-bess-nsh-bgp-control-plane-18 | ||||
| Abstract | Abstract | |||
| This document describes the use of BGP as a control plane for | This document describes the use of BGP as a control plane for | |||
| networks that support Service Function Chaining (SFC). The document | networks that support service function chaining. The document | |||
| introduces a new BGP address family called the SFC Address Family | introduces a new BGP address family called the "Service Function | |||
| Identifier / Subsequent Address Family Identifier (SFC AFI/SAFI) with | Chain (SFC) Address Family Identifier / Subsequent Address Family | |||
| two route types. One route type is originated by a node to advertise | Identifier" (SFC AFI/SAFI) with two Route Types. One Route Type is | |||
| that it hosts a particular instance of a specified service function. | originated by a node to advertise that it hosts a particular instance | |||
| This route type also provides "instructions" on how to send a packet | of a specified service function. This Route Type also provides | |||
| to the hosting node in a way that indicates that the service function | "instructions" on how to send a packet to the hosting node in a way | |||
| has to be applied to the packet. The other route type is used by a | that indicates that the service function has to be applied to the | |||
| Controller to advertise the paths of "chains" of service functions, | packet. The other Route Type is used by a controller to advertise | |||
| and to give a unique designator to each such path so that they can be | the paths of "chains" of service functions and give a unique | |||
| used in conjunction with the Network Service Header defined in RFC | designator to each such path so that they can be used in conjunction | |||
| 8300. | with the Network Service Header (NSH) defined in RFC 8300. | |||
| This document adopts the SFC architecture described in RFC 7665. | This document adopts the service function chaining architecture | |||
| described in RFC 7665. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | This document is a product of the Internet Engineering Task Force | |||
| Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
| working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
| and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
| time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9015. | |||
| material or to cite them other than as "work in progress." | ||||
| This Internet-Draft will expire on February 22, 2021. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 1.1. Requirements Language | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2. Terminology | |||
| 2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Overview | |||
| 2.1. Overview of Service Function Chaining . . . . . . . . . . 6 | 2.1. Overview of Service Function Chaining | |||
| 2.2. Control Plane Overview . . . . . . . . . . . . . . . . . 8 | 2.2. Control Plane Overview | |||
| 3. BGP SFC Routes . . . . . . . . . . . . . . . . . . . . . . . 12 | 3. BGP SFC Routes | |||
| 3.1. Service Function Instance Route (SFIR) . . . . . . . . . 13 | 3.1. Service Function Instance Route (SFIR) | |||
| 3.1.1. SFIR Pool Identifier Extended Community . . . . . . . 14 | 3.1.1. SFIR Pool Identifier Extended Community | |||
| 3.1.2. MPLS Mixed Swapping/Stacking Extended Community . . . 15 | 3.1.2. MPLS Mixed Swapping/Stacking Extended Community | |||
| 3.2. Service Function Path Route (SFPR) . . . . . . . . . . . 16 | 3.2. Service Function Path Route (SFPR) | |||
| 3.2.1. The SFP Attribute . . . . . . . . . . . . . . . . . . 17 | 3.2.1. The SFP Attribute | |||
| 3.2.2. General Rules For The SFP Attribute . . . . . . . . . 23 | 3.2.2. General Rules for the SFP Attribute | |||
| 4. Mode of Operation . . . . . . . . . . . . . . . . . . . . . . 24 | 4. Mode of Operation | |||
| 4.1. Route Targets . . . . . . . . . . . . . . . . . . . . . . 24 | 4.1. Route Targets | |||
| 4.2. Service Function Instance Routes . . . . . . . . . . . . 24 | 4.2. Service Function Instance Routes | |||
| 4.3. Service Function Path Routes . . . . . . . . . . . . . . 25 | 4.3. Service Function Path Routes | |||
| 4.4. Classifier Operation . . . . . . . . . . . . . . . . . . 27 | 4.4. Classifier Operation | |||
| 4.5. Service Function Forwarder Operation . . . . . . . . . . 27 | 4.5. Service Function Forwarder Operation | |||
| 4.5.1. Processing With 'Gaps' in the SI Sequence . . . . . . 28 | 4.5.1. Processing with "Gaps" in the SI Sequence | |||
| 5. Selection within Service Function Paths . . . . . . . . . . . 30 | 5. Selection within Service Function Paths | |||
| 6. Looping, Jumping, and Branching . . . . . . . . . . . . . . . 32 | 6. Looping, Jumping, and Branching | |||
| 6.1. Protocol Control of Looping, Jumping, and Branching . . . 32 | 6.1. Protocol Control of Looping, Jumping, and Branching | |||
| 6.2. Implications for Forwarding State . . . . . . . . . . . . 33 | 6.2. Implications for Forwarding State | |||
| 7. Advanced Topics . . . . . . . . . . . . . . . . . . . . . . . 33 | 7. Advanced Topics | |||
| 7.1. Correlating Service Function Path Instances . . . . . . . 34 | 7.1. Correlating Service Function Path Instances | |||
| 7.2. Considerations for Stateful Service Functions . . . . . . 34 | 7.2. Considerations for Stateful Service Functions | |||
| 7.3. VPN Considerations and Private Service Functions . . . . 35 | 7.3. VPN Considerations and Private Service Functions | |||
| 7.4. Flow Specification for SFC Classifiers . . . . . . . . . 36 | 7.4. Flow Specification for SFC Classifiers | |||
| 7.5. Choice of Data Plane SPI/SI Representation . . . . . . . 38 | 7.5. Choice of Data Plane SPI/SI Representation | |||
| 7.5.1. MPLS Representation of the SPI/SI . . . . . . . . . . 39 | 7.5.1. MPLS Representation of the SPI/SI | |||
| 7.6. MPLS Label Swapping/Stacking Operation . . . . . . . . . 39 | 7.6. MPLS Label Swapping/Stacking Operation | |||
| 7.7. Support for MPLS-Encapsulated NSH Packets . . . . . . . . 39 | 7.7. Support for MPLS-Encapsulated NSH Packets | |||
| 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 40 | 8. Examples | |||
| 8.1. Example Explicit SFP With No Choices . . . . . . . . . . 42 | 8.1. Example Explicit SFP with No Choices | |||
| 8.2. Example SFP With Choice of SFIs . . . . . . . . . . . . . 42 | 8.2. Example SFP with Choice of SFIs | |||
| 8.3. Example SFP With Open Choice of SFIs . . . . . . . . . . 43 | 8.3. Example SFP with Open Choice of SFIs | |||
| 8.4. Example SFP With Choice of SFTs . . . . . . . . . . . . . 43 | 8.4. Example SFP with Choice of SFTs | |||
| 8.5. Example Correlated Bidirectional SFPs . . . . . . . . . . 44 | 8.5. Example Correlated Bidirectional SFPs | |||
| 8.6. Example Correlated Asymmetrical Bidirectional SFPs . . . 45 | 8.6. Example Correlated Asymmetrical Bidirectional SFPs | |||
| 8.7. Example Looping in an SFP . . . . . . . . . . . . . . . . 45 | 8.7. Example Looping in an SFP | |||
| 8.8. Example Branching in an SFP . . . . . . . . . . . . . . . 46 | 8.8. Example Branching in an SFP | |||
| 8.9. Examples of SFPs with Stateful Service Functions . . . . 46 | 8.9. Examples of SFPs with Stateful Service Functions | |||
| 8.9.1. Forward and Reverse Choice Made at the SFF . . . . . 47 | 8.9.1. Forward and Reverse Choice Made at the SFF | |||
| 8.9.2. Parallel End-to-End SFPs with Shared SFF . . . . . . 48 | 8.9.2. Parallel End-to-End SFPs with Shared SFF | |||
| 8.9.3. Parallel End-to-End SFPs with Separate SFFs . . . . . 50 | 8.9.3. Parallel End-to-End SFPs with Separate SFFs | |||
| 8.9.4. Parallel SFPs Downstream of the Choice . . . . . . . 52 | 8.9.4. Parallel SFPs Downstream of the Choice | |||
| 8.10. Examples Using IPv6 Addressing . . . . . . . . . . . . . 55 | 8.10. Examples Using IPv6 Addressing | |||
| 8.10.1. Example Explicit SFP With No Choices . . . . . . . . 57 | 8.10.1. Example Explicit SFP with No Choices | |||
| 8.10.2. Example SFP With Choice of SFIs . . . . . . . . . . 58 | 8.10.2. Example SFP with Choice of SFIs | |||
| 8.10.3. Example SFP With Open Choice of SFIs . . . . . . . . 58 | 8.10.3. Example SFP with Open Choice of SFIs | |||
| 8.10.4. Example SFP With Choice of SFTs . . . . . . . . . . 59 | 8.10.4. Example SFP with Choice of SFTs | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 60 | 9. Security Considerations | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 62 | 10. IANA Considerations | |||
| 10.1. New BGP AF/SAFI . . . . . . . . . . . . . . . . . . . . 62 | 10.1. New BGP AF/SAFI | |||
| 10.2. New BGP Path Attribute . . . . . . . . . . . . . . . . . 62 | 10.2. "SFP attribute" BGP Path Attribute | |||
| 10.3. New SFP Attribute TLVs Type Registry . . . . . . . . . . 62 | 10.3. "SFP Attribute TLVs" Registry | |||
| 10.4. New SFP Association Type Registry . . . . . . . . . . . 63 | 10.4. "SFP Association Type" Registry | |||
| 10.5. New Service Function Type Registry . . . . . . . . . . . 64 | 10.5. "Service Function Chaining Service Function Types" | |||
| 10.6. New Generic Transitive Experimental Use Extended | Registry | |||
| Community Sub-Types . . . . . . . . . . . . . . . . . . 66 | 10.6. Flow Specification for SFC Classifiers | |||
| 10.7. New BGP Transitive Extended Community Type . . . . . . . 66 | 10.7. New BGP Transitive Extended Community Type | |||
| 10.8. New SFC Extended Community Sub-Types Registry . . . . . 66 | 10.8. "SFC Extended Community Sub-Types" Registry | |||
| 10.9. SPI/SI Representation . . . . . . . . . . . . . . . . . 67 | 10.9. New SPI/SI Representation Sub-TLV | |||
| 10.10. SFC SPI/SI Representation Flags Registry . . . . . . . . 67 | 10.10. "SFC SPI/SI Representation Flags" Registry | |||
| 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 67 | 11. References | |||
| 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 68 | 11.1. Normative References | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 68 | 11.2. Informative References | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 68 | Acknowledgements | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 70 | Contributors | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 71 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| As described in [RFC7498], the delivery of end-to-end services can | As described in [RFC7498], the delivery of end-to-end services can | |||
| require a packet to pass through a series of Service Functions (SFs) | require a packet to pass through a series of Service Functions (SFs) | |||
| (e.g., WAN and application accelerators, Deep Packet Inspection (DPI) | -- e.g., WAN and application accelerators, Deep Packet Inspection | |||
| engines, firewalls, TCP optimizers, and server load balancers) in a | (DPI) engines, firewalls, TCP optimizers, and server load balancers | |||
| specified order: this is termed "Service Function Chaining" (SFC). | -- in a specified order; this is termed "service function chaining". | |||
| There are a number of issues associated with deploying and | There are a number of issues associated with deploying and | |||
| maintaining service function chaining in production networks, which | maintaining service function chaining in production networks, which | |||
| are described below. | are described below. | |||
| Historically, if a packet needed to travel through a particular | Historically, if a packet needed to travel through a particular | |||
| service chain, the nodes hosting the service functions of that chain | service chain, the nodes hosting the service functions of that chain | |||
| were placed in the network topology in such a way that the packet | were placed in the network topology in such a way that the packet | |||
| could not reach its ultimate destination without first passing | could not reach its ultimate destination without first passing | |||
| through all the service functions in the proper order. This need to | through all the service functions in the proper order. This need to | |||
| place the service functions at particular topological locations | place the service functions at particular topological locations | |||
| limited the ability to adapt a service function chain to changes in | limited the ability to adapt a service function chain to changes in | |||
| network topology (e.g., link or node failures), network utilization, | network topology (e.g., link or node failures), network utilization, | |||
| or offered service load. These topological restrictions on where the | or offered service load. These topological restrictions on where the | |||
| service functions can be placed raised the following issues: | service functions could be placed raised the following issues: | |||
| 1. The process of configuring or modifying a service function chain | 1. The process of configuring or modifying a service function chain | |||
| is operationally complex and may require changes to the network | is operationally complex and may require changes to the network | |||
| topology. | topology. | |||
| 2. Alternate or redundant service functions may need to be co- | 2. Alternate or redundant service functions may need to be co- | |||
| located with the primary service functions. | located with the primary service functions. | |||
| 3. When there is more than one path between source and destination, | 3. When there is more than one path between source and destination, | |||
| forwarding may be asymmetric and it may be difficult to support | forwarding may be asymmetric, and it may be difficult to support | |||
| bidirectional service function chains using simple routing | bidirectional service function chains using simple routing | |||
| methodologies and protocols without adding mechanisms for traffic | methodologies and protocols without adding mechanisms for traffic | |||
| steering or traffic engineering. | steering or traffic engineering. | |||
| In order to address these issues, the SFC architecture describes | In order to address these issues, the service function chaining | |||
| Service Function Chains that are built in their own overlay network | architecture describes service function chains that are built in | |||
| (the service function overlay network), coexisting with other overlay | their own overlay network (the service function overlay network), | |||
| networks, over a common underlay network [RFC7665]. A Service | coexisting with other overlay networks, over a common underlay | |||
| Function Chain is a sequence of Service Functions through which | network [RFC7665]. A service function chain is a sequence of service | |||
| packet flows that satisfy specified criteria will pass. | functions through which packet flows that satisfy specified criteria | |||
| will pass. | ||||
| This document describes the use of BGP as a control plane for | This document describes the use of BGP as a control plane for | |||
| networks that support Service Function Chaining (SFC). The document | networks that support service function chaining. The document | |||
| introduces a new BGP address family called the SFC Address Family | introduces a new BGP address family called the "Service Function | |||
| Identifier / Subsequent Address Family Identifier (AFI/SAFI) with two | Chain (SFC) Address Family Identifier / Subsequent Address Family | |||
| route types. One route type is originated by a node to advertise | Identifier" (SFC AFI/SAFI) with two Route Types. One Route Type is | |||
| that it hosts a particular instance of a specified service function. | originated by a node to advertise that it hosts a particular instance | |||
| This route type also provides "instructions" on how to send a packet | of a specified service function. This Route Type also provides | |||
| to the hosting node in a way that indicates that the service function | "instructions" on how to send a packet to the hosting node in a way | |||
| has to be applied to the packet. The other route type is used by a | that indicates that the service function has to be applied to the | |||
| Controller (a centralized network component responsible for planning | packet. The other Route Type is used by a controller (a centralized | |||
| and coordinating Service Function Chaining within the network) to | network component responsible for planning and coordinating service | |||
| advertise the paths of "chains" of service functions, and to give a | function chaining within the network) to advertise the paths of | |||
| unique designator to each such path so that they can be used in | "chains" of service functions and give a unique designator to each | |||
| conjunction with the Network Service Header [RFC8300]. | such path so that they can be used in conjunction with the Network | |||
| Service Header (NSH) [RFC8300]. | ||||
| This document adopts the SFC architecture described in [RFC7665]. | This document adopts the service function chaining architecture | |||
| described in [RFC7665]. | ||||
| 1.1. Requirements Language | 1.1. Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 1.2. Terminology | 1.2. Terminology | |||
| This document uses the following terms from [RFC7665]: | This document uses the following terms from [RFC7665]: | |||
| o Bidirectional Service Function Chain | * Bidirectional Service Function Chain | |||
| o Classifier | * Classifier | |||
| o Service Function (SF) | * Service Function (SF) | |||
| o Service Function Chain (SFC) | * Service Function Chain (SFC) | |||
| o Service Function Forwarder (SFF) | * Service Function Forwarder (SFF) | |||
| o Service Function Instance (SFI) | * Service Function Instance (SFI) | |||
| o Service Function Path (SFP) | * Service Function Path (SFP) | |||
| o SFC branching | * SFC branching | |||
| Additionally, this document uses the following terms from [RFC8300]: | Additionally, this document uses the following terms from [RFC8300]: | |||
| o Network Service Header (NSH) | * Network Service Header (NSH) | |||
| o Service Index (SI) | * Service Index (SI) | |||
| o Service Path Identifier (SPI) | * Service Path Identifier (SPI) | |||
| This document introduces the following terms: | This document introduces the following terms: | |||
| o Service Function Instance Route (SFIR). A new BGP Route Type | Service Function Instance Route (SFIR): A new BGP Route Type | |||
| advertised by the node that hosts an SFI to describe the SFI and | advertised by the node that hosts an SFI to describe the SFI and | |||
| to announce the way to forward a packet to the node through the | to announce the way to forward a packet to the node through the | |||
| underlay network. | underlay network. | |||
| o Service Function Overlay Network. The logical network comprised | Service Function Overlay Network: The logical network comprised of | |||
| of Classifiers, SFFs, and SFIs that are connected by paths or | classifiers, SFFs, and SFIs that are connected by paths or tunnels | |||
| tunnels through underlay transport networks. | through underlay transport networks. | |||
| o Service Function Path Route (SFPR). A new BGP Route Type | Service Function Path Route (SFPR): A new BGP Route Type originated | |||
| originated by Controllers to advertise the details of each SFP. | by controllers to advertise the details of each SFP. | |||
| o Service Function Type (SFT). An indication of the function and | Service Function Type (SFT): An indication of the function and | |||
| features of an SFI. | features of an SFI. | |||
| 2. Overview | 2. Overview | |||
| This section provides an overview of Service Function Chaining in | This section provides an overview of service function chaining in | |||
| general, and the control plane defined in this document. After | general and the control plane defined in this document. After | |||
| reading this section, readers may find it helpful to look through | reading this section, readers may find it helpful to look through | |||
| Section 8 for some simple worked examples. | Section 8 for some simple worked examples. | |||
| 2.1. Overview of Service Function Chaining | 2.1. Overview of Service Function Chaining | |||
| In [RFC8300] a Service Function Chain (SFC) is an ordered list of | In [RFC8300], a Service Function Chain (SFC) is an ordered list of | |||
| Service Functions (SFs). A Service Function Path (SFP) is an | Service Functions (SFs). A Service Function Path (SFP) is an | |||
| indication of which instances of SFs are acceptable to be traversed | indication of which instances of SFs are acceptable to be traversed | |||
| in an instantiation of an SFC in a service function overlay network. | in an instantiation of an SFC in a service function overlay network. | |||
| The Service Path Identifier (SPI) is a 24-bit number that identifies | The Service Path Identifier (SPI) is a 24-bit number that identifies | |||
| a specific SFP, and a Service Index (SI) is an 8-bit number that | a specific SFP, and a Service Index (SI) is an 8-bit number that | |||
| identifies a specific point in that path. In the context of a | identifies a specific point in that path. In the context of a | |||
| particular SFP (identified by an SPI), an SI represents a particular | particular SFP (identified by an SPI), an SI represents a particular | |||
| Service Function, and indicates the order of that SF in the SFP. | service function and indicates the order of that SF in the SFP. | |||
| Within the context of a specific SFP, an SI references a set of one | Within the context of a specific SFP, an SI references a set of one | |||
| or more SFs. Each of those SFs may be supported by one or more | or more SFs. Each of those SFs may be supported by one or more | |||
| Service Function Instances (SFIs). Thus an SI may represent a choice | Service Function Instances (SFIs). Thus, an SI may represent a | |||
| of SFIs of one or more Service Function Types. By deploying multiple | choice of SFIs of one or more service function types. By deploying | |||
| SFIs for a single SF, one can provide load balancing and redundancy. | multiple SFIs for a single SF, one can provide load balancing and | |||
| redundancy. | ||||
| A special functional element, called a Classifier, is located at each | A special functional element, called a "classifier", is located at | |||
| ingress point to a service function overlay network. It assigns the | each ingress point to a service function overlay network. It assigns | |||
| packets of a given packet flow to a specific Service Function Path. | the packets of a given packet flow to a specific SFP. This may be | |||
| This may be done by comparing specific fields in a packet's header | done by comparing specific fields in a packet's header with local | |||
| with local policy, which may be customer/network/service specific. | policy, which may be customer/network/service specific. The | |||
| The Classifier picks an SFP and sets the SPI accordingly, it then | classifier picks an SFP and sets the SPI accordingly; it then sets | |||
| sets the SI to the value of the SI for the first hop in the SFP, and | the SI to the value of the SI for the first hop in the SFP, and then | |||
| then prepends a Network Services Header (NSH) [RFC8300] containing | prepends a Network Service Header (NSH) [RFC8300] containing the | |||
| the assigned SPI/SI to that packet. Note that the Classifier and the | assigned SPI/SI to that packet. Note that the classifier and the | |||
| node that hosts the first Service Function in a Service Function Path | node that hosts the first SF in an SFP need not be located at the | |||
| need not be located at the same point in the service function overlay | same point in the service function overlay network. | |||
| network. | ||||
| Note that the presence of the NSH can make it difficult for nodes in | Note that the presence of the NSH can make it difficult for nodes in | |||
| the underlay network to locate the fields in the original packet that | the underlay network to locate the fields in the original packet that | |||
| would normally be used to constrain equal cost multipath (ECMP) | would normally be used to constrain equal-cost multipath (ECMP) | |||
| forwarding. Therefore, it is recommended that the node prepending | forwarding. Therefore, it is recommended that the node prepending | |||
| the NSH also provide some form of entropy indicator that can be used | the NSH also provide some form of entropy indicator that can be used | |||
| in the underlay network. How this indicator is generated and | in the underlay network. How this indicator is generated and | |||
| supplied, and how an SFF generates a new entropy indicator when it | supplied, and how an SFF generates a new entropy indicator when it | |||
| forwards a packet to the next SFF, are out of scope of this document. | forwards a packet to the next SFF, are out of the scope of this | |||
| document. | ||||
| The Service Function Forwarder (SFF) receives a packet from the | The Service Function Forwarder (SFF) receives a packet from the | |||
| previous node in a Service Function Path, removes the packet's link | previous node in an SFP, removes the packet's link layer or tunnel | |||
| layer or tunnel encapsulation and hands the packet and the NSH to the | encapsulation, and hands the packet and the NSH to the SFI for | |||
| Service Function Instance for processing. The SFI has no knowledge | processing. The SFI has no knowledge of the SFP. | |||
| of the SFP. | ||||
| When the SFF receives the packet and the NSH back from the SFI it | When the SFF receives the packet and the NSH back from the SFI, it | |||
| must select the next SFI along the path using the SPI and SI in the | must select the next SFI along the path using the SPI and SI in the | |||
| NSH and potentially choosing between multiple SFIs (possibly of | NSH and potentially choosing between multiple SFIs (possibly of | |||
| different Service Function Types) as described in Section 5. In the | different SFTs), as described in Section 5. In the normal case, the | |||
| normal case the SPI remains unchanged and the SI will have been | SPI remains unchanged, and the SI will have been decremented to | |||
| decremented to indicate the next SF along the path. But other | indicate the next SF along the path. But other possibilities exist | |||
| possibilities exist if the SF makes other changes to the NSH through | if the SF makes other changes to the NSH through a process of | |||
| a process of re-classification: | reclassification: | |||
| o The SI in the NSH may indicate: | ||||
| * A previous SF in the path: known as "looping" (see Section 6). | * The SI in the NSH may indicate: | |||
| * An SF further down the path: known as "jumping" (see also | - A previous SF in the path; this is known as "looping" (see | |||
| Section 6). | Section 6). | |||
| o The SPI and the SI may point to an SF on a different SFP: known as | - An SF further down the path; this is known as "jumping" (again | |||
| "branching" (see also Section 6). | see Section 6). | |||
| * The SPI and the SI may point to an SF on a different SFP; this is | ||||
| known as "branching" (see Section 6). | ||||
| Such modifications are limited to within the same service function | Such modifications are limited to within the same service function | |||
| overlay network. That is, an SPI is known within the scope of | overlay network. That is, an SPI is known within the scope of | |||
| service function overlay network. Furthermore, the new SI value is | service function overlay network. Furthermore, the new SI value is | |||
| interpreted in the context of the SFP identified by the SPI. | interpreted in the context of the SFP identified by the SPI. | |||
| As described in [RFC8300], an unknown or invalid SPI is treated as an | As described in [RFC8300], an SPI that is unknown or not valid is | |||
| error and the SFF drops the packet: such errors should be logged, and | treated as an error, and the SFF drops the packet; such errors should | |||
| such logs are subject to rate limits. | be logged, and such logs are subject to rate limits. | |||
| Also, as described in [RFC8300], an SFF receiving an SI that is | Also, as described in [RFC8300], an SFF receiving an SI that is | |||
| unknown in the context of the SPI can reduce the value to the next | unknown in the context of the SPI can reduce the value to the next | |||
| meaningful SI value in the SFP indicated by the SPI. If no such | meaningful SI value in the SFP indicated by the SPI. If no such | |||
| value exists or if the SFF does not support reducing the SI, the SFF | value exists, or if the SFF does not support reducing the SI, the SFF | |||
| drops the packet and should log the event: such logs are also subject | drops the packet and should log the event; such logs are also subject | |||
| to rate limits. | to rate limits. | |||
| The SFF then selects an SFI that provides the SF denoted by the SPI/ | The SFF then selects an SFI that provides the SF denoted by the SPI/ | |||
| SI, and forwards the packet to the SFF that supports that SFI. | SI and forwards the packet to the SFF that supports that SFI. | |||
| [RFC8300] makes it clear that the intended scope is for use within a | [RFC8300] makes it clear that the intended scope is for use within a | |||
| single provider's operational domain. | single provider's operational domain. | |||
| This document adopts the SFC architecture described in [RFC7665] and | This document adopts the service function chaining architecture | |||
| adds a control plane to support the functions as described in | described in [RFC7665] and adds a control plane to support the | |||
| Section 2.2. An essential component of this solution is the | functions, as described in Section 2.2. An essential component of | |||
| Controller. This is a network component responsible for planning | this solution is the controller. This is a network component | |||
| SFPs within the network. It gathers information about the | responsible for planning SFPs within the network. It gathers | |||
| availability of SFIs and SFFs, instructs the control plane about the | information about the availability of SFIs and SFFs, instructs the | |||
| SFPs to be programmed, and instructs the Classifiers how to assign | control plane about the SFPs to be programmed, and instructs the | |||
| traffic flows to individual SFPs. | classifiers how to assign traffic flows to individual SFPs. | |||
| 2.2. Control Plane Overview | 2.2. Control Plane Overview | |||
| To accomplish the function described in Section 2.1, this document | To accomplish the function described in Section 2.1, this document | |||
| introduces the Service Function Type (SFT) that is the category of SF | introduces the Service Function Type (SFT), which is the category of | |||
| that is supported by an SFF (such as "firewall"). An IANA registry | SF that is supported by an SFF (such as "firewall"). An IANA | |||
| of Service Function Types is introduced in Section 10.5 and is | registry of service function types is introduced in Section 10.5 and | |||
| consistent with types used in other work such as | is consistent with types used in other work, such as [BGP-LS-SR]. An | |||
| [I-D.dawra-idr-bgp-ls-sr-service-segments]. An SFF may support SFs | SFF may support SFs of multiple different SFTs, and it may support | |||
| of multiple different SFTs, and may support multiple SFIs of each SF. | multiple SFIs of each SF. | |||
| The registry of SFT values (see Section 10.5) is split into three | The registry of SFT values (see Section 10.5) is split into three | |||
| ranges with assignment policies per [RFC8126]: | ranges with assignment policies per [RFC8126]: | |||
| o The Special Purpose SFT values range is assigned through Standards | * The special-purpose SFT values range is assigned through Standards | |||
| Action. Values in that range are used for special SFC operations | Action. Values in that range are used for special SFC operations | |||
| and do not apply to the types of SF that may form part of the SFP. | and do not apply to the types of SF that may form part of the SFP. | |||
| o The First Come First Served range tracks assignments of STF values | * The First Come First Served range tracks assignments of SFT values | |||
| made by any party that defines an SF type. Reference through an | made by any party that defines an SF type. Reference through an | |||
| Internet-Draft is desirable, but not required. | Internet-Draft is desirable, but not required. | |||
| o The Private Use range is not tracked by IANA and is primarily | * The Private Use range is not tracked by IANA and is primarily | |||
| intended for use in private networks where the meaning of the SFT | intended for use in private networks where the meaning of the SFT | |||
| values is locally tracked and under the control of a local | values is locally tracked and under the control of a local | |||
| administrator. | administrator. | |||
| It is envisaged that the majority of SFT values used will be assigned | It is envisaged that the majority of SFT values used will be assigned | |||
| from the First Come First Served space in the registry. This will | from the First Come First Served space in the registry. This will | |||
| ensure interoperability especially in situations where software and | ensure interoperability, especially in situations where software and | |||
| hardware from different vendors is deployed in the same networks, or | hardware from different vendors are deployed in the same networks, or | |||
| when networks are merged. However, operators of private networks may | when networks are merged. However, operators of private networks may | |||
| choose to develop their own SFs and manage the configuration and | choose to develop their own SFs and manage the configuration and | |||
| operation of their network through their own list of SFT values. | operation of their network through their own list of SFT values. | |||
| This document also introduces a new BGP AFI/SAFI (values to be | This document also introduces a new BGP AFI/SAFI (values 31 and 9, | |||
| assigned by IANA) for "SFC Routes". Two SFC Route Types are defined | respectively) for "SFC Routes". Two SFC Route Types are defined by | |||
| by this document: the Service Function Instance Route (SFIR), and the | this document: the Service Function Instance Route (SFIR) and the | |||
| Service Function Path Route (SFPR). As detailed in Section 3, the | Service Function Path Route (SFPR). As detailed in Section 3, the | |||
| route type is indicated by a sub-field in the Network Layer | Route Type is indicated by a subfield in the Network Layer | |||
| Reachability Information (NLRI). | Reachability Information (NLRI). | |||
| o The SFIR is advertised by the node that provides access to the | * The SFIR is advertised by the node that provides access to the | |||
| service function instance (i.e., the SFF). The SFIR describes a | service function instance (i.e., the SFF). The SFIR describes a | |||
| particular instance of a particular Service Function (i.e., an | particular instance of a particular SF (i.e., an SFI) and the way | |||
| SFI) and the way to forward a packet to it through the underlay | to forward a packet to it through the underlay network, i.e., IP | |||
| network, i.e., IP address and encapsulation information. | address and encapsulation information. | |||
| o The SFPRs are originated by Controllers. One SFPR is originated | * The SFPRs are originated by controllers. One SFPR is originated | |||
| for each Service Function Path. The SFPR specifies: | for each SFP. The SFPR specifies: | |||
| A. the SPI of the path | A. the SPI of the path, | |||
| B. the sequence of SFTs and/or SFIs of which the path consists | B. the sequence of SFTs and/or SFIs of which the path consists, | |||
| and | ||||
| C. for each such SFT or SFI, the SI that represents it in the | C. for each such SFT or SFI, the SI that represents it in the | |||
| identified path. | identified path. | |||
| This approach assumes that there is an underlay network that provides | This approach assumes that there is an underlay network that provides | |||
| connectivity between SFFs and Controllers, and that the SFFs are | connectivity between SFFs and controllers and that the SFFs are | |||
| grouped to form one or more service function overlay networks through | grouped to form one or more service function overlay networks through | |||
| which SFPs are built. We assume that the Controllers have BGP | which SFPs are built. We assume that the controllers have BGP | |||
| connectivity to all SFFs and all Classifiers within each service | connectivity to all SFFs and all classifiers within each service | |||
| function overlay network. | function overlay network. | |||
| When choosing the next SFI in a path, the SFF uses the SPI and SI as | When choosing the next SFI in a path, the SFF uses the SPI and SI as | |||
| well as the SFT to choose among the SFIs, applying, for example, a | well as the SFT to choose among the SFIs, applying, for example, a | |||
| load balancing algorithm or direct knowledge of the underlay network | load-balancing algorithm or direct knowledge of the underlay network | |||
| topology as described in Section 4. | topology, as described in Section 4. | |||
| The SFF then encapsulates the packet using the encapsulation | The SFF then encapsulates the packet using the encapsulation | |||
| specified by the SFIR of the selected SFI and forwards the packet. | specified by the SFIR of the selected SFI and forwards the packet. | |||
| See Figure 1. | See Figure 1. | |||
| Thus the SFF can be seen as a portal in the underlay network through | Thus, the SFF can be seen as a portal in the underlay network through | |||
| which a particular SFI is reached. | which a particular SFI is reached. | |||
| Figure 1 shows a reference model for the SFC architecture. There are | Figure 1 shows a reference model for the service function chaining | |||
| four SFFs (SFF-1 through SFF-4) connected by tunnels across the | architecture. There are four SFFs (SFF-1 through SFF-4) connected by | |||
| underlay network. Packets arrive at a Classifier and are channeled | tunnels across the underlay network. Packets arrive at a classifier | |||
| along SFPs to destinations reachable through SFF-4. | and are channeled along SFPs to destinations reachable through SFF-4. | |||
| SFF-1 and SFF-4 each have one instance of one SF attached (SFa and | SFF-1 and SFF-4 each have one instance of one SF attached (SFa and | |||
| SFe). SFF-2 has two types of SF attached: there is one instance of | SFe). SFF-2 has two types of SF attached: one instance of one (SFc) | |||
| one (SFc), and three instances of the other (SFb). SFF-3 has just | and three instances of the other (SFb). SFF-3 has just one instance | |||
| one instance of an SF (SFd), but it in this case the type of SFd is | of an SF (SFd), but in this case, the type of SFd is the same type as | |||
| the same type as SFb (SFTx). | SFb (SFTx). | |||
| This figure demonstrates how load balancing can be achieved by | This figure demonstrates how load balancing can be achieved by | |||
| creating several SFPs that satisfy the same SFC. Suppose an SFC | creating several SFPs that satisfy the same SFC. Suppose an SFC | |||
| needs to include SFa, an SF of type SFTx, and SFc. A number of SFPs | needs to include SFa, an SF of type SFTx, and SFc. A number of SFPs | |||
| can be constructed using any instance of SFb or using SFd. Load | can be constructed using any instance of SFb or using SFd. Load | |||
| balancing may be applied at two places: | balancing may be applied at two places: | |||
| o The Classifier may distribute different flows onto different SFPs | * The classifier may distribute different flows onto different SFPs | |||
| to share the load in the network and across SFIs. | to share the load in the network and across SFIs. | |||
| o SFF-2 may distribute different flows (on the same SFP) to | * SFF-2 may distribute different flows (on the same SFP) to | |||
| different instances of SFb to share the processing load. | different instances of SFb to share the processing load. | |||
| Note that, for convenience and clarity, Figure 1 shows only a few | Note that, for convenience and clarity, Figure 1 shows only a few | |||
| tunnels between SFFs. There could be a full mesh of such tunnels, or | tunnels between SFFs. There could be a full mesh of such tunnels, or | |||
| more likely, a selection of tunnels connecting key SFFs to enable the | more likely, a selection of tunnels connecting key SFFs to enable the | |||
| construction of SFPs and to balance load and traffic in the network. | construction of SFPs and balance load and traffic in the network. | |||
| Further, the figure does not show any controllers: these would each | Further, the figure does not show any controllers; these would each | |||
| have BGP connectivity to the Classifier and all of the SFFs. | have BGP connectivity to the classifier and all of the SFFs. | |||
| Packets | Packets | |||
| | | | | | | | | |||
| ------------ | ------------ | |||
| | | | | | | |||
| | Classifier | | | Classifier | | |||
| | | | | | | |||
| ------+----- | ------+----- | |||
| | | | | |||
| ---+--- --------- ------- | ---+--- --------- ------- | |||
| | | Tunnel | | | | | | | Tunnel | | | | | |||
| | SFF-1 |===============| SFF-2 |=========| SFF-4 | | | SFF-1 |===============| SFF-2 |=========| SFF-4 | | |||
| skipping to change at page 11, line 50 ¶ | skipping to change at line 509 ¶ | |||
| | |======| SFF-3 |====================| | | | |======| SFF-3 |====================| | | |||
| ---+--- | | ---+--- | ---+--- | | ---+--- | |||
| | ------- | | | ------- | | |||
| ....|.... ....|.... | ....|.... ....|.... | |||
| : | SFa: : | SFe: | : | SFa: : | SFe: | |||
| : --+-- : : --+-- : | : --+-- : : --+-- : | |||
| : | SFI | : : | SFI | : | : | SFI | : : | SFI | : | |||
| : ----- : : ----- : | : ----- : : ----- : | |||
| ......... ......... | ......... ......... | |||
| Figure 1: The SFC Architecture Reference Model | Figure 1: The Service Function Chaining Architecture Reference Model | |||
| As previously noted, [RFC8300] makes it clear that the mechanisms it | As previously noted, [RFC8300] makes it clear that the mechanisms it | |||
| defines are intended for use within a single provider's operational | defines are intended for use within a single provider's operational | |||
| domain. This reduces the requirements on the control plane function. | domain. This reduces the requirements on the control plane function. | |||
| [RFC7665] sets out the functions provided by a control plane for an | Section 5.2 of [RFC7665] sets out the functions provided by a control | |||
| SFC network in Section 5.2. The functions are broken down into six | plane for a service function chaining network. The functions are | |||
| items the first four of which are completely covered by the | broken down into six items, the first four of which are completely | |||
| mechanisms described in this document: | covered by the mechanisms described in this document: | |||
| 1. Visibility of all SFs and the SFFs through which they are | 1. Visibility of all SFs and the SFFs through which they are | |||
| reached. | reached. | |||
| 2. Computation of SFPs and programming into the network. | 2. Computation of SFPs and programming into the network. | |||
| 3. Selection of SFIs explicitly in the SFP or dynamically within the | 3. Selection of SFIs explicitly in the SFP or dynamically within the | |||
| network. | network. | |||
| 4. Programming of SFFs with forwarding path information. | 4. Programming of SFFs with forwarding path information. | |||
| The fifth and six items in the list in RFC 7665 concern the use of | The fifth and sixth items in the list in RFC 7665 concern the use of | |||
| metadata. These are more peripheral to the control plane mechanisms | metadata. These are more peripheral to the control plane mechanisms | |||
| defined in this document, but are discussed in Section 4.4. | defined in this document but are discussed in Section 4.4. | |||
| 3. BGP SFC Routes | 3. BGP SFC Routes | |||
| This document defines a new AFI/SAFI for BGP, known as "SFC", with an | This document defines a new AFI/SAFI for BGP, known as "SFC", with an | |||
| NLRI that is described in this section. | NLRI that is described in this section. | |||
| The format of the SFC NLRI is shown in Figure 2. | The format of the SFC NLRI is shown in Figure 2. | |||
| +---------------------------------------+ | +---------------------------------------+ | |||
| | Route Type (2 octets) | | | Route Type (2 octets) | | |||
| +---------------------------------------+ | +---------------------------------------+ | |||
| | Length (2 octets) | | | Length (2 octets) | | |||
| +---------------------------------------+ | +---------------------------------------+ | |||
| | Route Type specific (variable) | | | Route Type specific (variable) | | |||
| +---------------------------------------+ | +---------------------------------------+ | |||
| Figure 2: The Format of the SFC NLRI | Figure 2: The Format of the SFC NLRI | |||
| The Route Type field determines the encoding of the rest of the route | The "Route Type" field determines the encoding of the rest of the | |||
| type specific SFC NLRI. | Route Type specific SFC NLRI. | |||
| The Length field indicates the length in octets of the route type | The "Length" field indicates the length, in octets, of the "Route | |||
| specific field of the SFC NLRI. | Type specific" field of the SFC NLRI. | |||
| This document defines the following Route Types: | This document defines the following Route Types: | |||
| 1. Service Function Instance Route (SFIR) | 1. Service Function Instance Route (SFIR) | |||
| 2. Service Function Path Route (SFPR) | 2. Service Function Path Route (SFPR) | |||
| A Service Function Instance Route (SFIR) is used to identify an SFI. | An SFIR is used to identify an SFI. An SFPR defines a sequence of | |||
| A Service Function Path Route (SFPR) defines a sequence of Service | SFs (each of which has at least one instance advertised in an SFIR) | |||
| Functions (each of which has at least one instance advertised in an | that form an SFP. | |||
| SFIR) that form an SFP. | ||||
| The detailed encoding and procedures for these Route Types are | The detailed encoding and procedures for these Route Types are | |||
| described in subsequent sections. | described in subsequent sections. | |||
| The SFC NLRI is carried in BGP [RFC4271] using BGP Multiprotocol | The SFC NLRI is carried in BGP [RFC4271] using BGP Multiprotocol | |||
| Extensions [RFC4760] with an Address Family Identifier (AFI) of TBD1 | Extensions [RFC4760] with an Address Family Identifier (AFI) of 31 | |||
| and a Subsequent Address Family Identifier (SAFI) of TBD2. The NLRI | and a Subsequent Address Family Identifier (SAFI) of 9. The "NLRI" | |||
| field in the MP_REACH_NLRI/MP_UNREACH_NLRI attribute contains the SFC | field in the MP_REACH_NLRI/MP_UNREACH_NLRI attribute contains the SFC | |||
| NLRI, encoded as specified above. | NLRI, encoded as specified above. | |||
| In order for two BGP speakers to exchange SFC NLRIs, they MUST use | In order for two BGP speakers to exchange SFC NLRIs, they MUST use | |||
| BGP Capabilities Advertisements to ensure that they both are capable | BGP capabilities advertisements to ensure that they both are capable | |||
| of properly processing such NLRIs. This is done as specified in | of properly processing such NLRIs. This is done as specified in | |||
| [RFC4760], by using capability code 1 (Multiprotocol BGP) with an AFI | [RFC4760], by using capability code 1 (Multiprotocol BGP) with an AFI | |||
| of TBD1 and a SAFI of TBD2. | of 31 and a SAFI of 9. | |||
| The nexthop field of the MP_REACH_NLRI attribute of the SFC NLRI MUST | The "nexthop" field of the MP_REACH_NLRI attribute of the SFC NLRI | |||
| be set to a loopback address of the advertising SFF. | MUST be set to a loopback address of the advertising SFF. | |||
| 3.1. Service Function Instance Route (SFIR) | 3.1. Service Function Instance Route (SFIR) | |||
| Figure 3 shows the Route Type specific NLRI of the SFIR. | Figure 3 shows the Route Type specific NLRI of the SFIR. | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| | Route Distinguisher (RD) (8 octets) | | | Route Distinguisher (RD) (8 octets) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| | Service Function Type (2 octets) | | | Service Function Type (2 octets) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| Figure 3: SFIR Route Type specific NLRI | Figure 3: SFIR Route Type Specific NLRI | |||
| [RFC4364] defines a Route Distinguisher (RD) to consist of a two byte | [RFC4364] defines a Route Distinguisher (RD) as consisting of a two- | |||
| Type field and a six byte Value field and it defines RD types 0, 1, | byte "Type" field and a six-byte "Value" field, and it defines RD | |||
| and 2. In this specification, the RD (used for the SFIR) MUST be of | types 0, 1, and 2. In this specification, the RD (used for the SFIR) | |||
| type 0, 1, or 2. | MUST be of type 0, 1, or 2. | |||
| If two SFIRs are originated from different administrative domains | If two SFIRs are originated from different administrative domains | |||
| (within the same provier's operational domain), they MUST have | (within the same provider's operational domain), they MUST have | |||
| different RDs. In particular, SFIRs from different VPNs (for | different RDs. In particular, SFIRs from different VPNs (for | |||
| different service function overlay networks) MUST have different RDs, | different service function overlay networks) MUST have different RDs, | |||
| and those RDs MUST be different from any non-VPN SFIRs. | and those RDs MUST be different from any non-VPN SFIRs. | |||
| The Service Function Type identifies the functions/features a service | The SFT identifies the functions/features an SF can offer, e.g., | |||
| function can offer, e.g., Classifier, firewall, load balancer. There | classifier, firewall, load balancer. There may be several SFIs that | |||
| may be several SFIs that can perform a given Service Function. Each | can perform a given service function. Each node hosting an SFI MUST | |||
| node hosting an SFI MUST originate an SFIR for each type of SF that | originate an SFIR for each type of SF that it hosts (as indicated by | |||
| it hosts (as indicated by the SFT value), and it MAY advertise an | the SFT value), and it MAY advertise an SFIR for each instance of | |||
| SFIR for each instance of each type of SF. The minimal advertisement | each type of SF. A minimal advertisement allows construction of | |||
| allows construction of valid SFPs and leaves the selection of SFIs to | valid SFPs and leaves the selection of SFIs to the local SFF; a | |||
| the local SFF; the detailed advertisement may have scaling concerns, | detailed advertisement may have scaling concerns but allows a | |||
| but allows a Controller that constructs an SFP to make an explicit | controller that constructs an SFP to make an explicit choice of SFI. | |||
| choice of SFI. | ||||
| Note that a node may advertise all its SFIs of one SFT in one shot | Note that a node may advertise all its SFIs of one SFT in one shot | |||
| using normal BGP Update packing. That is, all of the SFIRs in an | using normal BGP UPDATE packing. That is, all of the SFIRs in an | |||
| Update share a common Tunnel Encapsulation and Route Target (RT) | Update share a common Tunnel Encapsulation and Route Target (RT) | |||
| attribute. See also Section 3.2.1. | attribute. See also Section 3.2.1. | |||
| The SFIR representing a given SFI will contain an NLRI with RD field | The SFIR representing a given SFI will contain an NLRI with "RD" | |||
| set to an RD as specified above, and with SFT field set to identify | field set to an RD as specified above, and with the "SFT" field set | |||
| that SFI's Service Function Type. The values for the SFT field are | to identify that SFI's SFT. The values for the "SFT" field are taken | |||
| taken from a registry administered by IANA (see Section 10). A BGP | from a registry administered by IANA (see Section 10). A BGP UPDATE | |||
| Update containing one or more SFIRs MUST also include a Tunnel | containing one or more SFIRs MUST also include a tunnel encapsulation | |||
| Encapsulation attribute [I-D.ietf-idr-tunnel-encaps]. If a data | attribute [RFC9012]. If a data packet needs to be sent to an SFI | |||
| packet needs to be sent to an SFI identified in one of the SFIRs, it | identified in one of the SFIRs, it will be encapsulated as specified | |||
| will be encapsulated as specified by the Tunnel Encapsulation | by the tunnel encapsulation attribute and then transmitted through | |||
| attribute, and then transmitted through the underlay network. | the underlay network. | |||
| Note that the Tunnel Encapsulation attribute MUST contain sufficient | Note that the tunnel encapsulation attribute MUST contain sufficient | |||
| information to allow the advertising SFF to identify the overlay or | information to allow the advertising SFF to identify the overlay or | |||
| VPN network which a received packet is transiting. This is because | VPN network that a received packet is transiting. This is because | |||
| the [SPI, SI] in a received packet is specific to a particular | the [SPI, SI] in a received packet is specific to a particular | |||
| overlay or VPN network. | overlay or VPN network. | |||
| 3.1.1. SFIR Pool Identifier Extended Community | 3.1.1. SFIR Pool Identifier Extended Community | |||
| This document defines a new transitive extended community [RFC4360] | This document defines a new transitive Extended Community [RFC4360] | |||
| of type TBD6 called the SFC extended community. When used with Sub- | of type 0x0b called the "SFC Extended Community". When used with | |||
| Type 1, this is called the SFIR Pool Identifier extended community. | Sub-Type 1, this is called the "SFIR Pool Identifier extended | |||
| It MAY be included in SFIR advertisements, and is used to indicate | community". It MAY be included in SFIR advertisements, and it is | |||
| the identity of a pool of SFIRs to which an SFIR belongs. Since an | used to indicate the identity of a pool of SFIRs to which an SFIR | |||
| SFIR may be a member of multiple pools, multiple of these extended | belongs. Since an SFIR may be a member of more than one pool, | |||
| communities may be present on a single SFIR advertisement. | multiple of these extended communities may be present on a single | |||
| SFIR advertisement. | ||||
| SFIR pools allow SFIRs to be grouped for any purpose. Possible uses | SFIR pools allow SFIRs to be grouped for any purpose. Possible uses | |||
| include control plane scalability and stability. A pool identifier | include control plane scalability and stability. A pool identifier | |||
| may be included in an SFPR to indicate a set of SFIs that are | may be included in an SFPR to indicate a set of SFIs that are | |||
| acceptable at a specific point on an SFP (see Section 3.2.1.3 and | acceptable at a specific point on an SFP (see Sections 3.2.1.3 and | |||
| Section 4.3). | 4.3). | |||
| The SFIR Pool Identifier extended community is encoded in 8 octets as | The SFIR Pool Identifier Extended Community is encoded in 8 octets as | |||
| shown in Figure 4. | shown in Figure 4. | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| | Type = TBD6 (1 octet) | | | Type = 0x0b (1 octet) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| | Sub-Type = 1 (1 octet) | | | Sub-Type = 1 (1 octet) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| | SFIR Pool Identifier Value (6 octets) | | | SFIR Pool Identifier value (6 octets) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| Figure 4: The SFIR Pool Identifier Extended Community | Figure 4: The SFIR Pool Identifier Extended Community | |||
| The SFIR Pool Identifier Value is encoded in a 6 octet field in | The SFIR Pool Identifier value is encoded in a 6-octet field in | |||
| network byte order, and the value is unique within the scope of an | network byte order, and the value is unique within the scope of an | |||
| overlay network. This means that pool identifiers need to be | overlay network. This means that pool identifiers need to be | |||
| centrally managed, which is consistent with the assignment of SFIs to | centrally managed, which is consistent with the assignment of SFIs to | |||
| pools. | pools. | |||
| 3.1.2. MPLS Mixed Swapping/Stacking Extended Community | 3.1.2. MPLS Mixed Swapping/Stacking Extended Community | |||
| As noted in Section 3.1.1, this document defines a new transitive | As noted in Section 3.1.1, this document defines a new transitive | |||
| extended community of type TBD6 called the SFC extended community. | Extended Community of type 0x0b called the "SFC Extended Community". | |||
| When used with Sub-Type 2, this is called the MPLS Mixed Swapping/ | When used with Sub-Type 2, this is called the "MPLS Mixed Swapping/ | |||
| Stacking Labels extended community. The community is encoded as | Stacking Labels Extended Community". The community is encoded as | |||
| shown in Figure 5. It contains a pair of MPLS labels: an SFC Context | shown in Figure 5. It contains a pair of MPLS labels: an SFC Context | |||
| Label and an SF Label as described in [RFC8595]. Each label is 20 | Label and an SF Label, as described in [RFC8595]. Each label is 20 | |||
| bits encoded in a 3-octet (24 bit) field with 4 trailing bits that | bits encoded in a 3-octet (24-bit) field with 4 trailing bits that | |||
| MUST be set to zero. | MUST be set to zero. | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| | Type = TBD6 (1 octet) | | | Type = 0x0b (1 octet) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Sub-Type = 2 (1 octet) | | | Sub-Type = 2 (1 octet) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | SFC Context Label (3 octets) | | | SFC Context Label (3 octets) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | SF Label (3 octets) | | | SF Label (3 octets) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| Figure 5: The MPLS Mixed Swapping/Stacking Extended Community | Figure 5: The MPLS Mixed Swapping/Stacking Labels Extended Community | |||
| Note that it is assumed that each SFF has one or more globally unique | Note that it is assumed that each SFF has one or more globally unique | |||
| SFC Context Labels and that the context label space and the SPI | SFC Context Labels and that the context-label space and the SPI- | |||
| address space are disjoint (i.e., a label value cannot be used both | address space are disjoint. In other words, a label value cannot be | |||
| to indicate an SFC context and an SPI, and it can be determined from | used to indicate both an SFC context and an SPI, and it can be | |||
| knowledge of the label spaces whether a label indicates an SFC | determined from knowledge of the label spaces whether a label | |||
| context or an SPI). | indicates an SFC context or an SPI. | |||
| If an SFF supports SFP Traversal with an MPLS Label Stack it MUST | If an SFF supports SFP Traversal with an MPLS Label Stack, it MUST | |||
| include this extended community with the SFIRs that it advertises. | include this Extended Community with the SFIRs that it advertises. | |||
| See Section 7.6 for a description of how this extended community is | See Section 7.6 for a description of how this Extended Community is | |||
| used. | used. | |||
| 3.2. Service Function Path Route (SFPR) | 3.2. Service Function Path Route (SFPR) | |||
| Figure 6 shows the Route Type specific NLRI of the SFPR. | Figure 6 shows the Route Type specific NLRI of the SFPR. | |||
| +-----------------------------------------------+ | +-----------------------------------------------+ | |||
| | Route Distinguisher (RD) (8 octets) | | | Route Distinguisher (RD) (8 octets) | | |||
| +-----------------------------------------------+ | +-----------------------------------------------+ | |||
| | Service Path Identifier (SPI) (3 octets) | | | Service Path Identifier (SPI) (3 octets) | | |||
| +-----------------------------------------------+ | +-----------------------------------------------+ | |||
| Figure 6: SFPR Route Type Specific NLRI | Figure 6: SFPR Route Type Specific NLRI | |||
| [RFC4364] defines a Route Distinguisher (RD) to consist of a two byte | [RFC4364] defines a Route Distinguisher (RD) as consisting of a two- | |||
| Type field and a six byte Value field and it defines RD types 0, 1, | byte "Type" field and a six-byte "Value" field, and it defines RD | |||
| and 2. In this specification, the RD (used for the SFPR) MUST be of | types 0, 1, and 2. In this specification, the RD (used for the SFPR) | |||
| type 0, 1, or 2. | MUST be of type 0, 1, or 2. | |||
| All SFPs MUST be associated with an RD. The association of an SFP | All SFPs MUST be associated with an RD. The association of an SFP | |||
| with an RD is determined by provisioning. If two SFPRs are | with an RD is determined by provisioning. If two SFPRs are | |||
| originated from different Controllers they MUST have different RDs. | originated from different controllers, they MUST have different RDs. | |||
| Additionally, SFPRs from different VPNs (i.e., in different service | Additionally, SFPRs from different VPNs (i.e., in different service | |||
| function overlay networks) MUST have different RDs, and those RDs | function overlay networks) MUST have different RDs, and those RDs | |||
| MUST be different from any non-VPN SFPRs. | MUST be different from any non-VPN SFPRs. | |||
| The Service Path Identifier is defined in [RFC8300] and is the value | The Service path identifier is defined in [RFC8300] and is the value | |||
| to be placed in the Service Path Identifier field of the NSH header | to be placed in the "Service Path Identifier" field of the NSH of any | |||
| of any packet sent on this Service Function Path. It is expected | packet sent on this SFP. It is expected that one or more controllers | |||
| that one or more Controllers will originate these routes in order to | will originate these routes in order to configure a service function | |||
| configure a service function overlay network. | overlay network. | |||
| The SFP is described in a new BGP Path attribute, the SFP attribute. | The SFP is described in a new BGP Path attribute, the SFP attribute. | |||
| Section 3.2.1 shows the format of that attribute. | Section 3.2.1 shows the format of that attribute. | |||
| 3.2.1. The SFP Attribute | 3.2.1. The SFP Attribute | |||
| [RFC4271] defines BGP Path attributes. This document introduces a | [RFC4271] defines BGP Path attributes. This document introduces a | |||
| new Optional Transitive Path attribute called the SFP attribute with | new Optional Transitive Path attribute called the "SFP attribute", | |||
| value TBD3 to be assigned by IANA. The first SFP attribute MUST be | with value 37. The first SFP attribute MUST be processed, and | |||
| processed and subsequent instances MUST be ignored. | subsequent instances MUST be ignored. | |||
| The common fields of the SFP attribute are set as follows: | The common fields of the SFP attribute are set as follows: | |||
| o Optional bit is set to 1 to indicate that this is an optional | * The Optional bit is set to 1 to indicate that this is an optional | |||
| attribute. | attribute. | |||
| o The Transitive bit is set to 1 to indicate that this is a | * The Transitive bit is set to 1 to indicate that this is a | |||
| transitive attribute. | transitive attribute. | |||
| o The Extended Length bit is set if the length of the SFP attribute | * The Extended Length bit is set if the length of the SFP attribute | |||
| is encoded in one octet (set to 0) or two octets (set to 1) as | is encoded in one octet (set to 0) or two octets (set to 1), as | |||
| described in [RFC4271]. | described in [RFC4271]. | |||
| o The Attribute Type Code is set to TBD3. | * The Attribute Type Code is set to 37. | |||
| The content of the SFP attribute is a series of Type-Length-Value | The content of the SFP attribute is a series of Type-Length-Value | |||
| (TLV) constructs. Some TLVs may include sub-TLVs. All TLVs and sub- | (TLV) constructs. Some TLVs may include Sub-TLVs. All TLVs and Sub- | |||
| TLVs have a common format that is: | TLVs have a common format: | |||
| o Type: A single octet indicating the type of the SFP attribute TLV. | Type: A single octet indicating the type of the SFP attribute TLV. | |||
| Values are taken from the registry described in Section 10.3. | Values are taken from the registry described in Section 10.3. | |||
| o Length: A two octet field indicating the length of the data | Length: A two-octet field indicating the length of the data | |||
| following the Length field counted in octets. | following the "Length" field, counted in octets. | |||
| o Value: The contents of the TLV. | Value: The contents of the TLV. | |||
| The formats of the TLVs defined in this document are shown in the | The formats of the TLVs defined in this document are shown in the | |||
| following sections. The presence rules and meanings are as follows. | following sections. The presence rules and meanings are as follows. | |||
| o The SFP attribute contains a sequence of zero or more Association | * The SFP attribute contains a sequence of zero or more Association | |||
| TLVs. That is, the Association TLV is OPTIONAL. Each Association | TLVs. That is, the Association TLV is OPTIONAL. Each Association | |||
| TLV provides an association between this SFPR and another SFPR. | TLV provides an association between this SFPR and another SFPR. | |||
| Each associated SFPR is indicated using the RD with which it is | Each associated SFPR is indicated using the RD with which it is | |||
| advertised (we say the SFPR-RD to avoid ambiguity). | advertised (we say the SFPR-RD to avoid ambiguity). | |||
| o The SFP attribute contains a sequence of one or more Hop TLVs. | * The SFP attribute contains a sequence of one or more Hop TLVs. | |||
| Each Hop TLV contains all of the information about a single hop in | Each Hop TLV contains all of the information about a single hop in | |||
| the SFP. | the SFP. | |||
| o Each Hop TLV contains an SI value and a sequence of one or more | * Each Hop TLV contains an SI value and a sequence of one or more | |||
| SFT TLVs. Each SFT TLV contains an SFI reference for each | SFT TLVs. Each SFT TLV contains an SFI reference for each | |||
| instance of an SF that is allowed at this hop of the SFP for the | instance of an SF that is allowed at this hop of the SFP for the | |||
| specific SFT. Each SFI is indicated using the RD with which it is | specific SFT. Each SFI is indicated using the RD with which it is | |||
| advertised (we say the SFIR-RD to avoid ambiguity). | advertised (we say the SFIR-RD to avoid ambiguity). | |||
| Section 6 of [RFC4271] describes the handling of malformed BGP | Section 6 of [RFC4271] describes the handling of malformed BGP | |||
| attributes, or those that are in error in some way. [RFC7606] | attributes, or those that are in error in some way. [RFC7606] | |||
| revises BGP error handling specifically for the UPDATE message, | revises BGP error handling specifically for the UPDATE message, | |||
| provides guidelines for the authors of documents defining new | provides guidelines for the authors of documents defining new | |||
| attributes, and revises the error handling procedures for a number of | attributes, and revises the error-handling procedures for a number of | |||
| existing attributes. This document introduces the SFP attribute and | existing attributes. This document introduces the SFP attribute and | |||
| so defines error handling as follows: | so defines error handling as follows: | |||
| o When parsing a message, an unknown Attribute Type code or a length | * When parsing a message, an unknown Attribute Type Code or a length | |||
| that suggests that the attribute is longer than the remaining | that suggests that the attribute is longer than the remaining | |||
| message is treated as a malformed message and the "treat-as- | message is treated as a malformed message, and the "treat-as- | |||
| withdraw" approach used as per [RFC7606]. | withdraw" approach is used as per [RFC7606]. | |||
| o When parsing a message that contains an SFP attribute, the | * When parsing a message that contains an SFP attribute, the | |||
| following cases constitute errors: | following cases constitute errors: | |||
| 1. Optional bit is set to 0 in SFP attribute. | 1. Optional bit is set to 0 in the SFP attribute. | |||
| 2. Transitive bit is set to 0 in SFP attribute. | 2. Transitive bit is set to 0 in the SFP attribute. | |||
| 3. Unknown TLV type field found in SFP attribute. | 3. Unknown "TLV Type" field found in the SFP attribute. | |||
| 4. TLV length that suggests the TLV extends beyond the end of the | 4. TLV length that suggests the TLV extends beyond the end of the | |||
| SFP attribute. | SFP attribute. | |||
| 5. Association TLV contains an unknown SFPR-RD. | 5. Association TLV contains an unknown SFPR-RD. | |||
| 6. No Hop TLV found in the SFP attribute. | 6. No Hop TLV found in the SFP attribute. | |||
| 7. No sub-TLV found in a Hop TLV. | 7. No Sub-TLV found in a Hop TLV. | |||
| 8. Unknown SFIR-RD found in an SFT TLV. | 8. Unknown SFIR-RD found in an SFT TLV. | |||
| o The errors listed above are treated as follows: | * The errors listed above are treated as follows: | |||
| 1., 2., 4., 6., 7.: The attribute MUST be treated as malformed | 1, 2, 4, 6, 7: The attribute MUST be treated as malformed and the | |||
| and the "treat-as-withdraw" approach used as per [RFC7606]. | "treat-as-withdraw" approach used as per [RFC7606]. | |||
| 3.: Unknown TLVs MUST be ignored, and message processing MUST | 3: Unknown TLVs MUST be ignored, and message processing MUST | |||
| continue. | continue. | |||
| 5., 8.: The absence of an RD with which to correlate is nothing | 5, 8: The absence of an RD with which to correlate is nothing | |||
| more than a soft error. The receiver SHOULD store the | more than a soft error. The receiver SHOULD store the | |||
| information from the SFP attribute until a corresponding | information from the SFP attribute until a corresponding | |||
| advertisement is received. | advertisement is received. | |||
| 3.2.1.1. The Association TLV | 3.2.1.1. The Association TLV | |||
| The Association TLV is an optional TLV in the SFP attribute. It MAY | The Association TLV is an optional TLV in the SFP attribute. It MAY | |||
| be present multiple times. Each occurrence provides an association | be present multiple times. Each occurrence provides an association | |||
| with another SFP as advertised in another SFPR. The format of the | with another SFP as advertised in another SFPR. The format of the | |||
| Association TLV is shown in Figure 7 | Association TLV is shown in Figure 7. | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| | Type = 1 (1 octet) | | | Type = 1 (1 octet) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Length (2 octets) | | | Length (2 octets) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Association Type (1 octet) | | | Association Type (1 octet) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Associated SFPR-RD (8 octets) | | | Associated SFPR-RD (8 octets) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Associated SPI (3 octets) | | | Associated SPI (3 octets) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| Figure 7: The Format of the Association TLV | Figure 7: The Format of the Association TLV | |||
| The fields are as follows: | The fields are as follows: | |||
| Type is set to 1 to indicate an Association TLV. | * "Type" is set to 1 to indicate an Association TLV. | |||
| Length indicates the length in octets of the Association Type and | * "Length" indicates the length in octets of the "Association Type" | |||
| Associated SFPR-RD fields. The value of the Length field is 12. | and "Associated SFPR-RD" fields. The value of the "Length" field | |||
| is 12. | ||||
| The Association Type field indicate the type of association. The | * The "Association Type" field indicates the type of association. | |||
| values are tracked in an IANA registry (see Section 10.4). Only | The values are tracked in an IANA registry (see Section 10.4). | |||
| one value is defined in this document: type 1 indicates | Only one value is defined in this document: Type 1 indicates | |||
| association of two unidirectional SFPs to form a bidirectional | association of two unidirectional SFPs to form a bidirectional | |||
| SFP. An SFP attribute SHOULD NOT contain more than one | SFP. An SFP attribute SHOULD NOT contain more than one | |||
| Association TLV with Association Type 1: if more than one is | Association TLV with Association Type 1; if more than one is | |||
| present, the first one MUST be processed and subsequent instances | present, the first one MUST be processed, and subsequent instances | |||
| MUST be ignored. Note that documents that define new Association | MUST be ignored. Note that documents that define new association | |||
| Types must also define the presence rules for Association TLVs of | types must also define the presence rules for Association TLVs of | |||
| the new type. | the new type. | |||
| The Associated SFPR-RD contains the RD of the associated SFP as | * The Associated SFPR-RD contains the RD of the associated SFP as | |||
| advertised in an SFPR. | advertised in an SFPR. | |||
| The Associated SPI contains the SPI of the associated SFP as | * The Associated SPI contains the SPI of the associated SFP as | |||
| advertised in an SFPR. | advertised in an SFPR. | |||
| Association TLVs with unknown Association Type values SHOULD be | Association TLVs with unknown Association Type values SHOULD be | |||
| ignored. Association TLVs that contain an Associated SFPR-RD value | ignored. Association TLVs that contain an Associated SFPR-RD value | |||
| equal to the RD of the SFPR in which they are contained SHOULD be | equal to the RD of the SFPR in which they are contained SHOULD be | |||
| ignored. If the Associated SPI is not equal to the SPI advertised in | ignored. If the Associated SPI is not equal to the SPI advertised in | |||
| the SFPR indicated by the Associated SFPR-RD then the Association TLV | the SFPR indicated by the Associated SFPR-RD, then the Association | |||
| SHOULD be ignored. In all three of these cases an implementation MAY | TLV SHOULD be ignored. In all three of these cases, an | |||
| reject the SFP attribute as malformed and use the "treat-as-withdraw" | implementation MAY reject the SFP attribute as malformed and use the | |||
| approach per [RFC7606], however implementers are cautioned that such | "treat-as-withdraw" approach per [RFC7606]; however, implementors are | |||
| an approach may make an implementation less flexible in the event of | cautioned that such an approach may make an implementation less | |||
| future extensions to this protocol. | flexible in the event of future extensions to this protocol. | |||
| Note that when two SFPRs reference each other using the Association | Note that when two SFPRs reference each other using the Association | |||
| TLV, one SFPR advertisement will be received before the other. | TLV, one SFPR advertisement will be received before the other. | |||
| Therefore, processing of an association MUST NOT be rejected simply | Therefore, processing of an association MUST NOT be rejected simply | |||
| because the Associated SFPR-RD is unknown. | because the Associated SFPR-RD is unknown. | |||
| Further discussion of correlation of SFPRs is provided in | Further discussion of correlation of SFPRs is provided in | |||
| Section 7.1. | Section 7.1. | |||
| 3.2.1.2. The Hop TLV | 3.2.1.2. The Hop TLV | |||
| skipping to change at page 21, line 19 ¶ | skipping to change at line 927 ¶ | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Service Index (1 octet) | | | Service Index (1 octet) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Hop Details (variable) | | | Hop Details (variable) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| Figure 8: The Format of the Hop TLV | Figure 8: The Format of the Hop TLV | |||
| The fields are as follows: | The fields are as follows: | |||
| Type is set to 2 to indicate a Hop TLV. | * "Type" is set to 2 to indicate a Hop TLV. | |||
| Length indicates the length in octets of the Service Index and Hop | * "Length" indicates the length, in octets, of the "Service Index" | |||
| Details fields. | and "Hop Details" fields. | |||
| The Service Index is defined in [RFC8300] and is the value found | * The Service Index is defined in [RFC8300] and is the value found | |||
| in the Service Index field of the NSH header that an SFF will use | in the "Service Index" field of the NSH that an SFF will use to | |||
| to lookup to which next SFI a packet is to be sent. | look up to which next SFI a packet is to be sent. | |||
| The Hop Details field consists of a sequence of one or more sub- | * The "Hop Details" field consists of a sequence of one or more Sub- | |||
| TLVs. | TLVs. | |||
| Each hop of the SFP may demand that a specific type of SF is | Each hop of the SFP may demand that a specific type of SF is | |||
| executed, and that type is indicated in sub-TLVs of the Hop TLV. At | executed, and that type is indicated in Sub-TLVs of the Hop TLV. At | |||
| least one sub-TLV MUST be present. This document defines the SFT | least one Sub-TLV MUST be present. This document defines the SFT | |||
| Sub-TLV (see Section 3.2.1.3 and the MPLS Swapping/Stacking Sub-TLV | Sub-TLV (see Section 3.2.1.3) and the MPLS Swapping/Stacking Sub-TLV | |||
| (see Section Section 3.2.1.4: other sub-TLVs may be defined in | (see Section 3.2.1.4); other Sub-TLVs may be defined in future. The | |||
| future. This provides a list of which types of SF are acceptable at | SFT Sub-TLV provides a list of which types of SF are acceptable at a | |||
| a specific hop, and for each type it allows a degree of control to be | specific hop, and for each type it allows a degree of control to be | |||
| imposed on the choice of SFIs of that particular type. | imposed on the choice of SFIs of that particular type. The MPLS | |||
| Swapping/Stacking Sub-TLV indicates the type of SFC encoding to use | ||||
| in an MPLS label stack. | ||||
| If no Hop TLV is present in an SFP Attribute, it is a malformed | If no Hop TLV is present in an SFP attribute, it is a malformed | |||
| attribute | attribute. | |||
| 3.2.1.3. The SFT Sub-TLV | 3.2.1.3. The SFT Sub-TLV | |||
| The SFT Sub-TLV MAY be included in the list of sub-TLVs of the Hop | The SFT Sub-TLV MAY be included in the list of Sub-TLVs of the Hop | |||
| TLV. The format of the SFT Sub-TLV is shown in Figure 9. The Sub- | TLV. The format of the SFT Sub-TLV is shown in Figure 9. The Hop | |||
| TLV contains a list of SFIR-RD values each taken from the | Sub-TLV contains a list of SFIR-RD values each taken from the | |||
| advertisement of an SFI. Together they form a list of acceptable | advertisement of an SFI. Together they form a list of acceptable | |||
| SFIs of the indicated type. | SFIs of the indicated type. | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| | Type = 3 (1 octet) | | | Type = 3 (1 octet) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Length (2 octets) | | | Length (2 octets) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | Service Function Type (2 octets) | | | Service Function Type (2 octets) | | |||
| +--------------------------------------------| | +--------------------------------------------| | |||
| | SFIR-RD List (variable) | | | SFIR-RD List (variable) | | |||
| +--------------------------------------------+ | +--------------------------------------------+ | |||
| Figure 9: The Format of the SFT Sub-TLV | Figure 9: The Format of the SFT Sub-TLV | |||
| The fields are as follows: | The fields are as follows: | |||
| Type is set to 3 to indicate an SFT Sub-TLV. | * "Type" is set to 3 to indicate an SFT Sub-TLV. | |||
| Length indicates the length in octets of the Service Function Type | * "Length" indicates the length, in octets, of the "Service Function | |||
| and SFIR-RD List fields. | Type" and "SFIR-RD List" fields. | |||
| The Service Function Type value indicates the category (type) of | * The SFT value indicates the category (type) of SF that is to be | |||
| SF that is to be executed at this hop. The types are as | executed at this hop. The types are as advertised for the SFs | |||
| advertised for the SFs supported by the SFFs. SFT values in the | supported by the SFFs. SFT values in the range 1-31 are special- | |||
| range 1-31 are Special Purpose SFT values and have meanings | purpose SFT values and have meanings defined by the documents that | |||
| defined by the documents that describe them - the value 'Change | describe them -- the value "Change Sequence" is defined in | |||
| Sequence' is defined in Section 6.1 of this document. | Section 6.1 of this document. | |||
| The hop description is further qualified beyond the specification | * The hop description is further qualified beyond the specification | |||
| of the SFTs by listing, for each SFT in each hop, the SFIs that | of the SFTs by listing, for each SFT in each hop, the SFIs that | |||
| may be used at the hop. The SFIs are identified using the SFIR- | may be used at the hop. The SFIs are identified using the SFIR- | |||
| RDs from the advertisements of the SFIs in the SFIRs. Note that | RDs from the advertisements of the SFIs in the SFIRs. Note that | |||
| if the list contains one or more SFIR Pool Identifiers, then for | if the list contains one or more SFIR Pool Identifiers, then for | |||
| each the SFIR-RD list is effectively expanded to include the SFIR- | each, the SFIR-RD list is effectively expanded to include the | |||
| RD of each SFIR advertised with that SFIR Pool Identifier. An | SFIR-RD of each SFIR advertised with that SFIR Pool Identifier. | |||
| SFIR-RD of value zero has special meaning as described in | An SFIR-RD of value zero has special meaning, as described in | |||
| Section 5. Each entry in the list is eight octets long, and the | Section 5. Each entry in the list is eight octets long, and the | |||
| number of entries in the list can be deduced from the value of the | number of entries in the list can be deduced from the value of the | |||
| Length field. | "Length" field. | |||
| Note that an SFIR-RD is of type 0, 1, or 2 (as described in | * Note that an SFIR-RD is of type 0, 1, or 2 (as described in | |||
| Section 3.1. Thus the high order octet of an RD found in an SFIR- | Section 3.1). Thus, the high-order octet of an RD found in an | |||
| RD List always has a value of 0x00. However, the high order octet | SFIR-RD List always has a value of 0x00. However, the high-order | |||
| of an SFIR Pool Identifier (an extended community with Type field | octet of an SFIR Pool Identifier (an Extended Community with | |||
| TBD6), will always have a non-zero value. This allows the node | "Type" field 0x0b) will always have a nonzero value. This allows | |||
| processing the SFIR-RD List to distinguish between the two types | the node processing the SFIR-RD list to distinguish between the | |||
| of list entry. | two types of list entry. | |||
| 3.2.1.4. MPLS Swapping/Stacking Sub-TLV | 3.2.1.4. MPLS Swapping/Stacking Sub-TLV | |||
| The MPLS Swapping/Stacking Sub-TLV (Type value 4) is a zero length | The MPLS Swapping/Stacking Sub-TLV (Type value 4) is a zero-length | |||
| sub-TLV that is OPTIONAL in the Hop TLV and is used when the data | Sub-TLV that is OPTIONAL in the Hop TLV and is used when the data | |||
| representation is MPLS (see Section 7.5). When present it indicates | representation is MPLS (see Section 7.5). When present, it indicates | |||
| to the Classifier imposing an MPLS label stack that the current hop | to the classifier imposing an MPLS label stack that the current hop | |||
| is to use an {SFC Context Label, SF label} rather than an {SPI, SF} | is to use an {SFC Context Label, SF label} rather than an {SPI, SF} | |||
| label pair. See Section 7.6 for more details. | label pair. See Section 7.6 for more details. | |||
| 3.2.1.5. SFP Traversal With MPLS Label Stack TLV | 3.2.1.5. SFP Traversal With MPLS Label Stack TLV | |||
| The SFP Traversal With MPLS Label Stack TLV (Type value 5) is a zero | The SFP Traversal With MPLS Label Stack TLV (Type value 5) is a zero- | |||
| length TLV that can be carried in the SFP Attribute and indicates to | length TLV that can be carried in the SFP attribute and indicates to | |||
| the Classifier and the SFFs on the SFP that an MPLS label stack with | the classifier and the SFFs on the SFP that an MPLS label stack with | |||
| label swapping/stacking is to be used for packets traversing the SFP. | label swapping/stacking is to be used for packets traversing the SFP. | |||
| All of the SFFs specified at each of the SFP's hops MUST have | All of the SFFs specified at each of the SFP's hops MUST have | |||
| advertised an MPLS Mixed Swapping/Stacking Extended Community (see | advertised an MPLS Mixed Swapping/Stacking Extended Community (see | |||
| Section 3.1.2) for the SFP to be considered usable. | Section 3.1.2) for the SFP to be considered usable. | |||
| 3.2.2. General Rules For The SFP Attribute | 3.2.2. General Rules for the SFP Attribute | |||
| It is possible for the same SFI, as described by an SFIR, to be used | It is possible for the same SFI, as described by an SFIR, to be used | |||
| in multiple SFPRs. | in multiple SFPRs. | |||
| When two SFPRs have the same SPI but different SFPR-RDs there can be | When two SFPRs have the same SPI but different SFPR-RDs, there can be | |||
| three cases: | three cases: | |||
| o Two or more Controllers are originating SFPRs for the same SFP. | 1. Two or more controllers are originating SFPRs for the same SFP. | |||
| In this case the content of the SFPRs is identical and the | In this case, the content of the SFPRs is identical, and the | |||
| duplication is to ensure receipt and to provide Controller | duplication is to ensure receipt and provide controller | |||
| redundancy. | redundancy. | |||
| o There is a transition in content of the advertised SFP and the | 2. There is a transition in content of the advertised SFP, and the | |||
| advertisements may originate from one or more Controllers. In | advertisements may originate from one or more controllers. In | |||
| this case the content of the SFPRs will be different. | this case, the content of the SFPRs will be different. | |||
| o The reuse of an SPI may result from a configuration error. | 3. The reuse of an SPI may result from a configuration error. | |||
| In all cases, there is no way for the receiving SFF to know which | There is no way in any of these cases for the receiving SFF to know | |||
| SFPR to process, and the SFPRs could be received in any order. At | which SFPR to process, and the SFPRs could be received in any order. | |||
| any point in time, when multiple SFPRs have the same SPI but | At any point in time, when multiple SFPRs have the same SPI but | |||
| different SFPR-RDs, the SFF MUST use the SFPR with the numerically | different SFPR-RDs, the SFF MUST use the SFPR with the numerically | |||
| lowest SFPR-RD when interpreting the RDs as 8-octet integers in | lowest SFPR-RD when interpreting the RDs as 8-octet integers in | |||
| network byte order. The SFF SHOULD log this occurrence to assist | network byte order. The SFF SHOULD log this occurrence to assist | |||
| with debugging. | with debugging. | |||
| Furthermore, a Controller that wants to change the content of an SFP | Furthermore, a controller that wants to change the content of an SFP | |||
| is RECOMMENDED to use a new SPI and so create a new SFP onto which | is RECOMMENDED to use a new SPI and so create a new SFP onto which | |||
| the Classifiers can transition packet flows before the SFPR for the | the classifiers can transition packet flows before the SFPR for the | |||
| old SFP is withdrawn. This avoids any race conditions with SFPR | old SFP is withdrawn. This avoids any race conditions with SFPR | |||
| advertisements. | advertisements. | |||
| Additionally, a Controller SHOULD NOT re-use an SPI after it has | Additionally, a controller SHOULD NOT reuse an SPI after it has | |||
| withdrawn the SFPR that used it until at least a configurable amount | withdrawn the SFPR that used it until at least a configurable amount | |||
| of time has passed. This timer SHOULD have a default of one hour. | of time has passed. This timer SHOULD have a default of one hour. | |||
| 4. Mode of Operation | 4. Mode of Operation | |||
| This document describes the use of BGP as a control plane to create | This document describes the use of BGP as a control plane to create | |||
| and manage a service function overlay network. | and manage a service function overlay network. | |||
| 4.1. Route Targets | 4.1. Route Targets | |||
| The main feature introduced by this document is the ability to create | The main feature introduced by this document is the ability to create | |||
| multiple service function overlay networks through the use of Route | multiple service function overlay networks through the use of Route | |||
| Targets (RTs) [RFC4364]. | Targets (RTs) [RFC4364]. | |||
| Every BGP UPDATE containing an SFIR or SFPR carries one or more RTs. | Every BGP UPDATE containing an SFIR or SFPR carries one or more RTs. | |||
| The RT carried by a particular SFIR or SFPR is determined by the | The RT carried by a particular SFIR or SFPR is determined by the | |||
| provisioning of the route's originator. | provisioning of the route's originator. | |||
| Every node in a service function overlay network is configured with | Every node in a service function overlay network is configured with | |||
| one or more import RTs. Thus, each SFF will import only the SFPRs | one or more import RTs. Thus, each SFF will import only the SFPRs | |||
| with matching RTs allowing the construction of multiple service | with matching RTs, allowing the construction of multiple service | |||
| function overlay networks or the instantiation of Service Function | function overlay networks or the instantiation of SFCs within a Layer | |||
| Chains within an Layer 3 Virtual Private Network (L3VPN) or Ethernet | 3 Virtual Private Network (L3VPN) or Ethernet VPN (EVPN) instance | |||
| VPN (EVPN) instance (see Section 7.3). An SFF that has a presence in | (see Section 7.3). An SFF that has a presence in multiple service | |||
| multiple service function overlay networks (i.e., imports more than | function overlay networks (i.e., one that imports more than one RT) | |||
| one RT) will usually maintain separate forwarding state for each | will usually maintain separate forwarding state for each overlay | |||
| overlay network. | network. | |||
| 4.2. Service Function Instance Routes | 4.2. Service Function Instance Routes | |||
| The SFIR (see Section 3.1) is used to advertise the existence and | The SFIR (see Section 3.1) is used to advertise the existence and | |||
| location of a specific Service Function Instance and consists of: | location of a specific SFI; it consists of: | |||
| o The RT as just described. | * The RT as just described. | |||
| o A Service Function Type (SFT) that is the type of service function | * A Service Function Type (SFT) that is the type of service function | |||
| that is provided (such as "firewall"). | that is provided (such as "firewall"). | |||
| o A Route Distinguisher (RD) that is unique to a specific overlay. | * A Route Distinguisher (RD) that is unique to a specific overlay. | |||
| 4.3. Service Function Path Routes | 4.3. Service Function Path Routes | |||
| The SFPR (see Section 3.2) describes a specific path of a Service | The SFPR (see Section 3.2) describes a specific path of an SFC. The | |||
| Function Chain. The SFPR contains the Service Path Identifier (SPI) | SFPR contains the Service Path Identifier (SPI) used to identify the | |||
| used to identify the SFP in the NSH in the data plane. It also | SFP in the NSH in the data plane. It also contains a sequence of | |||
| contains a sequence of Service Indexes (SIs). Each SI identifies a | Service Indexes (SIs). Each SI identifies a hop in the SFP, and each | |||
| hop in the SFP, and each hop is a choice between one of more SFIs. | hop is a choice between one or more SFIs. | |||
| As described in this document, each Service Function Path Route is | As described in this document, each SFP route is identified in the | |||
| identified in the service function overlay network by an RD and an | service function overlay network by an RD and an SPI. The SPI is | |||
| SPI. The SPI is unique within a single VPN instance supported by the | unique within a single VPN instance supported by the underlay | |||
| underlay network. | network. | |||
| The SFPR advertisement comprises: | The SFPR advertisement comprises: | |||
| o An RT as described in Section 4.1. | * An RT as described in Section 4.1. | |||
| o A tuple that identifies the SFPR | * A tuple that identifies the SFPR. | |||
| * An RD that identifies an advertisement of an SFPR. | - An RD that identifies an advertisement of an SFPR. | |||
| * The SPI that uniquely identifies this path within the VPN | - The SPI that uniquely identifies this path within the VPN | |||
| instance distinguished by the RD. This SPI also appears in the | instance distinguished by the RD. This SPI also appears in the | |||
| NSH. | NSH. | |||
| o A series of Service Indexes. Each SI is used in the context of a | * A series of SIs. Each SI is used in the context of a particular | |||
| particular SPI and identifies one or more SFs (distinguished by | SPI and identifies one or more SFs (distinguished by their SFTs). | |||
| their SFTs) and for each SF a set of SFIs that instantiate the SF. | For each SF, it identifies a set of SFIs that instantiate the SF. | |||
| The values of the SI indicate the order in which the SFs are to be | The values of the SI indicate the order in which the SFs are to be | |||
| executed in the SFP that is represented by the SPI. | executed in the SFP that is represented by the SPI. | |||
| o The SI is used in the NSH to identify the entries in the SFP. | * The SI is used in the NSH to identify the entries in the SFP. | |||
| Note that the SI values have meaning only relative to a specific | Note that the SI values have meaning only relative to a specific | |||
| path. They have no semantic other than to indicate the order of | path. They have no semantic other than to indicate the order of | |||
| Service Functions within the path and are assumed to be | SFs within the path and are assumed to be monotonically decreasing | |||
| monotonically decreasing from the start to the end of the path | from the start to the end of the path [RFC8300]. | |||
| [RFC8300]. | ||||
| o Each Service Index is associated with a set of one or more Service | * Each SI is associated with a set of one or more SFIs that can be | |||
| Function Instances that can be used to provide the indexed Service | used to provide the indexed SF within the path. Each member of | |||
| Function within the path. Each member of the set comprises: | the set comprises: | |||
| * The RD used in an SFIR advertisement of the SFI. | - The RD used in an SFIR advertisement of the SFI. | |||
| * The SFT that indicates the type of function as used in the same | - The SFT that indicates the type of function as used in the same | |||
| SFIR advertisement of the SFI. | SFIR advertisement of the SFI. | |||
| This may be summarized as follows where the notations "SFPR-RD" and | This may be summarized as follows, where the notations "SFPR-RD" and | |||
| "SFIR-RD" are used to distinguish the two different RDs, and where | "SFIR-RD" are used to distinguish the two different RDs, and where | |||
| "*" indicates a multiplier: | "*" indicates a multiplier: | |||
| RT, {SFPR-RD, SPI}, m * {SI, {n * {SFT, p * SFIR-RD} } } | RT, {SFPR-RD, SPI}, m * {SI, {n * {SFT, p * SFIR-RD} } } | |||
| Where: | Where: | |||
| RT: Route Target | RT: Route Target | |||
| SFPR-RD: The Route Descriptor of the Service Function Path Route | SFPR-RD: The Route Descriptor of the SFPR advertisement | |||
| advertisement | ||||
| SPI: Service Path Identifier used in the NSH | SPI: Service Path Identifier used in the NSH | |||
| m: The number of hops in the Service Function Path | m: The number of hops in the SFP | |||
| n: The number of choices of Service Function Type for a specific | n: The number of choices of SFT for a specific hop | |||
| hop | ||||
| p: The number of choices of Service Function Instance for given | p: The number of choices of SFI for a given SFT in a specific hop | |||
| Service Function Type in a specific hop | ||||
| SI: Service Index used in the NSH to indicate a specific hop | SI: Service Index used in the NSH to indicate a specific hop | |||
| SFT: The Service Function Type used in the same advertisement of | SFT: The Service Function Type used in the same advertisement of the | |||
| the Service Function Instance Route | SFIR | |||
| SFIR-RD: The Route Descriptor used in an advertisement of the | SFIR-RD: The Route Descriptor used in an advertisement of the SFIR | |||
| Service Function Instance Route | ||||
| That is, there can be multiple SFTs at a given hop as described in | That is, there can be multiple SFTs at a given hop, as described in | |||
| Section 5. | Section 5. | |||
| Note that the values of SI are from the set {255, ..., 1} and are | Note that the values of SI are from the set {255, ..., 1} and are | |||
| monotonically decreasing within the SFP. SIs MUST appear in order | monotonically decreasing within the SFP. SIs MUST appear in order | |||
| within the SFPR (i.e., monotonically decreasing) and MUST NOT appear | within the SFPR (i.e., monotonically decreasing) and MUST NOT appear | |||
| more than once. Gaps MAY appear in the sequence as described in | more than once. Gaps MAY appear in the sequence, as described in | |||
| Section 4.5.1. Malformed SFPRs MUST be discarded and MUST cause any | Section 4.5.1. Malformed SFPRs MUST be discarded and MUST cause any | |||
| previous instance of the SFPR (same SFPR-RD and SPI) to be discarded. | previous instance of the SFPR (same SFPR-RD and SPI) to be discarded. | |||
| Note that if the SFIR-RD list in an SFT TLV contains one or more SFIR | Note that if the SFIR-RD list in an SFT TLV contains one or more SFIR | |||
| Pool identifiers, then in the above expression, 'p' is the sum of the | Pool Identifiers, then in the above expression, "p" is the sum of the | |||
| number of individual SFIR-RD values and the sum for each SFIR Pool | number of individual SFIR-RD values and the sum for each SFIR Pool | |||
| Identifier of the number of SFIRs advertised with that SFIR Pool | Identifier of the number of SFIRs advertised with that SFIR Pool | |||
| Identifier. I.e., the list of SFIR-RD values is effectively expanded | Identifier. In other words, the list of SFIR-RD values is | |||
| to include the SFIR-RD of each SFIR advertised with each SFIR Pool | effectively expanded to include the SFIR-RD of each SFIR advertised | |||
| Identifier in the SFIR-RD list. | with each SFIR Pool Identifier in the SFIR-RD list. | |||
| The choice of SFI is explained further in Section 5. Note that an | The choice of SFI is explained further in Section 5. Note that an | |||
| SFIR-RD value of zero has special meaning as described in that | SFIR-RD value of zero has special meaning, as described in that | |||
| Section. | section. | |||
| 4.4. Classifier Operation | 4.4. Classifier Operation | |||
| As shown in Figure 1, the Classifier is a component that is used to | As shown in Figure 1, the classifier is a component that is used to | |||
| assign packets to an SFP. | assign packets to an SFP. | |||
| The Classifier is responsible for determining to which packet flow a | The classifier is responsible for determining to which packet flow a | |||
| packet belongs. The mechanism it uses to achieve that classification | packet belongs. The mechanism it uses to achieve that classification | |||
| is out of scope of this document, but might include inspection of the | is out of the scope of this document but might include inspection of | |||
| packet header. The Classifier has been instructed (by the Controller | the packet header. The classifier has been instructed (by the | |||
| or through some other configuration mechanism - see Section 7.4) | controller or through some other configuration mechanism -- see | |||
| which flows are to be assigned to which SFPs, and so it can impose an | Section 7.4) which flows are to be assigned to which SFPs, and so it | |||
| NSH on each packet and initialize the NSH with the SPI of the | can impose an NSH on each packet and initialize the NSH with the SPI | |||
| selected SFP and the SI of its first hop. | of the selected SFP and the SI of its first hop. | |||
| Note that instructions delivered to the Classifier may include | Note that instructions delivered to the classifier may include | |||
| information about the metadata to encode (and the format for that | information about the metadata to encode (and the format for that | |||
| encoding) on packets that are classified by the Classifier to a | encoding) on packets that are classified by the classifier to a | |||
| particular SFP. As mentioned in Section 2.2, this corresponds to the | particular SFP. As mentioned in Section 2.2, this corresponds to the | |||
| fifth element of control plane functionality described in [RFC7665]. | fifth element of control plane functionality described in [RFC7665]. | |||
| Such instructions fall outside the scope of this specification | Such instructions fall outside the scope of this specification (but | |||
| (although, see Section 7.4), as do instructions to other SFC elements | see Section 7.4), as do instructions to other service function | |||
| on how to interpret metadata (as described in the sixth element of | chaining elements on how to interpret metadata (as described in the | |||
| control plane functionality described in [RFC7665]. | sixth element of control plane functionality described in [RFC7665]). | |||
| 4.5. Service Function Forwarder Operation | 4.5. Service Function Forwarder Operation | |||
| Each packet sent to an SFF is transmitted encapsulated in an NSH. | Each packet sent to an SFF is transmitted encapsulated in an NSH. | |||
| The NSH includes an SPI and SI: the SPI indicates the SFPR | The NSH includes an SPI and SI: the SPI indicates the SFPR | |||
| advertisement that announced the Service Function Path; the tuple | advertisement that announced the SFP; the tuple SPI/SI indicates a | |||
| SPI/SI indicates a specific hop in a specific path and maps to the | specific hop in a specific path and maps to the RD/SFT of a | |||
| RD/SFT of a particular SFIR advertisement. | particular SFIR advertisement. | |||
| When an SFF gets an SFPR advertisement it will first determine | When an SFF gets an SFPR advertisement, it will first determine | |||
| whether to import the route by examining the RT. If the SFPR is | whether to import the route by examining the RT. If the SFPR is | |||
| imported the SFF then determines whether it is on the SFP by looking | imported, the SFF then determines whether it is on the SFP by looking | |||
| for its own SFIR-RDs or any SFIR-RD with value zero in the SFPR. For | for its own SFIR-RDs or any SFIR-RD with value zero in the SFPR. For | |||
| each occurrence in the SFP, the SFF creates forwarding state for | each occurrence in the SFP, the SFF creates forwarding state for | |||
| incoming packets and forwarding state for outgoing packets that have | incoming packets and forwarding state for outgoing packets that have | |||
| been processed by the specified SFI. | been processed by the specified SFI. | |||
| The SFF creates local forwarding state for packets that it receives | The SFF creates local forwarding state for packets that it receives | |||
| from other SFFs. This state makes the association between the SPI/SI | from other SFFs. This state makes the association between the SPI/SI | |||
| in the NSH of the received packet and one or more specific local SFIs | in the NSH of the received packet and one or more specific local | |||
| as identified by the SFIR-RD/SFT. If there are multiple local SFIs | SFIs, as identified by the SFIR-RD/SFT. If there are multiple local | |||
| that match this is because a single advertisement was made for a set | SFIs that match, this is because a single advertisement was made for | |||
| of equivalent SFIs and the SFF may use local policy (such as load | a set of equivalent SFIs, and the SFF may use local policy (such as | |||
| balancing) to determine to which SFI to forward a received packet. | load balancing) to determine to which SFI to forward a received | |||
| packet. | ||||
| The SFF also creates next hop forwarding state for packets received | The SFF also creates next-hop forwarding state for packets received | |||
| back from the local SFI that need to be forwarded to the next hop in | back from the local SFI that need to be forwarded to the next hop in | |||
| the SFP. There may be a choice of next hops as described in | the SFP. There may be a choice of next hops, as described in | |||
| Section 4.3. The SFF could install forwarding state for all | Section 4.3. The SFF could install forwarding state for all | |||
| potential next hops, or it could choose to only install forwarding | potential next hops or it could choose to only install forwarding | |||
| state to a subset of the potential next hops. If a choice is made | state for a subset of the potential next hops. If a choice is made, | |||
| then it will be as described in Section 5. | then it will be as described in Section 5. | |||
| The installed forwarding state may change over time reacting to | The installed forwarding state may change over time, reacting to | |||
| changes in the underlay network and the availability of particular | changes in the underlay network and the availability of particular | |||
| SFIs. Note that the forwarding state describes how one SFF send | SFIs. Note that the forwarding state describes how one SFF sends | |||
| packets to another SFF, but not how those packets are routed through | packets to another SFF, but not how those packets are routed through | |||
| the underlay network. SFFs may be connected by tunnels across the | the underlay network. SFFs may be connected by tunnels across the | |||
| underlay, or packets may be sent addressed to the next SFF and routed | underlay, or packets may be sent addressed to the next SFF and routed | |||
| through the underlay. In any case, transmission across the underlay | through the underlay. In any case, transmission across the underlay | |||
| requires encapsulation of packets with a header for transport in the | requires encapsulation of packets with a header for transport in the | |||
| underlay network. | underlay network. | |||
| Note that SFFs only create and store forwarding state for the SFPs on | Note that SFFs only create and store forwarding state for the SFPs on | |||
| which they are included. They do not retain state for all SFPs | which they are included. They do not retain state for all SFPs | |||
| advertised. | advertised. | |||
| An SFF may also install forwarding state to support looping, jumping, | An SFF may also install forwarding state to support looping, jumping, | |||
| and branching. The protocol mechanism for explicit control of | and branching. The protocol mechanism for explicit control of | |||
| looping, jumping, and branching uses a specific reserved SFT value at | looping, jumping, and branching uses a specific reserved SFT value at | |||
| a given hop of an SFPR and is described in Section 6.1. | a given hop of an SFPR and is described in Section 6.1. | |||
| 4.5.1. Processing With 'Gaps' in the SI Sequence | 4.5.1. Processing with "Gaps" in the SI Sequence | |||
| The behavior of an SF as described in [RFC8300] is to decrement the | The behavior of an SF, as described in [RFC8300], is to decrement the | |||
| value of the SI field in the NSH by one before returning a packet to | value of the "SI" field in the NSH by one before returning a packet | |||
| the local SFF for further processing. This means that there is a | to the local SFF for further processing. This means that there is a | |||
| good reason to assume that the SFP is composed of a series of SFs | good reason to assume that the SFP is composed of a series of SFs, | |||
| each indicated by an SI value one less than the previous. | each indicated by an SI value one less than the previous. | |||
| However, there is an advantage to having non-successive SIs in an | However, there is an advantage to having nonsuccessive SIs in an SPI. | |||
| SPI. Consider the case where an SPI needs to be modified by the | Consider the case where an SPI needs to be modified by the insertion | |||
| insertion or removal of an SF. In the latter case this would lead to | or removal of an SF. In the latter case, this would lead to a "gap" | |||
| a "gap" in the sequence of SIs, and in the former case, this could | in the sequence of SIs, and in the former case, this could only be | |||
| only be achieved if a gap already existed into which the new SF with | achieved if a gap already existed into which the new SF with its new | |||
| its new SI value could be inserted. Otherwise, all "downstream" SFs | SI value could be inserted. Otherwise, all "downstream" SFs would | |||
| would need to be renumbered. | need to be renumbered. | |||
| Now, of course, such renumbering could be performed, but would lead | Now, of course, such renumbering could be performed, but it would | |||
| to a significant disruption to the SFC as all the SFFs along the SFP | lead to a significant disruption to the SFC as all the SFFs along the | |||
| were "reprogrammed". Thus, to achieve dynamic modification of an SFP | SFP were "reprogrammed". Thus, to achieve dynamic modification of an | |||
| (and even, in-service modification) it is desirable to be able to | SFP (and even in-service modification), it is desirable to be able to | |||
| make these modifications without changing the SIs of the elements | make these modifications without changing the SIs of the elements | |||
| that were present before the modification. This will produce much | that were present before the modification. This will produce much | |||
| more consistent/predictable behavior during the convergence period | more consistent/predictable behavior during the convergence period, | |||
| where otherwise the change would need to be fully propagated. | where otherwise the change would need to be fully propagated. | |||
| Another approach says that any change to an SFP simply creates a new | Another approach says that any change to an SFP simply creates a new | |||
| SFP that can be assigned a new SPI. All that would be needed would | SFP that can be assigned a new SPI. All that would be needed would | |||
| be to give a new instruction to the Classifier and traffic would be | be to give a new instruction to the classifier, and traffic would be | |||
| switched to the new SFP that contains the new set of SFs. This | switched to the new SFP that contains the new set of SFs. This | |||
| approach is practical, but neglects to consider that the SFP may be | approach is practical but neglects to consider that the SFP may be | |||
| referenced by other SFPs (through "branch" instructions) and used by | referenced by other SFPs (through "branch" instructions) and used by | |||
| many Classifiers. In those cases the corresponding configuration | many classifiers. In those cases, the corresponding configuration | |||
| resulting from a change in SPI may have wide ripples and give scope | resulting from a change in SPI may have wide ripples and create scope | |||
| for errors that are hard to trace. | for errors that are hard to trace. | |||
| Therefore, while this document requires that the SI values in an SFP | Therefore, while this document requires that the SI values in an SFP | |||
| are monotonic decreasing, it makes no assumption that the SI values | are monotonically decreasing, it makes no assumption that the SI | |||
| are sequential. Configuration tools may apply that rule, but they | values are sequential. Configuration tools may apply that rule, but | |||
| are not required to. To support this, an SFF SHOULD process as | they are not required to. To support this, an SFF SHOULD process as | |||
| follows when it receives a packet: | follows when it receives a packet: | |||
| o If the SI indicates a known entry in the SFP, the SFF MUST process | * If the SI indicates a known entry in the SFP, the SFF MUST process | |||
| the packet as normal, looking up the SI and determining to which | the packet as normal, looking up the SI and determining to which | |||
| local SFI to deliver the packet. | local SFI to deliver the packet. | |||
| o If the SI does not match an entry in the SFP, the SFF MUST reduce | * If the SI does not match an entry in the SFP, the SFF MUST reduce | |||
| the SI value to the next (smaller) value present in the SFP and | the SI value to the next (smaller) value present in the SFP and | |||
| process the packet using that SI. | process the packet using that SI. | |||
| o If there is no smaller SI (i.e., if the end of the SFP has been | * If there is no smaller SI (i.e., if the end of the SFP has been | |||
| reached) the SFF MUST treat the SI value as invalid as described | reached), the SFF MUST treat the SI value as not valid, as | |||
| in [RFC8300]. | described in [RFC8300]. | |||
| This makes the behavior described in this document a superset of the | This makes the behavior described in this document a superset of the | |||
| function in [RFC8300]. That is, an implementation that strictly | function in [RFC8300]. That is, an implementation that strictly | |||
| follows RFC 8300 in performing SI decrements in units of one, is | follows RFC 8300 in performing SI decrements in units of one is | |||
| perfectly in line with the mechanisms defined in this document. | perfectly in line with the mechanisms defined in this document. | |||
| SFF implementations MAY choose to only support contiguous SI values | SFF implementations MAY choose to only support contiguous SI values | |||
| in an SFP. Such an implementation will not support receiving an SI | in an SFP. Such an implementation will not support receiving an SI | |||
| value that is not present in the SFP and will discard the packets as | value that is not present in the SFP and will discard the packets as | |||
| described in [RFC8300]. | described in [RFC8300]. | |||
| 5. Selection within Service Function Paths | 5. Selection within Service Function Paths | |||
| As described in Section 2 the SPI/SI in the NSH passed back from an | As described in Section 2, the SPI/SI in the NSH passed back from an | |||
| SFI to the SFF may leave the SFF with a choice of next hop SFTs, and | SFI to the SFF may leave the SFF with a choice of next-hop SFTs and a | |||
| a choice of SFIs for each SFT. That is, the SPI indicates an SFPR, | choice of SFIs for each SFT. That is, the SPI indicates an SFPR, and | |||
| and the SI indicates an entry in that SFPR. Each entry in an SFPR is | the SI indicates an entry in that SFPR. Each entry in an SFPR is a | |||
| a set of one or more SFT/SFIR-RD pairs. The SFF MUST choose one of | set of one or more SFT/SFIR-RD pairs. The SFF MUST choose one of | |||
| these, identify the SFF that supports the chosen SFI, and send the | these, identify the SFF that supports the chosen SFI, and send the | |||
| packet to that next hop SFF. | packet to that next-hop SFF. | |||
| The choice be may offered for load balancing across multiple SFIs, or | The choice be may offered for load balancing across multiple SFIs, or | |||
| for discrimination between different actions necessary at a specific | for discrimination between different actions necessary at a specific | |||
| hop in the SFP. Different SFT values may exist at a given hop in an | hop in the SFP. Different SFT values may exist at a given hop in an | |||
| SFP to support several cases: | SFP to support several cases: | |||
| o There may be multiple instances of similar service functions that | * There may be multiple instances of similar service functions that | |||
| are distinguished by different SFT values. For example, firewalls | are distinguished by different SFT values. For example, firewalls | |||
| made by vendor A and vendor B may need to be identified by | made by vendor A and vendor B may need to be identified by | |||
| different SFT values because, while they have similar | different SFT values because, while they have similar | |||
| functionality, their behavior is not identical. Then, some SFPs | functionality, their behavior is not identical. Then, some SFPs | |||
| may limit the choice of SF at a given hop by specifying the SFT | may limit the choice of SF at a given hop by specifying the SFT | |||
| for vendor A, but other SFPs might not need to control which | for vendor A, but other SFPs might not need to control which | |||
| vendor's SF is used and so can indicate that either SFT can be | vendor's SF is used and so can indicate that either SFT can be | |||
| used. | used. | |||
| o There may be an obvious branch needed in an SFP such as the | * There may be an obvious branch needed in an SFP, such as the | |||
| processing after a firewall where admitted packets continue along | processing after a firewall where admitted packets continue along | |||
| the SFP, but suspect packets are diverted to a "penalty box". In | the SFP, but suspect packets are diverted to a "penalty box". In | |||
| this case, the next hop in the SFP will be indicated with two | this case, the next hop in the SFP will be indicated with two | |||
| different SFT values. | different SFT values. | |||
| In the typical case, the SFF chooses a next hop SFF by looking at the | In the typical case, the SFF chooses a next-hop SFF by looking at the | |||
| set of all SFFs that support the SFs identified by the SI (that set | set of all SFFs that support the SFs identified by the SI (that set | |||
| having been advertised in individual SFIR advertisements), finding | having been advertised in individual SFIR advertisements), finding | |||
| the one or more that are "nearest" in the underlay network, and | the one or more that are "nearest" in the underlay network, and | |||
| choosing between next hop SFFs using its own load-balancing | choosing between next-hop SFFs using its own load-balancing | |||
| algorithm. | algorithm. | |||
| An SFI may influence this choice process by passing additional | An SFI may influence this choice process by passing additional | |||
| information back along with the packet and NSH. This information may | information back, along with the packet and NSH. This information | |||
| influence local policy at the SFF to cause it to favor a next hop SFF | may influence local policy at the SFF to either cause it to favor a | |||
| (perhaps selecting one that is not nearest in the underlay), or to | next-hop SFF (perhaps selecting one that is not nearest in the | |||
| influence the load-balancing algorithm. | underlay) or influence the load-balancing algorithm. | |||
| This selection applies to the normal case, but also applies in the | This selection applies to the normal case but also applies in the | |||
| case of looping, jumping, and branching (see Section 6). | case of looping, jumping, and branching (see Section 6). | |||
| Suppose an SFF in a particular service overlay network (identified by | Suppose an SFF in a particular service function overlay network | |||
| a particular import RT, RT-z) needs to forward an NSH-encapsulated | (identified by a particular import RT, RT-z) needs to forward an NSH- | |||
| packet whose SPI is SPI-x and whose SI is SI-y. It does the | encapsulated packet whose SPI is SPI-x and whose SI is SI-y. It does | |||
| following: | the following: | |||
| 1. It looks for an installed SFPR that carries RT-z and that has | 1. It looks for an installed SFPR that carries RT-z and has SPI-x in | |||
| SPI-x in its NLRI. If there is none, then such packets cannot be | its NLRI. If there is none, then such packets cannot be | |||
| forwarded. | forwarded. | |||
| 2. From the SFP attribute of that SFPR, it finds the Hop TLV with SI | 2. From the SFP attribute of that SFPR, it finds the Hop TLV with SI | |||
| value set to SI-y. If there is no such Hop TLV, then such | value set to SI-y. If there is no such Hop TLV, then such | |||
| packets cannot be forwarded. | packets cannot be forwarded. | |||
| 3. It then finds the "relevant" set of SFIRs by going through the | 3. It then finds the "relevant" set of SFIRs by going through the | |||
| list of SFT TLVs contained in the Hop TLV as follows: | list of SFT TLVs contained in the Hop TLV as follows: | |||
| A. An SFIR is relevant if it carries RT-z, the SFT in its NLRI | A. An SFIR is relevant if it carries RT-z, the SFT in its NLRI | |||
| matches the SFT value in one of the SFT TLVs, and the RD | matches the SFT value in one of the SFT TLVs, and the RD | |||
| value in its NLRI matches an entry in the list of SFIR-RDs in | value in its NLRI matches an entry in the list of SFIR-RDs in | |||
| that SFT TLV. | that SFT TLV. | |||
| B. If an entry in the SFIR-RD list of an SFT TLV contains the | B. If an entry in the SFIR-RD list of an SFT TLV contains the | |||
| value zero, then an SFIR is relevant if it carries RT-z and | value zero, then an SFIR is relevant if it carries RT-z and | |||
| the SFT in its NLRI matches the SFT value in that SFT TLV. | the SFT in its NLRI matches the SFT value in that SFT TLV. | |||
| I.e., any SFIR in the service function overlay network | That is, any SFIR in the service function overlay network | |||
| defined by RT-z and with the correct SFT is relevant. | defined by RT-z and with the correct SFT is relevant. | |||
| C. If a pool identifier is in use then an SFIR is relevant if it | C. If a pool identifier is in use, then an SFIR is relevant if | |||
| is a member of the pool. | it is a member of the pool. | |||
| Each of the relevant SFIRs identifies a single SFI, and contains a | Each of the relevant SFIRs identifies a single SFI and contains a | |||
| Tunnel Encapsulation attribute that specifies how to send a packet to | tunnel encapsulation attribute that specifies how to send a packet to | |||
| that SFI. For a particular packet, the SFF chooses a particular SFI | that SFI. For a particular packet, the SFF chooses a particular SFI | |||
| from the set of relevant SFIRs. This choice is made according to | from the set of relevant SFIRs. This choice is made according to | |||
| local policy. | local policy. | |||
| A typical policy might be to figure out the set of SFIs that are | A typical policy might be to figure out the set of SFIs that are | |||
| closest, and to load balance among them. But this is not the only | closest and load balance among them. But this is not the only | |||
| possible policy. | possible policy. | |||
| Thus, at any point in time when an SFF selects its next hop, it | Thus, at any point in time when an SFF selects its next hop, it | |||
| chooses from the intersection of the set of next hop RDs contained in | chooses from the intersection of the set of next-hop RDs contained in | |||
| the SFPR and the RDs contained in the SFF's local set of SFIRs (i.e., | the SFPR and the RDs contained in the SFF's local set of SFIRs (i.e., | |||
| according to the determination of "relevance", above). If the | according to the determination of "relevance", above). If the | |||
| intersection is null, the SFPR is unusable. Similarly, when this | intersection is null, the SFPR is unusable. Similarly, when this | |||
| condition applies on the Controller that originated the SFPR, it | condition applies on the controller that originated the SFPR, it | |||
| SHOULD either withdraw the SFPR or re-advertise it with a new set of | SHOULD either withdraw the SFPR or re-advertise it with a new set of | |||
| RDs for the affected hop. | RDs for the affected hop. | |||
| 6. Looping, Jumping, and Branching | 6. Looping, Jumping, and Branching | |||
| As described in Section 2 an SFI or an SFF may cause a packet to | As described in Section 2, an SFI or an SFF may cause a packet to | |||
| "loop back" to a previous SF on a path in order that a sequence of | "loop back" to a previous SF on a path in order that a sequence of | |||
| functions may be re-executed. This is simply achieved by replacing | functions may be re-executed. This is simply achieved by replacing | |||
| the SI in the NSH with a higher value instead of decreasing it as | the SI in the NSH with a higher value, instead of decreasing it as | |||
| would normally be the case to determine the next hop in the path. | would normally be the case, to determine the next hop in the path. | |||
| Section 2 also describes how an SFI or an SFF may cause a packets to | Section 2 also describes how an SFI or SFF may cause a packet to | |||
| "jump forward" to an SF on a path that is not the immediate next SF | "jump forward" to an SF on a path that is not the immediate next SF | |||
| in the SFP. This is simply achieved by replacing the SI in the NSH | in the SFP. This is simply achieved by replacing the SI in the NSH | |||
| with a lower value than would be achieved by decreasing it by the | with a lower value than would be achieved by decreasing it by the | |||
| normal amount. | normal amount. | |||
| A more complex option to move packets from one SFP to another is | A more complex option to move packets from one SFP to another is | |||
| described in [RFC8300] and Section 2 where it is termed "branching". | described in [RFC8300] and Section 2, where it is termed "branching". | |||
| This mechanism allows an SFI or SFF to make a choice of downstream | This mechanism allows an SFI or SFF to make a choice of downstream | |||
| treatments for packets based on local policy and output of the local | treatments for packets based on local policy and the output of the | |||
| SF. Branching is achieved by changing the SPI in the NSH to indicate | local SF. Branching is achieved by changing the SPI in the NSH to | |||
| the new path and setting the SI to indicate the point in the path at | indicate the new path and setting the SI to indicate the point in the | |||
| which the packets enter. | path at which the packets enter. | |||
| Note that the NSH does not include a marker to indicate whether a | Note that the NSH does not include a marker to indicate whether a | |||
| specific packet has been around a loop before. Therefore, the use of | specific packet has been around a loop before. Therefore, the use of | |||
| NSH metadata ([RFC8300]) may be required in order to prevent infinite | NSH metadata [RFC8300] may be required in order to prevent infinite | |||
| loops. | loops. | |||
| 6.1. Protocol Control of Looping, Jumping, and Branching | 6.1. Protocol Control of Looping, Jumping, and Branching | |||
| If the SFT value in an SFT TLV in an SFPR has the Special Purpose SFT | If the SFT value in an SFT TLV in an SFPR has the special-purpose SFT | |||
| value "Change Sequence" (see Section 10) then this is an indication | value "Change Sequence" (see Section 10), then this is an indication | |||
| that the SFF may make a loop, jump, or branch according to local | that the SFF may make a loop, jump, or branch according to local | |||
| policy and information returned by the local SFI. | policy and information returned by the local SFI. | |||
| In this case, the SPI and SI of the next hop are encoded in the eight | In this case, the SPI and SI of the next hop are encoded in the eight | |||
| bytes of an entry in the SFIR-RD list as follows: | bytes of an entry in the SFIR-RD list as follows: | |||
| 3 bytes SPI | 3 bytes SPI | |||
| 1 bytes SI | 1 byte SI | |||
| 4 bytes Reserved (SHOULD be set to zero and ignored) | 4 bytes Reserved (SHOULD be set to zero and ignored) | |||
| If the SI in this encoding is not part of the SFPR indicated by the | If the SI in this encoding is not part of the SFPR indicated by the | |||
| SPI in this encoding, then this is an explicit error that SHOULD be | SPI in this encoding, then this is an explicit error that SHOULD be | |||
| detected by the SFF when it parses the SFPR. The SFPR SHOULD NOT | detected by the SFF when it parses the SFPR. The SFPR SHOULD NOT | |||
| cause any forwarding state to be installed in the SFF and packets | cause any forwarding state to be installed in the SFF, and packets | |||
| received with the SPI that indicates this SFPR SHOULD be silently | received with the SPI that indicates this SFPR SHOULD be silently | |||
| discarded. | discarded. | |||
| If the SPI in this encoding is unknown, the SFF SHOULD NOT install | If the SPI in this encoding is unknown, the SFF SHOULD NOT install | |||
| any forwarding state for this SFPR, but MAY hold the SFPR pending | any forwarding state for this SFPR but MAY hold the SFPR pending | |||
| receipt of another SFPR that does use the encoded SPI. | receipt of another SFPR that does use the encoded SPI. | |||
| If the SPI matches the current SPI for the path, this is a loop or | If the SPI matches the current SPI for the path, this is a loop or | |||
| jump. In this case, if the SI is greater than to the current SI it | jump. In this case, if the SI is greater than or equal to the | |||
| is a loop. If the SPI matches and the SI is less than the next SI, | current SI, it is a loop. If the SPI matches and the SI is less than | |||
| it is a jump. | the next SI, it is a jump. | |||
| If the SPI indicates another path, this is a branch and the SI | If the SPI indicates another path, this is a branch, and the SI | |||
| indicates the point at which to enter that path. | indicates the point at which to enter that path. | |||
| The Change Sequence SFT is just another SFT that may appear in a set | The Change Sequence SFT is just another SFT that may appear in a set | |||
| of SFI/SFT tuples within an SI and is selected as described in | of SFI/SFT tuples within an SI and is selected as described in | |||
| Section 5. | Section 5. | |||
| Note that Special Purpose SFTs MUST NOT be advertised in SFIRs. If | Note that special-purpose SFTs MUST NOT be advertised in SFIRs. If | |||
| such an SFIR is received it SHOULD be ignored. | such an SFIR is received, it SHOULD be ignored. | |||
| 6.2. Implications for Forwarding State | 6.2. Implications for Forwarding State | |||
| Support for looping and jumping requires that the SFF has forwarding | Support for looping and jumping requires that the SFF has forwarding | |||
| state established to an SFF that provides access to an instance of | state established to an SFF that provides access to an instance of | |||
| the appropriate SF. This means that the SFF must have seen the | the appropriate SF. This means that the SFF must have seen the | |||
| relevant SFIR advertisements and known that it needed to create the | relevant SFIR advertisements and mush have known that it needed to | |||
| forwarding state. This is a matter of local configuration and | create the forwarding state. This is a matter of local configuration | |||
| implementation: for example, an implementation could be configured to | and implementation; for example, an implementation could be | |||
| install forwarding state for specific looping/jumping. | configured to install forwarding state for specific looping/jumping. | |||
| Support for branching requires that the SFF has forwarding state | Support for branching requires that the SFF has forwarding state | |||
| established to an SFF that provides access to an instance of the | established to an SFF that provides access to an instance of the | |||
| appropriate entry SF on the other SFP. This means that the SFF must | appropriate entry SF on the other SFP. This means that the SFF must | |||
| have seen the relevant SFIR and SFPR advertisements and known that it | have seen the relevant SFIR and SFPR advertisements and known that it | |||
| needed to create the forwarding state. This is a matter of local | needed to create the forwarding state. This is a matter of local | |||
| configuration and implementation: for example, an implementation | configuration and implementation; for example, an implementation | |||
| could be configured to install forwarding state for specific | could be configured to install forwarding state for specific | |||
| branching (identified by SPI and SI). | branching (identified by SPI and SI). | |||
| 7. Advanced Topics | 7. Advanced Topics | |||
| This section highlights several advanced topics introduced elsewhere | This section highlights several advanced topics introduced elsewhere | |||
| in this document. | in this document. | |||
| 7.1. Correlating Service Function Path Instances | 7.1. Correlating Service Function Path Instances | |||
| It is often useful to create bidirectional SFPs to enable packet | It is often useful to create bidirectional SFPs to enable packet | |||
| flows to traverse the same set of SFs, but in the reverse order. | flows to traverse the same set of SFs, but in the reverse order. | |||
| However, packets on SFPs in the data plane (per [RFC8300]) do not | However, packets on SFPs in the data plane (per [RFC8300]) do not | |||
| contain a direction indicator, so each direction must use a different | contain a direction indicator, so each direction must use a different | |||
| SPI. | SPI. | |||
| As described in Section 3.2.1.1 an SFPR can contain one or more | As described in Section 3.2.1.1, an SFPR can contain one or more | |||
| correlators encoded in Association TLVs. If the Association Type | correlators encoded in Association TLVs. If the Association Type | |||
| indicates "Bidirectional SFP" then the SFP advertised in the SFPR is | indicates "Bidirectional SFP", then the SFP advertised in the SFPR is | |||
| one direction of a bidirectional pair of SFPs where the other in the | one direction of a bidirectional pair of SFPs, where the other in the | |||
| pair is advertised in the SFPR with RD as carried in the Associated | pair is advertised in the SFPR with RD as carried in the "Associated | |||
| SFPR-RD field of the Association TLV. The SPI carried in the | SFPR-RD" field of the Association TLV. The SPI carried in the | |||
| Associated SPI field of the Association TLV provides a cross-check | "Associated SPI" field of the Association TLV provides a cross-check | |||
| against the SPI advertised in the SFPR with RD as carried in the | against the SPI advertised in the SFPR with RD as carried in the | |||
| Associated SFPR-RD field of the Association TLV. | "Associated SFPR-RD" field of the Association TLV. | |||
| As noted in Section 3.2.1.1, when SFPRs reference each other, one | As noted in Section 3.2.1.1, when SFPRs reference each other, one | |||
| SFPR advertisement will be received before the other. Therefore, | SFPR advertisement will be received before the other. Therefore, | |||
| processing of an association will require that the first SFPR is not | processing of an association will require that the first SFPR not be | |||
| rejected simply because the Associated SFPR-RD it carries is unknown. | rejected simply because the Associated SFPR-RD it carries is unknown. | |||
| However, the SFP defined by the first SFPR is valid and SHOULD be | However, the SFP defined by the first SFPR is valid and SHOULD be | |||
| available for use as a unidirectional SFP even in the absence of an | available for use as a unidirectional SFP, even in the absence of an | |||
| advertisement of its partner. | advertisement of its partner. | |||
| Furthermore, in error cases where SFPR-a associates with SFPR-b, but | Furthermore, in error cases where SFPR-a associates with SFPR-b, but | |||
| SFPR-b associates with SFPR-c such that a bidirectional pair of SFPs | SFPR-b associates with SFPR-c such that a bidirectional pair of SFPs | |||
| cannot be formed, the individual SFPs are still valid and SHOULD be | cannot be formed, the individual SFPs are still valid and SHOULD be | |||
| available for use as unidirectional SFPs. An implementation SHOULD | available for use as unidirectional SFPs. An implementation SHOULD | |||
| log this situation because it represents a Controller error. | log this situation, because it represents a controller error. | |||
| Usage of a bidirectional SFP may be programmed into the Classifiers | Usage of a bidirectional SFP may be programmed into the classifiers | |||
| by the Controller. Alternatively, a Classifier may look at incoming | by the controller. Alternatively, a classifier may look at incoming | |||
| packets on a bidirectional packet flow, extract the SPI from the | packets on a bidirectional packet flow, extract the SPI from the | |||
| received NSH, and look up the SFPR to find the reverse direction SFP | received NSH, and look up the SFPR to find the reverse-direction SFP | |||
| to use when it sends packets. | to use when it sends packets. | |||
| See Section 8 for an example of how this works. | See Section 8 for an example of how this works. | |||
| 7.2. Considerations for Stateful Service Functions | 7.2. Considerations for Stateful Service Functions | |||
| Some service functions are stateful. That means that they build and | Some service functions are stateful. That means that they build and | |||
| maintain state derived from configuration or from the packet flows | maintain state derived from configuration or the packet flows that | |||
| that they handle. In such cases it can be important or necessary | they handle. In such cases, it can be important or necessary that | |||
| that all packets from a flow continue to traverse the same instance | all packets from a flow continue to traverse the same instance of a | |||
| of a service function so that the state can be leveraged and does not | service function so that the state can be leveraged and does not need | |||
| need to be regenerated. | to be regenerated. | |||
| In the case of bidirectional SFPs, it may be necessary to traverse | In the case of bidirectional SFPs, it may be necessary to traverse | |||
| the same instances of a stateful service function in both directions. | the same instances of a stateful service function in both directions. | |||
| A firewall is a good example of such a service function. | A firewall is a good example of such a service function. | |||
| This issue becomes a concern where there are multiple parallel | This issue becomes a concern where there are multiple parallel | |||
| instances of a service function and a determination of which one to | instances of a service function and a determination of which one to | |||
| use could normally be left to the SFF as a load-balancing or local | use could normally be left to the SFF as a load-balancing or local- | |||
| policy choice. | policy choice. | |||
| For the forward direction SFP, the concern is that the same choice of | For the forward-direction SFP, the concern is that the same choice of | |||
| service function is made for all packets of a flow under normal | SF is made for all packets of a flow under normal network conditions. | |||
| network conditions. It may be possible to guarantee that the load | It may be possible to guarantee that the load-balancing functions | |||
| balancing functions applied in the SFFs are stable and repeatable, | applied in the SFFs are stable and repeatable, but a controller that | |||
| but a Controller that constructs SFPs might not want to trust to | constructs SFPs might not want to trust to this. The controller can, | |||
| this. The Controller can, in these cases, build a number of more | in these cases, build a number of more specific SFPs, each traversing | |||
| specific SFPs each traversing a specific instance of the stateful | a specific instance of the stateful SFs. In this case, the load- | |||
| SFs. In this case, the load balancing choice can be left up to the | balancing choice can be left up to the classifier. Thus, the | |||
| Classifier. Thus the Classifier selects which instance of a stateful | classifier selects which instance of a stateful SF is used by a | |||
| SF is used by a particular flow by selecting the SFP that the flow | particular flow by selecting the SFP that the flow uses. | |||
| uses. | ||||
| For bidirectional SFPs where the same instance of a stateful SF must | For bidirectional SFPs where the same instance of a stateful SF must | |||
| be traversed in both directions, it is not enough to leave the choice | be traversed in both directions, it is not enough to leave the choice | |||
| of service function instance as a local choice even if the load | of SFI as a local choice, even if the load balancing is stable, | |||
| balancing is stable because coordination would be required between | because coordination would be required between the decision points in | |||
| the decision points in the forward and reverse directions and this | the forward and reverse directions, and this may be hard to achieve | |||
| may be hard to achieve in all cases except where it is the same SFF | in all cases except where it is the same SFF that makes the choice in | |||
| that makes the choice in both directions. | both directions. | |||
| Note that this approach necessarily increases the amount of SFP state | Note that this approach necessarily increases the amount of SFP state | |||
| in the network (i.e., there are more SFPs). It is possible to | in the network (i.e., there are more SFPs). It is possible to | |||
| mitigate this effect by careful construction of SFPs built from a | mitigate this effect by careful construction of SFPs built from a | |||
| concatenation of other SFPs. | concatenation of other SFPs. | |||
| Section 8.9 includes some simple examples of SFPs for stateful | Section 8.9 includes some simple examples of SFPs for stateful SFs. | |||
| service functions. | ||||
| 7.3. VPN Considerations and Private Service Functions | 7.3. VPN Considerations and Private Service Functions | |||
| Likely deployments include reserving specific instances of Service | Likely deployments include reserving specific instances of SFs for | |||
| Functions for specific customers or allowing customers to deploy | specific customers or allowing customers to deploy their own SFs | |||
| their own Service Functions within the network. Building Service | within the network. Building SFs in such environments requires that | |||
| Functions in such environments requires that suitable identifiers are | suitable identifiers be used to ensure that SFFs distinguish which | |||
| used to ensure that SFFs distinguish which SFIs can be used and which | SFIs can be used and which cannot. | |||
| cannot. | ||||
| This problem is similar to how VPNs are supported and is solved in a | This problem is similar to a problem in the way that VPNs are | |||
| similar way. The RT field is used to indicate a set of Service | supported and is solved in a similar way. The "RT" field is used to | |||
| Functions from which all choices must be made. | indicate a set of SFs from which all choices must be made. | |||
| 7.4. Flow Specification for SFC Classifiers | 7.4. Flow Specification for SFC Classifiers | |||
| [I-D.ietf-idr-rfc5575bis] defines a set of BGP routes that can be | [RFC8955] defines a set of BGP routes that can be used to identify | |||
| used to identify the packets in a given flow using fields in the | the packets in a given flow using fields in the header of each | |||
| header of each packet, and a set of actions, encoded as extended | packet, and a set of actions -- encoded as Extended Communities -- | |||
| communities, that can be used to disposition those packets. This | that can be used to disposition those packets. This document enables | |||
| document enables the use of these mechanisms by SFC Classifiers by | the use of these mechanisms by SFC classifiers by defining a new | |||
| defining a new action extended community called "Flow Specification | action Extended Community called "Flow Specification for SFC | |||
| for SFC Classifiers" identified by the value TBD4. Note that | Classifiers", identified by the value 0x0d. Note that implementation | |||
| implementation of this section of this specification will be | of this section of this specification will be controllers or | |||
| Controllers or Classifiers communicating with each other directly for | classifiers communicating with each other directly for the purpose of | |||
| the purpose of instructing the Classifier how to place packets onto | instructing the classifier how to place packets onto an SFP. So that | |||
| an SFP. In order that the implementation of Classifiers can be kept | the implementation of classifiers can be kept simple, and to avoid | |||
| simple and to avoid the confusion between the purpose of different | the confusion between the purposes of different Extended Communities, | |||
| extended communities, a Controller MUST NOT include other action | a controller MUST NOT include other action Extended Communities at | |||
| extended communities at the same time as a "Flow Specification for | the same time as a "Flow Specification for SFC Classifiers" Extended | |||
| SFC Classifiers" extended community: a "Flow Specification for SFC | Community. A "Flow Specification for SFC Classifiers" Traffic | |||
| Classifiers" Traffic Filtering Action Extended Community advertised | Filtering Action Extended Community advertised with any other Traffic | |||
| with any other Traffic Filtering Action Extended Community MUST be | Filtering Action Extended Community MUST be treated as malformed in | |||
| treated as malformed in line with [I-D.ietf-idr-rfc5575bis] and | line with [RFC8955] and result in the flow-specification UPDATE | |||
| result in the Flow Specification UPDATE message being handled as | message being handled as "treat-as-withdraw", according to [RFC7606], | |||
| treat-as-withdraw according to [RFC7606] Section 2. | Section 2. | |||
| To put the Flow Specification into context when multiple SFC overlays | To put the flow specification into context, when multiple service | |||
| are present in one network, each FlowSpec update MUST be tagged with | function chaining overlays are present in one network, each FlowSpec | |||
| the route target of the overlay or VPN network for which it is | update MUST be tagged with the route target of the overlay or VPN | |||
| intended. | network for which it is intended. | |||
| This extended community is encoded as an 8-octet value, as shown in | This Extended Community is encoded as an 8-octet value, as shown in | |||
| Figure 10. | Figure 10. | |||
| 1 2 3 | 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 | 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type=0x80 | Sub-Type=TBD4 | SPI | | | Type=0x80 | Sub-Type=0x0d | SPI | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | SPI (cont.) | SI | SFT | | | SPI (cont.) | SI | SFT | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 10: The Format of the Flow Specification for SFC Classifiers | Figure 10: The Format of the Flow Specification for SFC | |||
| Extended Community | Classifiers Extended Community | |||
| The extended community contains the Service Path Identifier (SPI), | The Extended Community contains the Service Path Identifier (SPI), | |||
| Service Index (SI), and Service Function Type (SFT) as defined | Service Index (SI), and Service Function Type (SFT), as defined | |||
| elsewhere in this document. Thus, each action extended community | elsewhere in this document. Thus, each action extended community | |||
| defines the entry point (not necessarily the first hop) into a | defines the entry point (not necessarily the first hop) into a | |||
| specific service function path. This allows, for example, different | specific SFP. This allows, for example, different flows to enter the | |||
| flows to enter the same service function path at different points. | same SFP at different points. | |||
| Note that according to [I-D.ietf-idr-rfc5575bis] a given Flow | Note that, according to [RFC8955], a given flow-specification update | |||
| Specification update may include multiple of these action extended | may include multiple of these action Extended Communities. If a | |||
| communities. If a given action extended community does not contain | given action extended community does not contain an installed SFPR | |||
| an installed SFPR with the specified {SPI, SI, SFT} it MUST NOT be | with the specified {SPI, SI, SFT}, it MUST NOT be used for | |||
| used for dispositioning the packets of the specified flow. | dispositioning the packets of the specified flow. | |||
| The normal case of packet classification for SFC will see a packet | The normal case of packet classification for service function | |||
| enter the SFP at its first hop. In this case the SI in the extended | chaining will see a packet enter the SFP at its first hop. In this | |||
| community is superfluous and the SFT may also be unnecessary. To | case, the SI in the Extended Community is superfluous, and the SFT | |||
| allow these cases to be handled, a special meaning is assigned to a | may also be unnecessary. To allow these cases to be handled, a | |||
| Service Index of zero (not a valid value) and an SFT of zero (a | special meaning is assigned to an SI of zero (not a valid value) and | |||
| reserved value in the registry - see Section 10.5). | an SFT of zero (a reserved value in the registry -- see | |||
| Section 10.5). | ||||
| o If an SFC Classifiers Extended Community is received with SI = 0 | * If an SFC Classifiers Extended Community is received with SI = 0, | |||
| then it means that the first hop of the SFP indicated by the SPI | then it means that the first hop of the SFP indicated by the SPI | |||
| MUST be used. | MUST be used. | |||
| o If an SFC Classifiers Extended Community is received with SFT = 0 | * If an SFC Classifiers Extended Community is received with SFT = 0, | |||
| then there are two sub-cases: | then there are two subcases: | |||
| * If there is a choice of SFT in the hop indicated by the value | - If there is a choice of SFT in the hop indicated by the value | |||
| of the SI (including SI = 0) then SFT = 0 means there is a free | of the SI (including SI = 0), then SFT = 0 means there is a | |||
| choice according to local policy of which SFT to use). | free choice of which SFT to use, according to local policy). | |||
| * If there is no choice of SFT in the hop indicated by the value | - If there is no choice of SFT in the hop indicated by the value | |||
| of SI, then SFT = 0 means that the value of the SFT at that hop | of SI, then SFT = 0 means that the value of the SFT at that | |||
| as indicated in the SFPR for the indicated SPI MUST be used. | hop, as indicated in the SFPR for the indicated SPI, MUST be | |||
| used. | ||||
| One of the filters that the Flow Specification may describe is the | One of the filters that the flow specification may describe is the | |||
| VPN to which the traffic belongs. Additionally, as noted above, to | VPN to which the traffic belongs. Additionally, as noted above, to | |||
| put the indicated SPI into context when multiple SFC overlays are | put the indicated SPI into context when multiple SFC overlays are | |||
| present in one network, each FlowSpec update MUST be tagged with the | present in one network, each FlowSpec update MUST be tagged with the | |||
| route target of the overlay or VPN network for which it is intended. | route target of the overlay or VPN network for which it is intended. | |||
| Note that future extensions might be made to the Flow Specification | Note that future extensions might be made to the Flow Specification | |||
| for SFC Classifiers Extended Community to provide instruction to the | for SFC Classifiers Extended Community to provide instruction to the | |||
| Classifier about what metadata to add to packets that it classifies | classifier about what metadata to add to packets that it classifies | |||
| for forwarding on a specific SFP, but that is outside the scope of | for forwarding on a specific SFP; however, that is outside the scope | |||
| this document. | of this document. | |||
| 7.5. Choice of Data Plane SPI/SI Representation | 7.5. Choice of Data Plane SPI/SI Representation | |||
| This document ties together the control and data planes of an SFC | This document ties together the control and data planes of a service | |||
| overlay network through the use of the SPI/SI which is nominally | function chaining overlay network through the use of the SPI/SI that | |||
| carried in the NSH of a given packet. However, in order to handle | is nominally carried in the NSH of a given packet. However, in order | |||
| situations in which the NSH is not ubiquitously deployed, it is also | to handle situations in which the NSH is not ubiquitously deployed, | |||
| possible to use alternative data plane representations of the SPI/SI | it is also possible to use alternative data plane representations of | |||
| by carrying the identical semantics in other protocol fields such as | the SPI/SI by carrying the identical semantics in other protocol | |||
| MPLS labels [RFC8595]. | fields, such as MPLS labels [RFC8595]. | |||
| This document defines a new sub-TLV for the Tunnel Encapsulation | This document defines a new Sub-TLV for the tunnel encapsulation | |||
| attribute [I-D.ietf-idr-tunnel-encaps], the SPI/SI Representation | attribute [RFC9012], the SPI/SI Representation Sub-TLV of type 16. | |||
| sub-TLV of type TBD5. This sub-TLV MAY be present in each Tunnel TLV | This Sub-TLV MAY be present in each Tunnel TLV contained in a tunnel | |||
| contained in a Tunnel Encapsulation attribute when the attribute is | encapsulation attribute when the attribute is carried by an SFIR. | |||
| carried by an SFIR. The value field of this sub-TLV is a two octet | The "Value" field of this Sub-TLV is a two-octet field of flags | |||
| field of flags numbered counting from the the most significant bit, | numbered counting from the most significant bit, each of which | |||
| each of which describes how the originating SFF expects to see the | describes how the originating SFF expects to see the SPI/SI | |||
| SPI/SI represented in the data plane for packets carried in the | represented in the data plane for packets carried in the tunnels | |||
| tunnels described by the Tunnel TLV. | described by the Tunnel TLV. | |||
| The following bits are defined by this document and are tracked in an | The following bits are defined by this document and are tracked in an | |||
| IANA registry described in Section 10.10: | IANA registry described in Section 10.10: | |||
| Bit TBD9: If this bit is set the NSH is to be used to carry the SPI/ | Bit 0: If this bit is set, the NSH is to be used to carry the SPI/SI | |||
| SI in the data plane. | in the data plane. | |||
| Bit TBD10: If this bit is set two labels in an MPLS label stack are | Bit 1: If this bit is set, two labels in an MPLS label stack are to | |||
| to be used as described in Section 7.5.1. | be used as described in Section 7.5.1. | |||
| If a given Tunnel TLV does not contain an SPI/SI Representation sub- | If a given Tunnel TLV does not contain an SPI/SI Representation Sub- | |||
| TLV then it MUST be processed as if such a sub-TLV is present with | TLV, then it MUST be processed as if such a Sub-TLV is present with | |||
| Bit TBD9 set and no other bits set. That is, the absence of the sub- | Bit 0 set and no other bits set. That is, the absence of the Sub-TLV | |||
| TLV SHALL be interpreted to mean that the NSH is to be used. | SHALL be interpreted to mean that the NSH is to be used. | |||
| If a given Tunnel TLV contains an SPI/SI Representation sub-TLV with | If a given Tunnel TLV contains an SPI/SI Representation Sub-TLV with | |||
| value field that has no flag set then the tunnel indicated by the | a "Value" field that has no flag set, then the tunnel indicated by | |||
| Tunnel TLV MUST NOT be used for forwarding SFC packets. If a given | the Tunnel TLV MUST NOT be used for forwarding SFC packets. If a | |||
| Tunnel TLV contains an SPI/SI Representation sub-TLV with both bit | given Tunnel TLV contains an SPI/SI Representation Sub-TLV with both | |||
| TBD9 and bit TBD10 set then the tunnel indicated by the Tunnel TLV | bit 0 and bit 1 set, then the tunnel indicated by the Tunnel TLV MUST | |||
| MUST NOT be used for forwarding SFC packets. The meaning and rules | NOT be used for forwarding SFC packets. The meaning and rules for | |||
| for presence of other bits is to be defined in future documents, but | the presence of other bits is to be defined in future documents, but | |||
| implementations of this specification MUST set other bits to zero and | implementations of this specification MUST set other bits to zero and | |||
| ignore them on receipt. | ignore them on receipt. | |||
| If a given Tunnel TLV contains more than one SPI/SI Representation | If a given Tunnel TLV contains more than one SPI/SI Representation | |||
| sub-TLV then the first one MUST be considered and subsequent | Sub-TLV, then the first one MUST be considered and subsequent | |||
| instances MUST be ignored. | instances MUST be ignored. | |||
| Note that the MPLS representation of the logical NSH may be used even | Note that the MPLS representation of the logical NSH may be used even | |||
| if the tunnel is not an MPLS tunnel. Conversely, MPLS tunnels may be | if the tunnel is not an MPLS tunnel. Conversely, MPLS tunnels may be | |||
| used to carry other encodings of the logical NSH (specifically, the | used to carry other encodings of the logical NSH (specifically, the | |||
| NSH itself). It is a requirement that both ends of a tunnel over the | NSH itself). It is a requirement that both ends of a tunnel over the | |||
| underlay network know that the tunnel is used for SFC and know what | underlay network know that the tunnel is used for service function | |||
| form of NSH representation is used. The signaling mechanism | chaining and know what form of NSH representation is used. The | |||
| described here allows coordination of this information. | signaling mechanism described here allows coordination of this | |||
| information. | ||||
| 7.5.1. MPLS Representation of the SPI/SI | 7.5.1. MPLS Representation of the SPI/SI | |||
| If bit TBD10 is set in the in the SPI/SI Representation sub-TLV then | If bit 1 is set in the SPI/SI Representation Sub-TLV, then labels in | |||
| labels in the MPLS label stack are used to indicate SFC forwarding | the MPLS label stack are used to indicate SFC forwarding and | |||
| and processing instructions to achieve the semantics of a logical | processing instructions to achieve the semantics of a logical NSH. | |||
| NSH. The label stack is encoded as shown in [RFC8595]. | The label stack is encoded as shown in [RFC8595]. | |||
| 7.6. MPLS Label Swapping/Stacking Operation | 7.6. MPLS Label Swapping/Stacking Operation | |||
| When a Classifier constructs an MPLS label stack for an SFP it starts | When a classifier constructs an MPLS label stack for an SFP, it | |||
| with that SFP's last hop. If the last hop requires an {SPI, SI} | starts with that SFP's last hop. If the last hop requires an {SPI, | |||
| label pair for label swapping, it pushes the SI (set to the SI value | SI} label pair for label swapping, it pushes the SI (set to the SI | |||
| of the last hop) and the SFP's SPI onto the MPLS label stack. If the | value of the last hop) and the SFP's SPI onto the MPLS label stack. | |||
| last hop requires a {context label, SFI label} label pair for label | If the last hop requires a {context label, SFI label} label pair for | |||
| stacking it selects a specific SFIR and pushes that SFIR's SFI label | label stacking, it selects a specific SFIR and pushes that SFIR's SFI | |||
| and context label onto the MPLS label stack. | label and context label onto the MPLS label stack. | |||
| The Classifier then moves sequentially back through the SFP one hop | The classifier then moves sequentially back through the SFP one hop | |||
| at a time. For each hop, if the hop requires an {SPI, SI]} and there | at a time. For each hop, if the hop requires an {SPI, SI} and there | |||
| is an {SPI, SI} at the top of the MPLS label stack, the SI is set to | is an {SPI, SI} at the top of the MPLS label stack, the SI is set to | |||
| the SI value of the current hop. If there is not an {SPI, SI} at the | the SI value of the current hop. If there is not an {SPI, SI} at the | |||
| top of the MPLS label stack, it pushes the SI (set to the SI value of | top of the MPLS label stack, it pushes the SI (set to the SI value of | |||
| the current hop) and the SFP's SPI onto the MPLS label stack. | the current hop) and the SFP's SPI onto the MPLS label stack. | |||
| If the hop requires a {context label, SFI label}, it selects a | If the hop requires a {context label, SFI label}, it selects a | |||
| specific SFIR and pushes that SFIR's SFI label and context label onto | specific SFIR and pushes that SFIR's SFI label and context label onto | |||
| the MPLS label stack. | the MPLS label stack. | |||
| 7.7. Support for MPLS-Encapsulated NSH Packets | 7.7. Support for MPLS-Encapsulated NSH Packets | |||
| [RFC8596] describes how to transport SFC packets using the NSH over | [RFC8596] describes how to transport SFC packets using the NSH over | |||
| an MPLS transport network. Signaling MPLS encapsulation of SFC | an MPLS transport network. Signaling that this approach is in use is | |||
| packets using the NSH is also supported by this document by using the | supported by this document as follows: | |||
| "BGP Tunnel Encapsulation Attribute Sub-TLV" with the codepoint 10 | ||||
| (representing "MPLS Label Stack") from the "BGP Tunnel Encapsulation | ||||
| Attribute Sub-TLVs" registry defined in [I-D.ietf-idr-tunnel-encaps], | ||||
| and also using the "SFP Traversal With MPLS Label Stack TLV" and the | ||||
| "SPI/SI Representation sub-TLV" with bit TBD9 set and bit TBD10 | ||||
| cleared. | ||||
| In this case the MPLS label stack constructed by the SFF to forward a | * A "BGP Tunnel Encapsulation Attribute" Sub-TLV is included with | |||
| packet to the next SFF on the SFP will consist of the labels needed | the codepoint 10 (representing "MPLS Label Stack") from the "BGP | |||
| to reach that SFF, and if label stacking is used it will also include | Tunnel Encapsulation Attribute Sub-TLVs" registry defined in | |||
| the labels advertised in the MPLS Label Stack sub-TLV and the labels | [RFC9012]. | |||
| remaining in the stack needed to traverse the remainder of the SFP. | ||||
| * An "SFP Traversal With MPLS Label Stack" TLV is included | ||||
| containing an "SPI/SI Representation" Sub-TLV with bit 0 set and | ||||
| bit 1 cleared. | ||||
| In this case, the MPLS label stack constructed by the SFF to forward | ||||
| a packet to the next SFF on the SFP will consist of the labels needed | ||||
| to reach that SFF, and if label stacking is used, it will also | ||||
| include the labels advertised in the MPLS Label Stack Sub-TLV and the | ||||
| labels remaining in the stack needed to traverse the remainder of the | ||||
| SFP. | ||||
| 8. Examples | 8. Examples | |||
| Most of the examples in this section use IPv4 addressing. But there | Most of the examples in this section use IPv4 addressing. But there | |||
| is nothing special about IPv4 in the mechanisms described in this | is nothing special about IPv4 in the mechanisms described in this | |||
| document, and they are equally applicable to IPv6. A few examples | document, and they are equally applicable to IPv6. A few examples | |||
| using IPv6 addressing are provided in Section 8.10. | using IPv6 addressing are provided in Section 8.10. | |||
| Assume we have a service function overlay network with four SFFs | Assume we have a service function overlay network with four SFFs | |||
| (SFF1, SFF3, SFF3, and SFF4). The SFFs have addresses in the | (SFF1, SFF2, SFF3, and SFF4). The SFFs have addresses in the | |||
| underlay network as follows: | underlay network as follows: | |||
| SFF1 192.0.2.1 | SFF1 192.0.2.1 | |||
| SFF2 192.0.2.2 | SFF2 192.0.2.2 | |||
| SFF3 192.0.2.3 | SFF3 192.0.2.3 | |||
| SFF4 192.0.2.4 | SFF4 192.0.2.4 | |||
| Each SFF provides access to some SFIs from the four Service Function | Each SFF provides access to some SFIs from the four SFTs, SFT=41, | |||
| Types SFT=41, SFT=42, SFT=43, and SFT=44 as follows: | SFT=42, SFT=43, and SFT=44, as follows: | |||
| SFF1 SFT=41 and SFT=42 | SFF1 SFT=41 and SFT=42 | |||
| SFF2 SFT=41 and SFT=43 | SFF2 SFT=41 and SFT=43 | |||
| SFF3 SFT=42 and SFT=44 | SFF3 SFT=42 and SFT=44 | |||
| SFF4 SFT=43 and SFT=44 | SFF4 SFT=43 and SFT=44 | |||
| The service function network also contains a Controller with address | The service function network also contains a controller with address | |||
| 198.51.100.1. | 198.51.100.1. | |||
| This example service function overlay network is shown in Figure 11. | This example service function overlay network is shown in Figure 11. | |||
| -------------- | -------------- | |||
| | Controller | | | Controller | | |||
| | 198.51.100.1 | ------ ------ ------ ------ | | 198.51.100.1 | ------ ------ ------ ------ | |||
| -------------- | SFI | | SFI | | SFI | | SFI | | -------------- | SFI | | SFI | | SFI | | SFI | | |||
| |SFT=41| |SFT=42| |SFT=41| |SFT=43| | |SFT=41| |SFT=42| |SFT=41| |SFT=43| | |||
| ------ ------ ------ ------ | ------ ------ ------ ------ | |||
| skipping to change at page 41, line 30 ¶ | skipping to change at line 1871 ¶ | |||
| --------- --------- | --------- --------- | |||
| / \ / \ | / \ / \ | |||
| ------ ------ ------ ------ | ------ ------ ------ ------ | |||
| | SFI | | SFI | | SFI | | SFI | | | SFI | | SFI | | SFI | | SFI | | |||
| |SFT=42| |SFT=44| |SFT=43| |SFT=44| | |SFT=42| |SFT=44| |SFT=43| |SFT=44| | |||
| ------ ------ ------ ------ | ------ ------ ------ ------ | |||
| Figure 11: Example Service Function Overlay Network | Figure 11: Example Service Function Overlay Network | |||
| The SFFs advertise routes to the SFIs they support. These | The SFFs advertise routes to the SFIs they support. These | |||
| advertisements contain Route Distinguishers that are set according to | advertisements contain RDs that are set according to the network | |||
| the network operator's configuration model. In all of these IPv4 | operator's configuration model. In all of these IPv4 examples, we | |||
| examples we use RDs of type 1 such that the available six octets are | use RDs of Type 1 such that the available six octets are partitioned | |||
| partitioned as four octets for the IPv4 address of the advertising | as four octets for the IPv4 address of the advertising SFF, and two | |||
| SFF, and two octets that are a local index of the SFI. This scheme | octets that are a local index of the SFI. This scheme is chosen | |||
| is chosen purely for convenience of documentation, and an operator is | purely for convenience of documentation, and an operator is totally | |||
| totally free to use any other scheme so long as it conforms to the | free to use any other scheme so long as it conforms to the | |||
| definitions of SFIR and SFPR in Section 3.1 and Section 3.2. | definitions of SFIR and SFPR in Sections 3.1 and 3.2. | |||
| Thus we see the following SFIRs advertised: | Thus, we see the following SFIRs advertised: | |||
| RD = 192.0.2.1/1, SFT = 41 | RD = 192.0.2.1/1, SFT = 41 | |||
| RD = 192.0.2.1/2, SFT = 42 | RD = 192.0.2.1/2, SFT = 42 | |||
| RD = 192.0.2.2/1, SFT = 41 | RD = 192.0.2.2/1, SFT = 41 | |||
| RD = 192.0.2.2/2, SFT = 43 | RD = 192.0.2.2/2, SFT = 43 | |||
| RD = 192.0.2.3/7, SFT = 42 | RD = 192.0.2.3/7, SFT = 42 | |||
| RD = 192.0.2.3/8, SFT = 44 | RD = 192.0.2.3/8, SFT = 44 | |||
| RD = 192.0.2.4/5, SFT = 43 | RD = 192.0.2.4/5, SFT = 43 | |||
| RD = 192.0.2.4/6, SFT = 44 | RD = 192.0.2.4/6, SFT = 44 | |||
| Note that the addressing used for communicating between SFFs is taken | Note that the addressing used for communicating between SFFs is taken | |||
| from the Tunnel Encapsulation attribute of the SFIR and not from the | from the tunnel encapsulation attribute of the SFIR and not from the | |||
| SFIR-RD. | SFIR-RD. | |||
| 8.1. Example Explicit SFP With No Choices | 8.1. Example Explicit SFP with No Choices | |||
| Consider the following SFPR. | Consider the following SFPR. | |||
| SFP1: RD = 198.51.100.1/101, SPI = 15, | SFP1: RD = 198.51.100.1/101, SPI = 15, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 43, RD = 192.0.2.2/2] | [SI = 250, SFT = 43, RD = 192.0.2.2/2] | |||
| The Service Function Path consists of an SF of type 41 located at | The SFP consists of an SF of Type 41 located at SFF1, followed by an | |||
| SFF1 followed by an SF of type 43 located at SFF2. This path is | SF of Type 43 located at SFF2. This path is fully explicit, and each | |||
| fully explicit and each SFF is offered no choice in forwarding | SFF is offered no choice in forwarding packets along the path. | |||
| packets along the path. | ||||
| SFF1 will receive packets on the path from the Classifier and will | SFF1 will receive packets on the path from the classifier and will | |||
| identify the path from the SPI (15). The initial SI will be 255 and | identify the path from the SPI (15). The initial SI will be 255, and | |||
| so SFF1 will deliver the packets to the SFI for SFT 41. | so SFF1 will deliver the packets to the SFI for SFT 41. | |||
| When the packets are returned to SFF1 by the SFI the SI will be | When the packets are returned to SFF1 by the SFI, the SI will be | |||
| decreased to 250 for the next hop. SFF1 has no flexibility in the | decreased to 250 for the next hop. SFF1 has no flexibility in the | |||
| choice of SFF to support the next hop SFI and will forward the packet | choice of SFF to support the next-hop SFI and will forward the packet | |||
| to SFF2 which will send the packets to the SFI that supports SFT 43 | to SFF2, which will send the packets to the SFI that supports SFT 43 | |||
| before forwarding the packets to their destinations. | before forwarding the packets to their destinations. | |||
| 8.2. Example SFP With Choice of SFIs | 8.2. Example SFP with Choice of SFIs | |||
| SFP2: RD = 198.51.100.1/102, SPI = 16, | SFP2: RD = 198.51.100.1/102, SPI = 16, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 43, {RD = 192.0.2.2/2, | [SI = 250, SFT = 43, {RD = 192.0.2.2/2, | |||
| RD = 192.0.2.4/5 } ] | RD = 192.0.2.4/5 } ] | |||
| In this example the path also consists of an SF of type 41 located at | In this example, the path also consists of an SF of Type 41 located | |||
| SFF1 and this is followed by an SF of type 43, but in this case the | at SFF1, and this is followed by an SF of Type 43. However, in this | |||
| SI = 250 contains a choice between the SFI located at SFF2 and the | case, the SI = 250 contains a choice between the SFI located at SFF2 | |||
| SFI located at SFF4. | and the SFI located at SFF4. | |||
| SFF1 will receive packets on the path from the Classifier and will | SFF1 will receive packets on the path from the classifier and will | |||
| identify the path from the SPI (16). The initial SI will be 255 and | identify the path from the SPI (16). The initial SI will be 255, and | |||
| so SFF1 will deliver the packets to the SFI for SFT 41. | so SFF1 will deliver the packets to the SFI for SFT 41. | |||
| When the packets are returned to SFF1 by the SFI the SI will be | When the packets are returned to SFF1 by the SFI, the SI will be | |||
| decreased to 250 for the next hop. SFF1 now has a choice of next hop | decreased to 250 for the next hop. SFF1 now has a choice of next-hop | |||
| SFF to execute the next hop in the path. It can either forward | SFFs to execute the next hop in the path. It can either forward | |||
| packets to SFF2 or SFF4 to execute a function of type 43. It uses | packets to SFF2 or SFF4 to execute a function of Type 43. It uses | |||
| its local load balancing algorithm to make this choice. The chosen | its local load-balancing algorithm to make this choice. The chosen | |||
| SFF will send the packets to the SFI that supports SFT 43 before | SFF will send the packets to the SFI that supports SFT 43 before | |||
| forwarding the packets to their destinations. | forwarding the packets to their destinations. | |||
| 8.3. Example SFP With Open Choice of SFIs | 8.3. Example SFP with Open Choice of SFIs | |||
| SFP3: RD = 198.51.100.1/103, SPI = 17, | SFP3: RD = 198.51.100.1/103, SPI = 17, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 44, RD = 0] | [SI = 250, SFT = 44, RD = 0] | |||
| In this example the path also consists of an SF of type 41 located at | In this example, the path also consists of an SF of Type 41 located | |||
| SFF1 and this is followed by an SI with an RD of zero and SF of type | at SFF1, and this is followed by an SI with an RD of zero and SF of | |||
| 44. This means that a choice can be made between any SFF that | Type 44. This means that a choice can be made between any SFF that | |||
| supports an SFI of type 44. | supports an SFI of Type 44. | |||
| SFF1 will receive packets on the path from the Classifier and will | SFF1 will receive packets on the path from the classifier and will | |||
| identify the path from the SPI (17). The initial SI will be 255 and | identify the path from the SPI (17). The initial SI will be 255, and | |||
| so SFF1 will deliver the packets to the SFI for SFT 41. | so SFF1 will deliver the packets to the SFI for SFT 41. | |||
| When the packets are returned to SFF1 by the SFI the SI will be | When the packets are returned to SFF1 by the SFI, the SI will be | |||
| decreased to 250 for the next hop. SFF1 now has a free choice of | decreased to 250 for the next hop. SFF1 now has a free choice of | |||
| next hop SFF to execute the next hop in the path selecting between | next-hop SFFs to execute the next hop in the path, selecting between | |||
| all SFFs that support SFs of type 44. Looking at the SFIRs it has | all SFFs that support SFs of Type 44. Looking at the SFIRs it has | |||
| received, SFF1 knows that SF type 44 is supported by SFF3 and SFF4. | received, SFF1 knows that SF Type 44 is supported by SFF3 and SFF4. | |||
| SFF1 uses its local load balancing algorithm to make this choice. | SFF1 uses its local load-balancing algorithm to make this choice. | |||
| The chosen SFF will send the packets to the SFI that supports SFT 44 | The chosen SFF will send the packets to the SFI that supports SFT 44 | |||
| before forwarding the packets to their destinations. | before forwarding the packets to their destinations. | |||
| 8.4. Example SFP With Choice of SFTs | 8.4. Example SFP with Choice of SFTs | |||
| SFP4: RD = 198.51.100.1/104, SPI = 18, | SFP4: RD = 198.51.100.1/104, SPI = 18, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, {SFT = 43, RD = 192.0.2.2/2, | [SI = 250, {SFT = 43, RD = 192.0.2.2/2, | |||
| SFT = 44, RD = 192.0.2.3/8 } ] | SFT = 44, RD = 192.0.2.3/8 } ] | |||
| This example provides a choice of SF type in the second hop in the | This example provides a choice of SF type in the second hop in the | |||
| path. The SI of 250 indicates a choice between SF type 43 located at | path. The SI of 250 indicates a choice between SF Type 43 located at | |||
| SF2 and SF type 44 located at SF3. | SF2 and SF Type 44 located at SF3. | |||
| SFF1 will receive packets on the path from the Classifier and will | SFF1 will receive packets on the path from the classifier and will | |||
| identify the path from the SPI (18). The initial SI will be 255 and | identify the path from the SPI (18). The initial SI will be 255, and | |||
| so SFF1 will deliver the packets to the SFI for SFT 41. | so SFF1 will deliver the packets to the SFI for SFT 41. | |||
| When the packets are returned to SFF1 by the SFI the SI will be | When the packets are returned to SFF1 by the SFI, the SI will be | |||
| decreased to 250 for the next hop. SFF1 now has a free choice of | decreased to 250 for the next hop. SFF1 now has a free choice of | |||
| next hop SFF to execute the next hop in the path selecting between | next-hop SFFs to execute the next hop in the path, selecting between | |||
| all SFFs that support an SF of type 43 and SFF3 that supports an SF | all SFFs that support an SF of Type 43 and SFF3, which supports an SF | |||
| of type 44. These may be completely different functions that are to | of Type 44. These may be completely different functions that are to | |||
| be executed dependent on specific conditions, or may be similar | be executed dependent on specific conditions, or they may be similar | |||
| functions identified with different type identifiers (such as | functions identified with different type identifiers (such as | |||
| firewalls from different vendors). SFF1 uses its local policy and | firewalls from different vendors). SFF1 uses its local policy and | |||
| load balancing algorithm to make this choice, and may use additional | load-balancing algorithm to make this choice and may use additional | |||
| information passed back from the local SFI to help inform its | information passed back from the local SFI to help inform its | |||
| selection. The chosen SFF will send the packets to the SFI that | selection. The chosen SFF will send the packets to the SFI that | |||
| supports the chose SFT before forwarding the packets to their | supports the chosen SFT before forwarding the packets to their | |||
| destinations. | destinations. | |||
| 8.5. Example Correlated Bidirectional SFPs | 8.5. Example Correlated Bidirectional SFPs | |||
| SFP5: RD = 198.51.100.1/105, SPI = 19, | SFP5: RD = 198.51.100.1/105, SPI = 19, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/106, Assoc-SPI = 20, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/106, Assoc-SPI = 20, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 43, RD = 192.0.2.2/2] | [SI = 250, SFT = 43, RD = 192.0.2.2/2] | |||
| SFP6: RD = 198.51.100.1/106, SPI = 20, | SFP6: RD = 198.51.100.1/106, SPI = 20, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/105, Assoc-SPI = 19, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/105, Assoc-SPI = 19, | |||
| [SI = 254, SFT = 43, RD = 192.0.2.2/2], | [SI = 254, SFT = 43, RD = 192.0.2.2/2], | |||
| [SI = 249, SFT = 41, RD = 192.0.2.1/1] | [SI = 249, SFT = 41, RD = 192.0.2.1/1] | |||
| This example demonstrates correlation of two SFPs to form a | This example demonstrates correlation of two SFPs to form a | |||
| bidirectional SFP as described in Section 7.1. | bidirectional SFP, as described in Section 7.1. | |||
| Two SFPRs are advertised by the Controller. They have different SPIs | Two SFPRs are advertised by the controller. They have different SPIs | |||
| (19 and 20) so they are known to be separate SFPs, but they both have | (19 and 20), so they are known to be separate SFPs, but they both | |||
| Association TLVs with Association Type set to 1 indicating | have Association TLVs with Association Type set to 1, indicating | |||
| bidirectional SFPs. Each has an Associated SFPR-RD field containing | bidirectional SFPs. Each has an "Associated SFPR-RD" field | |||
| the value of the other SFPR-RD to correlated the two SFPs as a | containing the value of the other SFPR-RD to correlate the two SFPs | |||
| bidirectional pair. | as a bidirectional pair. | |||
| As can be seen from the SFPRs in this example, the paths are | As can be seen from the SFPRs in this example, the paths are | |||
| symmetric: the hops in SFP5 appear in the reverse order in SFP6. | symmetric: the hops in SFP5 appear in the reverse order in SFP6. | |||
| 8.6. Example Correlated Asymmetrical Bidirectional SFPs | 8.6. Example Correlated Asymmetrical Bidirectional SFPs | |||
| SFP7: RD = 198.51.100.1/107, SPI = 21, | SFP7: RD = 198.51.100.1/107, SPI = 21, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/108, Assoc-SPI = 22, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/108, Assoc-SPI = 22, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 43, RD = 192.0.2.2/2] | [SI = 250, SFT = 43, RD = 192.0.2.2/2] | |||
| skipping to change at page 45, line 22 ¶ | skipping to change at line 2036 ¶ | |||
| SFP8: RD = 198.51.100.1/108, SPI = 22, | SFP8: RD = 198.51.100.1/108, SPI = 22, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/107, Assoc-SPI = 21, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/107, Assoc-SPI = 21, | |||
| [SI = 254, SFT = 44, RD = 192.0.2.4/6], | [SI = 254, SFT = 44, RD = 192.0.2.4/6], | |||
| [SI = 249, SFT = 41, RD = 192.0.2.1/1] | [SI = 249, SFT = 41, RD = 192.0.2.1/1] | |||
| Asymmetric bidirectional SFPs can also be created. This example | Asymmetric bidirectional SFPs can also be created. This example | |||
| shows a pair of SFPs with distinct SPIs (21 and 22) that are | shows a pair of SFPs with distinct SPIs (21 and 22) that are | |||
| correlated in the same way as in the example in Section 8.5. | correlated in the same way as in the example in Section 8.5. | |||
| However, unlike in that example, the SFPs are different in each | However, unlike in that example, the SFPs are different in each | |||
| direction. Both paths include a hop of SF type 41, but SFP7 includes | direction. Both paths include a hop of SF Type 41, but SFP7 includes | |||
| a hop of SF type 43 supported at SFF2 while SFP8 includes a hop of SF | a hop of SF Type 43 supported at SFF2, while SFP8 includes a hop of | |||
| type 44 supported at SFF4. | SF Type 44 supported at SFF4. | |||
| 8.7. Example Looping in an SFP | 8.7. Example Looping in an SFP | |||
| SFP9: RD = 198.51.100.1/109, SPI = 23, | SFP9: RD = 198.51.100.1/109, SPI = 23, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 44, RD = 192.0.2.4/5], | [SI = 250, SFT = 44, RD = 192.0.2.4/5], | |||
| [SI = 245, {SFT = 1, RD = {SPI=23, SI=255, Rsv=0}, | [SI = 245, {SFT = 1, RD = {SPI=23, SI=255, Rsv=0}, | |||
| SFT = 42, RD = 192.0.2.3/7 } ] | SFT = 42, RD = 192.0.2.3/7 } ] | |||
| Looping and jumping are described in Section 6. This example shows | Looping and jumping are described in Section 6. This example shows | |||
| an SFP that contains an explicit loop-back instruction that is | an SFP that contains an explicit loop-back instruction that is | |||
| presented as a choice within an SFP hop. | presented as a choice within an SFP hop. | |||
| The first two hops in the path (SI = 255 and SI = 250) are normal. | The first two hops in the path (SI = 255 and SI = 250) are normal. | |||
| That is, the packets will be delivered to SFF1 and SFF4 in turn for | That is, the packets will be delivered to SFF1 and SFF4 in turn for | |||
| execution of SFs of type 41 and 44 respectively. | execution of SFs of Type 41 and 44, respectively. | |||
| The third hop (SI = 245) presents SFF4 with a choice of next hop. It | The third hop (SI = 245) presents SFF4 with a choice of next hop. It | |||
| can either forward the packets to SFF3 for an SF of type 42 (the | can either forward the packets to SFF3 for an SF of Type 42 (the | |||
| second choice), or it can loop back. | second choice) or it can loop back. | |||
| The loop-back entry in the SFPR for SI = 245 is indicated by the | The loop-back entry in the SFPR for SI = 245 is indicated by the | |||
| special purpose SFT value 1 ("Change Sequence"). Within this hop, | special-purpose SFT value 1 ("Change Sequence"). Within this hop, | |||
| the RD is interpreted as encoding the SPI and SI of the next hop (see | the RD is interpreted as encoding the SPI and SI of the next hop (see | |||
| Section 6.1. In this case the SPI is 23 which indicates that this is | Section 6.1). In this case, the SPI is 23, which indicates that this | |||
| loop or branch: i.e., the next hop is on the same SFP. The SI is set | is a loop or branch, i.e., the next hop is on the same SFP. The SI | |||
| to 255: this is a higher number than the current SI (245) indicating | is set to 255; this is a higher number than the current SI (245), | |||
| a loop. | indicating a loop. | |||
| SFF4 must make a choice between these two next hops. Either the | SFF4 must make a choice between these two next hops. The packet will | |||
| packets will be forwarded to SFF3 with the NSH SI decreased to 245 or | be either forwarded to SFF3 with the NSH SI decreased to 245 or | |||
| looped back to SFF1 with the NSH SI reset to 255. This choice will | looped back to SFF1 with the NSH SI reset to 255. This choice will | |||
| be made according to local policy, information passed back by the | be made according to local policy, information passed back by the | |||
| local SFI, and details in the packets' metadata that are used to | local SFI, and details in the packets' metadata that are used to | |||
| prevent infinite looping. | prevent infinite looping. | |||
| 8.8. Example Branching in an SFP | 8.8. Example Branching in an SFP | |||
| SFP10: RD = 198.51.100.1/110, SPI = 24, | SFP10: RD = 198.51.100.1/110, SPI = 24, | |||
| [SI = 254, SFT = 42, RD = 192.0.2.3/7], | [SI = 254, SFT = 42, RD = 192.0.2.3/7], | |||
| [SI = 249, SFT = 43, RD = 192.0.2.2/2] | [SI = 249, SFT = 43, RD = 192.0.2.2/2] | |||
| SFP11: RD = 198.51.100.1/111, SPI = 25, | SFP11: RD = 198.51.100.1/111, SPI = 25, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 1, RD = {SPI=24, SI=254, Rsv=0}] | [SI = 250, SFT = 1, RD = {SPI=24, SI=254, Rsv=0}] | |||
| Branching follows a similar procedure to that for looping (and | Branching follows a similar procedure to that for looping (and | |||
| jumping) as shown in Section 8.7 however there are two SFPs involved. | jumping), as shown in Section 8.7. However, there are two SFPs | |||
| involved. | ||||
| SFP10 shows a normal path with packets forwarded to SFF3 and SFF2 for | SFP10 shows a normal path with packets forwarded to SFF3 and SFF2 for | |||
| execution of service functions of type 42 and 43 respectively. | execution of service functions of Type 42 and 43, respectively. | |||
| SFP11 starts as normal (SFF1 for an SF of type 41), but then SFF1 | SFP11 starts as normal (SFF1 for an SF of Type 41), but then SFF1 | |||
| processes the next hop in the path and finds a "Change Sequence" | processes the next hop in the path and finds a "Change Sequence" | |||
| Special Purpose SFT. The SFIR-RD field includes an SPI of 24 which | special-purpose SFT. The "SFIR-RD" field includes an SPI of 24, | |||
| indicates SFP10, not the current SFP. The SI in the SFIR-RD is 254, | which indicates SFP10, not the current SFP. The SI in the SFIR-RD is | |||
| so SFF1 knows that it must set the SPI/SI in the NSH to 24/254 and | 254, so SFF1 knows that it must set the SPI/SI in the NSH to 24/254 | |||
| send the packets to the appropriate SFF as advertised in the SFPR for | and send the packets to the appropriate SFF, as advertised in the | |||
| SFP10 (that is, SFF3). | SFPR for SFP10 (that is, SFF3). | |||
| 8.9. Examples of SFPs with Stateful Service Functions | 8.9. Examples of SFPs with Stateful Service Functions | |||
| This section provides some examples to demonstrate establishing SFPs | This section provides some examples to demonstrate establishing SFPs | |||
| when there is a choice of service functions at a particular hop, and | when there is a choice of service functions at a particular hop, and | |||
| where consistency of choice is required in both directions. The | where consistency of choice is required in both directions. The | |||
| scenarios that give rise to this requirement are discussed in | scenarios that give rise to this requirement are discussed in | |||
| Section 7.2. | Section 7.2. | |||
| 8.9.1. Forward and Reverse Choice Made at the SFF | 8.9.1. Forward and Reverse Choice Made at the SFF | |||
| skipping to change at page 47, line 24 ¶ | skipping to change at line 2127 ¶ | |||
| |SFT=41| |SFT=42| |SFT=42| |SFT=42| |SFT=43| | |SFT=41| |SFT=42| |SFT=42| |SFT=42| |SFT=43| | |||
| ------ ------\ ------ /------ ------ | ------ ------\ ------ /------ ------ | |||
| \ \ | / / | \ \ | / / | |||
| --------- --------- --------- | --------- --------- --------- | |||
| ---------- | SFF1 | | SFF2 | | SFF3 | | ---------- | SFF1 | | SFF2 | | SFF3 | | |||
| --> | |..|192.0.2.1|...|192.0.2.2|...|192.0.2.3|--> | --> | |..|192.0.2.1|...|192.0.2.2|...|192.0.2.3|--> | |||
| --> |Classifier| --------- --------- --------- | --> |Classifier| --------- --------- --------- | |||
| | | | | | | |||
| ---------- | ---------- | |||
| Figure 12: Example Where Choice is Made at the SFF | Figure 12: Example Where Choice Is Made at the SFF | |||
| This leads to the following SFIRs being advertised. | This leads to the following SFIRs being advertised. | |||
| RD = 192.0.2.1/11, SFT = 41 | RD = 192.0.2.1/11, SFT = 41 | |||
| RD = 192.0.2.2/11, SFT = 42 (for SFIa) | RD = 192.0.2.2/11, SFT = 42 (for SFIa) | |||
| RD = 192.0.2.2/12, SFT = 42 (for SFIb) | RD = 192.0.2.2/12, SFT = 42 (for SFIb) | |||
| RD = 192.0.2.2/13, SFT = 42 (for SFIc) | RD = 192.0.2.2/13, SFT = 42 (for SFIc) | |||
| RD = 192.0.2.3/11, SFT = 43 | RD = 192.0.2.3/11, SFT = 43 | |||
| The controller can create a single forward SFP (SFP12) giving SFF2 | The controller can create a single forward SFP (SFP12), giving SFF2 | |||
| the choice of which SFI to use to provide function of SFT 42 as | the choice of which SFI to use to provide a function of SFT 42, as | |||
| follows. The load-balancing choice between the three available SFIs | follows. The load-balancing choice between the three available SFIs | |||
| is assumed to be within the capabilities of the SFF and if the SFs | is assumed to be within the capabilities of the SFF, and if the SFs | |||
| are stateful it is assumed that the SFF knows this and arranges load | are stateful, it is assumed that the SFF knows this and arranges load | |||
| balancing in a stable, flow-dependent way. | balancing in a stable, flow-dependent way. | |||
| SFP12: RD = 198.51.100.1/112, SPI = 26, | SFP12: RD = 198.51.100.1/112, SPI = 26, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/113, Assoc-SPI = 27, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/113, Assoc-SPI = 27, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/11], | [SI = 255, SFT = 41, RD = 192.0.2.1/11], | |||
| [SI = 254, SFT = 42, {RD = 192.0.2.2/11, | [SI = 254, SFT = 42, {RD = 192.0.2.2/11, | |||
| 192.0.2.2/12, | 192.0.2.2/12, | |||
| 192.0.2.2/13 }], | 192.0.2.2/13 }], | |||
| [SI = 253, SFT = 43, RD = 192.0.2.3/11] | [SI = 253, SFT = 43, RD = 192.0.2.3/11] | |||
| The reverse SFP (SFP13) in this case may also be created as shown | The reverse SFP (SFP13) in this case may also be created as shown | |||
| below using association with the forward SFP and giving the load- | below, using association with the forward SFP and giving the load- | |||
| balancing choice to SFF2. This is safe, even in the case that the | balancing choice to SFF2. This is safe, even in the case that the | |||
| SFs of type 42 are stateful because SFF2 is doing the load balancing | SFs of Type 42 are stateful, because SFF2 is doing the load balancing | |||
| in both directions and can apply the same algorithm to ensure that | in both directions and can apply the same algorithm to ensure that | |||
| packets associated with the same flow use the same SFI regardless of | packets associated with the same flow use the same SFI regardless of | |||
| the direction of travel. | the direction of travel. | |||
| SFP13: RD = 198.51.100.1/113, SPI = 27, | SFP13: RD = 198.51.100.1/113, SPI = 27, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/112, Assoc-SPI = 26, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/112, Assoc-SPI = 26, | |||
| [SI = 255, SFT = 43, RD = 192.0.2.3/11], | [SI = 255, SFT = 43, RD = 192.0.2.3/11], | |||
| [SI = 254, SFT = 42, {RD = 192.0.2.2/11, | [SI = 254, SFT = 42, {RD = 192.0.2.2/11, | |||
| 192.0.2.2/12, | 192.0.2.2/12, | |||
| 192.0.2.2/13 }], | 192.0.2.2/13 }], | |||
| [SI = 253, SFT = 41, RD = 192.0.2.1/11] | [SI = 253, SFT = 41, RD = 192.0.2.1/11] | |||
| How an SFF knows that an attached SFI is stateful is out of scope of | How an SFF knows that an attached SFI is stateful is out of the scope | |||
| this document. It is assumed that this will form part of the process | of this document. It is assumed that this will form part of the | |||
| by which SFIs are registered as local to SFFs. Section 7.2 provides | process by which SFIs are registered as local to SFFs. Section 7.2 | |||
| additional observations about the coordination of the use of stateful | provides additional observations about the coordination of the use of | |||
| SFIs in the case of bidirectional SFPs. | stateful SFIs in the case of bidirectional SFPs. | |||
| In general, the problems of load balancing and the selection of the | In general, the problems of load balancing and the selection of the | |||
| same SFIs in both directions of a bidirectional SFP can be addressed | same SFIs in both directions of a bidirectional SFP can be addressed | |||
| by using sufficiently precisely specified SFPs (specifying the exact | by using sufficiently precisely specified SFPs (specifying the exact | |||
| SFIs to use) and suitable programming of the Classifiers at each end | SFIs to use) and suitable programming of the classifiers at each end | |||
| of the SFPs to make sure that the matching pair of SFPs are used. | of the SFPs to make sure that the matching pair of SFPs are used. | |||
| 8.9.2. Parallel End-to-End SFPs with Shared SFF | 8.9.2. Parallel End-to-End SFPs with Shared SFF | |||
| The mechanism described in Section 8.9.1 might not be desirable | The mechanism described in Section 8.9.1 might not be desirable | |||
| because of the functional assumptions it places on SFF2 to be able to | because of the functional assumptions it places on SFF2 to be able to | |||
| load balance with suitable flow identification, stability, and | load balance with suitable flow identification, stability, and | |||
| equality in both directions. Instead, it may be desirable to place | equality in both directions. Instead, it may be desirable to place | |||
| the responsibility for flow classification in the Classifier and let | the responsibility for flow classification in the classifier and let | |||
| it determine load balancing with the implied choice of SFIs. | it determine load balancing with the implied choice of SFIs. | |||
| Consider the network graph as shown in Figure 12 and with the same | Consider the network graph as shown in Figure 12 and with the same | |||
| set of SFIRs as listed in Section 8.9.1. In this case the controller | set of SFIRs as listed in Section 8.9.1. In this case, the | |||
| could specify three forward SFPs with their corresponding associated | controller could specify three forward SFPs with their corresponding | |||
| reverse SFPs. Each bidirectional pair of SFPs uses a different SFI | associated reverse SFPs. Each bidirectional pair of SFPs uses a | |||
| for the SF of type 42. The controller can instruct the Classifier | different SFI for the SF of Type 42. The controller can instruct the | |||
| how to place traffic on the three bidirectional SFPs, or can treat | classifier how to place traffic on the three bidirectional SFPs, or | |||
| them as a group leaving the Classifier responsible for balancing the | it can treat them as a group, leaving the classifier responsible for | |||
| load. | balancing the load. | |||
| SFP14: RD = 198.51.100.1/114, SPI = 28, | SFP14: RD = 198.51.100.1/114, SPI = 28, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/117, Assoc-SPI = 31, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/117, Assoc-SPI = 31, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/11], | [SI = 255, SFT = 41, RD = 192.0.2.1/11], | |||
| [SI = 254, SFT = 42, RD = 192.0.2.2/11], | [SI = 254, SFT = 42, RD = 192.0.2.2/11], | |||
| [SI = 253, SFT = 43, RD = 192.0.2.3/11] | [SI = 253, SFT = 43, RD = 192.0.2.3/11] | |||
| SFP15: RD = 198.51.100.1/115, SPI = 29, | SFP15: RD = 198.51.100.1/115, SPI = 29, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/118, Assoc-SPI = 32, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/118, Assoc-SPI = 32, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/11], | [SI = 255, SFT = 41, RD = 192.0.2.1/11], | |||
| skipping to change at page 50, line 7 ¶ | skipping to change at line 2236 ¶ | |||
| [SI = 253, SFT = 41, RD = 192.0.2.1/11] | [SI = 253, SFT = 41, RD = 192.0.2.1/11] | |||
| SFP19: RD = 198.51.100.1/119, SPI = 33, | SFP19: RD = 198.51.100.1/119, SPI = 33, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/116, Assoc-SPI = 30, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/116, Assoc-SPI = 30, | |||
| [SI = 255, SFT = 43, RD = 192.0.2.3/11], | [SI = 255, SFT = 43, RD = 192.0.2.3/11], | |||
| [SI = 254, SFT = 42, RD = 192.0.2.2/13], | [SI = 254, SFT = 42, RD = 192.0.2.2/13], | |||
| [SI = 253, SFT = 41, RD = 192.0.2.1/11] | [SI = 253, SFT = 41, RD = 192.0.2.1/11] | |||
| 8.9.3. Parallel End-to-End SFPs with Separate SFFs | 8.9.3. Parallel End-to-End SFPs with Separate SFFs | |||
| While the examples in Section 8.9.1 and Section 8.9.2 place the | While the examples in Sections 8.9.1 and 8.9.2 place the choice of | |||
| choice of SFI as subtended from the same SFF, it is also possible | SFI as subtended from the same SFF, it is also possible that the SFIs | |||
| that the SFIs are each subtended from a different SFF as shown in | are each subtended from a different SFF, as shown in Figure 13. In | |||
| Figure 13. In this case it is harder to coordinate the choices for | this case, it is harder to coordinate the choices for forward and | |||
| forward and reverse paths without some form of coordination between | reverse paths without some form of coordination between SFF1 and | |||
| SFF1 and SFF3. Therefore it would be normal to consider end-to-end | SFF3. Therefore, it would be normal to consider end-to-end parallel | |||
| parallel SFPs as described in Section 8.9.2. | SFPs, as described in Section 8.9.2. | |||
| ------ | ------ | |||
| | SFIa | | | SFIa | | |||
| |SFT=42| | |SFT=42| | |||
| ------ | ------ | |||
| ------ | | ------ | | |||
| | SFI | --------- | | SFI | --------- | |||
| |SFT=41| | SFF5 | | |SFT=41| | SFF5 | | |||
| ------ ..|192.0.2.5|.. | ------ ..|192.0.2.5|.. | |||
| | ..: --------- :.. | | ..: --------- :.. | |||
| skipping to change at page 50, line 44 ¶ | skipping to change at line 2273 ¶ | |||
| :.---------.: | :.---------.: | |||
| | SFF7 | | | SFF7 | | |||
| |192.0.2.7| | |192.0.2.7| | |||
| --------- | --------- | |||
| | | | | |||
| ------ | ------ | |||
| | SFIc | | | SFIc | | |||
| |SFT=42| | |SFT=42| | |||
| ------ | ------ | |||
| Figure 13: Second Example With Parallel End-to-End SFPs | Figure 13: Second Example with Parallel End-to-End SFPs | |||
| In this case, five SFIRs are advertised as follows: | In this case, five SFIRs are advertised as follows: | |||
| RD = 192.0.2.1/11, SFT = 41 | RD = 192.0.2.1/11, SFT = 41 | |||
| RD = 192.0.2.5/11, SFT = 42 (for SFIa) | RD = 192.0.2.5/11, SFT = 42 (for SFIa) | |||
| RD = 192.0.2.6/11, SFT = 42 (for SFIb) | RD = 192.0.2.6/11, SFT = 42 (for SFIb) | |||
| RD = 192.0.2.7/11, SFT = 42 (for SFIc) | RD = 192.0.2.7/11, SFT = 42 (for SFIc) | |||
| RD = 192.0.2.3/11, SFT = 43 | RD = 192.0.2.3/11, SFT = 43 | |||
| In this case the controller could specify three forward SFPs with | In this case, the controller could specify three forward SFPs with | |||
| their corresponding associated reverse SFPs. Each bidirectional pair | their corresponding associated reverse SFPs. Each bidirectional pair | |||
| of SFPs uses a different SFF and SFI for middle hop (for an SF of | of SFPs uses a different SFF and SFI for the middle hop (for an SF of | |||
| type 42). The controller can instruct the Classifier how to place | Type 42). The controller can instruct the classifier how to place | |||
| traffic on the three bidirectional SFPs, or can treat them as a group | traffic on the three bidirectional SFPs, or it can treat them as a | |||
| leaving the Classifier responsible for balancing the load. | group, leaving the classifier responsible for balancing the load. | |||
| SFP20: RD = 198.51.100.1/120, SPI = 34, | SFP20: RD = 198.51.100.1/120, SPI = 34, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/123, Assoc-SPI = 37, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/123, Assoc-SPI = 37, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/11], | [SI = 255, SFT = 41, RD = 192.0.2.1/11], | |||
| [SI = 254, SFT = 42, RD = 192.0.2.5/11], | [SI = 254, SFT = 42, RD = 192.0.2.5/11], | |||
| [SI = 253, SFT = 43, RD = 192.0.2.3/11] | [SI = 253, SFT = 43, RD = 192.0.2.3/11] | |||
| SFP21: RD = 198.51.100.1/121, SPI = 35, | SFP21: RD = 198.51.100.1/121, SPI = 35, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/124, Assoc-SPI = 38, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/124, Assoc-SPI = 38, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/11], | [SI = 255, SFT = 41, RD = 192.0.2.1/11], | |||
| skipping to change at page 52, line 46 ¶ | skipping to change at line 2331 ¶ | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/122, Assoc-SPI = 36, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/122, Assoc-SPI = 36, | |||
| [SI = 255, SFT = 43, RD = 192.0.2.3/11], | [SI = 255, SFT = 43, RD = 192.0.2.3/11], | |||
| [SI = 254, SFT = 42, RD = 192.0.2.7/11], | [SI = 254, SFT = 42, RD = 192.0.2.7/11], | |||
| [SI = 253, SFT = 41, RD = 192.0.2.1/11] | [SI = 253, SFT = 41, RD = 192.0.2.1/11] | |||
| 8.9.4. Parallel SFPs Downstream of the Choice | 8.9.4. Parallel SFPs Downstream of the Choice | |||
| The mechanism of parallel SFPs demonstrated in Section 8.9.3 is | The mechanism of parallel SFPs demonstrated in Section 8.9.3 is | |||
| perfectly functional and may be practical in many environments. | perfectly functional and may be practical in many environments. | |||
| However, there may be scaling concerns because of the large amount of | However, there may be scaling concerns because of the large amount of | |||
| state (knowledge of SFPs, i.e., SFPR advertisements retained) if | state (knowledge of SFPs -- i.e., SFPR advertisements retained) if | |||
| there is a very large amount of choice of SFIs (for example, tens of | there is a very large number of possible SFIs (for example, tens of | |||
| instances of the same stateful SF), or if there are multiple choices | instances of the same stateful SF) or if there are multiple choices | |||
| of stateful SF along a path. This situation may be mitigated using | of stateful SF along a path. This situation may be mitigated using | |||
| SFP fragments that are combined to form the end to end SFPs. | SFP fragments that are combined to form the end-to-end SFPs. | |||
| The example presented here is necessarily simplistic, but should | The example presented here is necessarily simplistic but should | |||
| convey the basic principle. The example presented in Figure 14 is | convey the basic principle. The example presented in Figure 14 is | |||
| similar to that in Section 8.9.3 but with an additional first hop. | similar to that in Section 8.9.3 but with an additional first hop. | |||
| ------ | ------ | |||
| | SFIa | | | SFIa | | |||
| |SFT=43| | |SFT=43| | |||
| ------ | ------ | |||
| ------ ------ | | ------ ------ | | |||
| | SFI | | SFI | --------- | | SFI | | SFI | --------- | |||
| |SFT=41| |SFT=42| | SFF5 | | |SFT=41| |SFT=42| | SFF5 | | |||
| skipping to change at page 53, line 38 ¶ | skipping to change at line 2370 ¶ | |||
| :.---------.: | :.---------.: | |||
| | SFF7 | | | SFF7 | | |||
| |192.0.2.7| | |192.0.2.7| | |||
| --------- | --------- | |||
| | | | | |||
| ------ | ------ | |||
| | SFIc | | | SFIc | | |||
| |SFT=43| | |SFT=43| | |||
| ------ | ------ | |||
| Figure 14: Example With Parallel SFPs Downstream of Choice | Figure 14: Example with Parallel SFPs Downstream of Choice | |||
| The six SFIs are advertised as follows: | The six SFIs are advertised as follows: | |||
| RD = 192.0.2.1/11, SFT = 41 | RD = 192.0.2.1/11, SFT = 41 | |||
| RD = 192.0.2.2/11, SFT = 42 | RD = 192.0.2.2/11, SFT = 42 | |||
| RD = 192.0.2.5/11, SFT = 43 (for SFIa) | RD = 192.0.2.5/11, SFT = 43 (for SFIa) | |||
| RD = 192.0.2.6/11, SFT = 43 (for SFIb) | RD = 192.0.2.6/11, SFT = 43 (for SFIb) | |||
| RD = 192.0.2.7/11, SFT = 43 (for SFIc) | RD = 192.0.2.7/11, SFT = 43 (for SFIc) | |||
| RD = 192.0.2.3/11, SFT = 44 | RD = 192.0.2.3/11, SFT = 44 | |||
| SFF2 is the point at which a load balancing choice must be made. So | SFF2 is the point at which a load-balancing choice must be made. So | |||
| "tail-end" SFPs are constructed as follows. Each takes in a | "tail-end" SFPs are constructed as follows. Each takes in a | |||
| different SFF that provides access to an SF of type 43. | different SFF that provides access to an SF of Type 43. | |||
| SFP26: RD = 198.51.100.1/126, SPI = 40, | SFP26: RD = 198.51.100.1/126, SPI = 40, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/130, Assoc-SPI = 44, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/130, Assoc-SPI = 44, | |||
| [SI = 255, SFT = 43, RD = 192.0.2.5/11], | [SI = 255, SFT = 43, RD = 192.0.2.5/11], | |||
| [SI = 254, SFT = 44, RD = 192.0.2.3/11] | [SI = 254, SFT = 44, RD = 192.0.2.3/11] | |||
| SFP27: RD = 198.51.100.1/127, SPI = 41, | SFP27: RD = 198.51.100.1/127, SPI = 41, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/131, Assoc-SPI = 45, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/131, Assoc-SPI = 45, | |||
| [SI = 255, SFT = 43, RD = 192.0.2.6/11], | [SI = 255, SFT = 43, RD = 192.0.2.6/11], | |||
| [SI = 254, SFT = 44, RD = 192.0.2.3/11] | [SI = 254, SFT = 44, RD = 192.0.2.3/11] | |||
| SFP28: RD = 198.51.100.1/128, SPI = 42, | SFP28: RD = 198.51.100.1/128, SPI = 42, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/132, Assoc-SPI = 46, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/132, Assoc-SPI = 46, | |||
| [SI = 255, SFT = 43, RD = 192.0.2.7/11], | [SI = 255, SFT = 43, RD = 192.0.2.7/11], | |||
| [SI = 254, SFT = 44, RD = 192.0.2.3/11] | [SI = 254, SFT = 44, RD = 192.0.2.3/11] | |||
| Now an end-to-end SFP with load balancing choice can be constructed | Now an end-to-end SFP with load-balancing choice can be constructed | |||
| as follows. The choice made by SFF2 is expressed in terms of | as follows. The choice made by SFF2 is expressed in terms of | |||
| entering one of the three "tail end" SFPs. | entering one of the three "tail-end" SFPs. | |||
| SFP29: RD = 198.51.100.1/129, SPI = 43, | SFP29: RD = 198.51.100.1/129, SPI = 43, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/11], | [SI = 255, SFT = 41, RD = 192.0.2.1/11], | |||
| [SI = 254, SFT = 42, RD = 192.0.2.2/11], | [SI = 254, SFT = 42, RD = 192.0.2.2/11], | |||
| [SI = 253, {SFT = 1, RD = {SPI=40, SI=255, Rsv=0}, | [SI = 253, {SFT = 1, RD = {SPI=40, SI=255, Rsv=0}, | |||
| RD = {SPI=41, SI=255, Rsv=0}, | RD = {SPI=41, SI=255, Rsv=0}, | |||
| RD = {SPI=42, SI=255, Rsv=0} } ] | RD = {SPI=42, SI=255, Rsv=0} } ] | |||
| Now, despite the load balancing choice being made other than at the | Now, despite the load-balancing choice being made elsewhere than at | |||
| initial Classifier, it is possible for the reverse SFPs to be well- | the initial classifier, it is possible for the reverse SFPs to be | |||
| constructed without any ambiguity. The three reverse paths appear as | well constructed without any ambiguity. The three reverse paths | |||
| follows. | appear as follows. | |||
| SFP30: RD = 198.51.100.1/130, SPI = 44, | SFP30: RD = 198.51.100.1/130, SPI = 44, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/126, Assoc-SPI = 40, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/126, Assoc-SPI = 40, | |||
| [SI = 255, SFT = 44, RD = 192.0.2.4/11], | [SI = 255, SFT = 44, RD = 192.0.2.4/11], | |||
| [SI = 254, SFT = 43, RD = 192.0.2.5/11], | [SI = 254, SFT = 43, RD = 192.0.2.5/11], | |||
| [SI = 253, SFT = 42, RD = 192.0.2.2/11], | [SI = 253, SFT = 42, RD = 192.0.2.2/11], | |||
| [SI = 252, SFT = 41, RD = 192.0.2.1/11] | [SI = 252, SFT = 41, RD = 192.0.2.1/11] | |||
| SFP31: RD = 198.51.100.1/131, SPI = 45, | SFP31: RD = 198.51.100.1/131, SPI = 45, | |||
| Assoc-Type = 1, Assoc-RD = 198.51.100.1/127, Assoc-SPI = 41, | Assoc-Type = 1, Assoc-RD = 198.51.100.1/127, Assoc-SPI = 41, | |||
| skipping to change at page 55, line 44 ¶ | skipping to change at line 2455 ¶ | |||
| Assume we have a service function overlay network with four SFFs | Assume we have a service function overlay network with four SFFs | |||
| (SFF1, SFF3, SFF3, and SFF4). The SFFs have addresses in the | (SFF1, SFF3, SFF3, and SFF4). The SFFs have addresses in the | |||
| underlay network as follows: | underlay network as follows: | |||
| SFF1 2001:db8::192:0:2:1 | SFF1 2001:db8::192:0:2:1 | |||
| SFF2 2001:db8::192:0:2:2 | SFF2 2001:db8::192:0:2:2 | |||
| SFF3 2001:db8::192:0:2:3 | SFF3 2001:db8::192:0:2:3 | |||
| SFF4 2001:db8::192:0:2:4 | SFF4 2001:db8::192:0:2:4 | |||
| Each SFF provides access to some SFIs from the four Service Function | Each SFF provides access to some SFIs from the four service function | |||
| Types SFT=41, SFT=42, SFT=43, and SFT=44 just as before: | types SFT=41, SFT=42, SFT=43, and SFT=44, just as before: | |||
| SFF1 SFT=41 and SFT=42 | SFF1 SFT=41 and SFT=42 | |||
| SFF2 SFT=41 and SFT=43 | SFF2 SFT=41 and SFT=43 | |||
| SFF3 SFT=42 and SFT=44 | SFF3 SFT=42 and SFT=44 | |||
| SFF4 SFT=43 and SFT=44 | SFF4 SFT=43 and SFT=44 | |||
| The service function network also contains a Controller with address | The service function network also contains a controller with address | |||
| 2001:db8::198:51:100:1. | 2001:db8::198:51:100:1. | |||
| This example service function overlay network is shown in Figure 15. | This example service function overlay network is shown in Figure 15. | |||
| ------------------------ | ------------------------ | |||
| | Controller | | | Controller | | |||
| | 2001:db8::198:51:100:1 | | | 2001:db8::198:51:100:1 | | |||
| ------------------------ | ------------------------ | |||
| ------ ------ ------ ------ | ------ ------ ------ ------ | |||
| | SFI | | SFI | | SFI | | SFI | | | SFI | | SFI | | SFI | | SFI | | |||
| skipping to change at page 56, line 46 ¶ | skipping to change at line 2499 ¶ | |||
| ------------------- ------------------- | ------------------- ------------------- | |||
| / \ / \ | / \ / \ | |||
| ------ ------ ------ ------ | ------ ------ ------ ------ | |||
| | SFI | | SFI | | SFI | | SFI | | | SFI | | SFI | | SFI | | SFI | | |||
| |SFT=42| |SFT=44| |SFT=43| |SFT=44| | |SFT=42| |SFT=44| |SFT=43| |SFT=44| | |||
| ------ ------ ------ ------ | ------ ------ ------ ------ | |||
| Figure 15: Example Service Function Overlay Network | Figure 15: Example Service Function Overlay Network | |||
| The SFFs advertise routes to the SFIs they support. These | The SFFs advertise routes to the SFIs they support. These | |||
| advertisements contain Route Distinguishers that are set according to | advertisements contain RDs that are set according to the network | |||
| the network operator's configuration model. Note that in an IPv6 | operator's configuration model. Note that in an IPv6 network, the RD | |||
| network, the RD is not large enough to contain the full IPv6 address | is not large enough to contain the full IPv6 address, as only six | |||
| as only six octets are available so, in all of these IPv6 examples, | octets are available. So, in all of these IPv6 examples, we use RDs | |||
| we use RDs of type 1 such that the available six octets are | of Type 1 such that the available six octets are partitioned as four | |||
| partitioned as four octets for an IPv4 address of the advertising | octets for an IPv4 address of the advertising SFF, and two octets | |||
| SFF, and two octets that are a local index of the SFI. Furthermore, | that are a local index of the SFI. Furthermore, we have chosen an | |||
| we have chosen an IPv6 addressing scheme so that the low order four | IPv6 addressing scheme so that the low-order four octets of the IPv6 | |||
| octets of the IPv6 address match an IPv4 address of the advertising | address match an IPv4 address of the advertising node. This scheme | |||
| node. This scheme is chosen purely for convenience of documentation, | is chosen purely for convenience of documentation, and an operator is | |||
| and an operator is totally free to use any other scheme so long as it | totally free to use any other scheme so long as it conforms to the | |||
| conforms to the definitions of SFIR and SFPR in Section 3.1 and | definitions of SFIR and SFPR in Sections 3.1 and 3.2. | |||
| Section 3.2. | ||||
| Observant readers will notice that this makes the BGP advertisements | Observant readers will notice that this makes the BGP advertisements | |||
| shown in these examples exactly the same as in the previous examples. | shown in these examples exactly the same as in the previous examples. | |||
| All that is different is that the advertising SFFs and Controller | All that is different is that the advertising SFFs and controller | |||
| have IPv6 addresses. | have IPv6 addresses. | |||
| Thus we see the following SFIRs advertised: | Thus, we see the following SFIRs advertised. | |||
| The SFFs advertise routes to the SFIs they support. So we see the | The SFFs advertise routes to the SFIs they support. So we see the | |||
| following SFIRs: | following SFIRs: | |||
| RD = 192.0.2.1/1, SFT = 41 | RD = 192.0.2.1/1, SFT = 41 | |||
| RD = 192.0.2.1/2, SFT = 42 | RD = 192.0.2.1/2, SFT = 42 | |||
| RD = 192.0.2.2/1, SFT = 41 | RD = 192.0.2.2/1, SFT = 41 | |||
| RD = 192.0.2.2/2, SFT = 43 | RD = 192.0.2.2/2, SFT = 43 | |||
| RD = 192.0.2.3/7, SFT = 42 | RD = 192.0.2.3/7, SFT = 42 | |||
| RD = 192.0.2.3/8, SFT = 44 | RD = 192.0.2.3/8, SFT = 44 | |||
| RD = 192.0.2.4/5, SFT = 43 | RD = 192.0.2.4/5, SFT = 43 | |||
| RD = 192.0.2.4/6, SFT = 44 | RD = 192.0.2.4/6, SFT = 44 | |||
| Note that the addressing used for communicating between SFFs is taken | Note that the addressing used for communicating between SFFs is taken | |||
| from the Tunnel Encapsulation attribute of the SFIR and not from the | from the tunnel encapsulation attribute of the SFIR and not from the | |||
| SFIR-RD. | SFIR-RD. | |||
| 8.10.1. Example Explicit SFP With No Choices | 8.10.1. Example Explicit SFP with No Choices | |||
| Consider the following SFPR similar to that in Section 8.1. | Consider the following SFPR similar to that in Section 8.1. | |||
| SFP1: RD = 198.51.100.1/101, SPI = 15, | SFP1: RD = 198.51.100.1/101, SPI = 15, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 43, RD = 192.0.2.2/2] | [SI = 250, SFT = 43, RD = 192.0.2.2/2] | |||
| The Service Function Path consists of an SF of type 41 located at | The SFP consists of an SF of Type 41 located at SFF1, followed by an | |||
| SFF1 followed by an SF of type 43 located at SFF2. This path is | SF of Type 43 located at SFF2. This path is fully explicit, and each | |||
| fully explicit and each SFF is offered no choice in forwarding packet | SFF is offered no choice in forwarding a packet along the path. | |||
| along the path. | ||||
| SFF1 will receive packets on the path from the Classifier and will | SFF1 will receive packets on the path from the classifier and will | |||
| identify the path from the SPI (15). The initial SI will be 255 and | identify the path from the SPI (15). The initial SI will be 255, and | |||
| so SFF1 will deliver the packets to the SFI for SFT 41. | so SFF1 will deliver the packets to the SFI for SFT 41. | |||
| When the packets are returned to SFF1 by the SFI the SI will be | When the packets are returned to SFF1 by the SFI, the SI will be | |||
| decreased to 250 for the next hop. SFF1 has no flexibility in the | decreased to 250 for the next hop. SFF1 has no flexibility in the | |||
| choice of SFF to support the next hop SFI and will forward the packet | choice of SFF to support the next-hop SFI and will forward the packet | |||
| to SFF2 which will send the packets to the SFI that supports SFT 43 | to SFF2, which will send the packets to the SFI that supports SFT 43 | |||
| before forwarding the packets to their destinations. | before forwarding the packets to their destinations. | |||
| 8.10.2. Example SFP With Choice of SFIs | 8.10.2. Example SFP with Choice of SFIs | |||
| SFP2: RD = 198.51.100.1/102, SPI = 16, | SFP2: RD = 198.51.100.1/102, SPI = 16, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 43, {RD = 192.0.2.2/2, | [SI = 250, SFT = 43, {RD = 192.0.2.2/2, | |||
| RD = 192.0.2.4/5 } ] | RD = 192.0.2.4/5 } ] | |||
| In this example, like that in Section 8.2, the path also consists of | In this example, like that in Section 8.2, the path also consists of | |||
| an SF of type 41 located at SFF1 and this is followed by an SF of | an SF of Type 41 located at SFF1, and this is followed by an SF of | |||
| type 43, but in this case the SI = 250 contains a choice between the | Type 43; but in this case, the SI = 250 contains a choice between the | |||
| SFI located at SFF2 and the SFI located at SFF4. | SFI located at SFF2 and the SFI located at SFF4. | |||
| SFF1 will receive packets on the path from the Classifier and will | SFF1 will receive packets on the path from the classifier and will | |||
| identify the path from the SPI (16). The initial SI will be 255 and | identify the path from the SPI (16). The initial SI will be 255, and | |||
| so SFF1 will deliver the packets to the SFI for SFT 41. | so SFF1 will deliver the packets to the SFI for SFT 41. | |||
| When the packets are returned to SFF1 by the SFI the SI will be | When the packets are returned to SFF1 by the SFI, the SI will be | |||
| decreased to 250 for the next hop. SFF1 now has a choice of next hop | decreased to 250 for the next hop. SFF1 now has a choice of next-hop | |||
| SFF to execute the next hop in the path. It can either forward | SFFs to execute the next hop in the path. It can either forward | |||
| packets to SFF2 or SFF4 to execute a function of type 43. It uses | packets to SFF2 or SFF4 to execute a function of Type 43. It uses | |||
| its local load balancing algorithm to make this choice. The chosen | its local load-balancing algorithm to make this choice. The chosen | |||
| SFF will send the packets to the SFI that supports SFT 43 before | SFF will send the packets to the SFI that supports SFT 43 before | |||
| forwarding the packets to their destinations. | forwarding the packets to their destinations. | |||
| 8.10.3. Example SFP With Open Choice of SFIs | 8.10.3. Example SFP with Open Choice of SFIs | |||
| SFP3: RD = 198.51.100.1/103, SPI = 17, | SFP3: RD = 198.51.100.1/103, SPI = 17, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, SFT = 44, RD = 0] | [SI = 250, SFT = 44, RD = 0] | |||
| In this example, like that in Section 8.3 the path also consists of | In this example, like that in Section 8.3, the path also consists of | |||
| an SF of type 41 located at SFF1 and this is followed by an SI with | an SF of Type 41 located at SFF1, and this is followed by an SI with | |||
| an RD of zero and SF of type 44. This means that a choice can be | an RD of zero and SF of Type 44. This means that a choice can be | |||
| made between any SFF that supports an SFI of type 44. | made between any SFF that supports an SFI of Type 44. | |||
| SFF1 will receive packets on the path from the Classifier and will | SFF1 will receive packets on the path from the classifier and will | |||
| identify the path from the SPI (17). The initial SI will be 255 and | identify the path from the SPI (17). The initial SI will be 255, and | |||
| so SFF1 will deliver the packets to the SFI for SFT 41. | so SFF1 will deliver the packets to the SFI for SFT 41. | |||
| When the packets are returned to SFF1 by the SFI the SI will be | When the packets are returned to SFF1 by the SFI, the SI will be | |||
| decreased to 250 for the next hop. SFF1 now has a free choice of | decreased to 250 for the next hop. SFF1 now has a free choice of | |||
| next hop SFF to execute the next hop in the path selecting between | next-hop SFFs to execute the next hop in the path, selecting between | |||
| all SFFs that support SFs of type 44. Looking at the SFIRs it has | all SFFs that support SFs of Type 44. Looking at the SFIRs it has | |||
| received, SFF1 knows that SF type 44 is supported by SFF3 and SFF4. | received, SFF1 knows that SF Type 44 is supported by SFF3 and SFF4. | |||
| SFF1 uses its local load balancing algorithm to make this choice. | SFF1 uses its local load-balancing algorithm to make this choice. | |||
| The chosen SFF will send the packets to the SFI that supports SFT 44 | The chosen SFF will send the packets to the SFI that supports SFT 44 | |||
| before forwarding the packets to their destinations. | before forwarding the packets to their destinations. | |||
| 8.10.4. Example SFP With Choice of SFTs | 8.10.4. Example SFP with Choice of SFTs | |||
| SFP4: RD = 198.51.100.1/104, SPI = 18, | SFP4: RD = 198.51.100.1/104, SPI = 18, | |||
| [SI = 255, SFT = 41, RD = 192.0.2.1/1], | [SI = 255, SFT = 41, RD = 192.0.2.1/1], | |||
| [SI = 250, {SFT = 43, RD = 192.0.2.2/2, | [SI = 250, {SFT = 43, RD = 192.0.2.2/2, | |||
| SFT = 44, RD = 192.0.2.3/8 } ] | SFT = 44, RD = 192.0.2.3/8 } ] | |||
| This example, similar to that in Section 8.4 provides a choice of SF | This example, similar to that in Section 8.4, provides a choice of SF | |||
| type in the second hop in the path. The SI of 250 indicates a choice | type in the second hop in the path. The SI of 250 indicates a choice | |||
| between SF type 43 located through SF2 and SF type 44 located at SF3. | between SF Type 43 located through SF2 and SF Type 44 located at SF3. | |||
| SFF1 will receive packets on the path from the Classifier and will | SFF1 will receive packets on the path from the classifier and will | |||
| identify the path from the SPI (18). The initial SI will be 255 and | identify the path from the SPI (18). The initial SI will be 255, and | |||
| so SFF1 will deliver the packets to the SFI for SFT 41. | so SFF1 will deliver the packets to the SFI for SFT 41. | |||
| When the packets are returned to SFF1 by the SFI the SI will be | When the packets are returned to SFF1 by the SFI, the SI will be | |||
| decreased to 250 for the next hop. SFF1 now has a free choice of | decreased to 250 for the next hop. SFF1 now has a free choice of | |||
| next hop SFF to execute the next hop in the path selecting between | next-hop SFFs to execute the next hop in the path, selecting between | |||
| all SFFs that support an SF of type 43 and SFF3 that supports an SF | all SFFs that support an SF of Type 43 and SFF3, which supports an SF | |||
| of type 44. These may be completely different functions that are to | of Type 44. These may be completely different functions that are to | |||
| be executed dependent on specific conditions, or may be similar | be executed dependent on specific conditions, or they may be similar | |||
| functions identified with different type identifiers (such as | functions identified with different type identifiers (such as | |||
| firewalls from different vendors). SFF1 uses its local policy and | firewalls from different vendors). SFF1 uses its local policy and | |||
| load balancing algorithm to make this choice, and may use additional | load-balancing algorithm to make this choice, and it may use | |||
| information passed back from the local SFI to help inform its | additional information passed back from the local SFI to help inform | |||
| selection. The chosen SFF will send the packets to the SFI that | its selection. The chosen SFF will send the packets to the SFI that | |||
| supports the chose SFT before forwarding the packets to their | supports the chosen SFT before forwarding the packets to their | |||
| destinations. | destinations. | |||
| 9. Security Considerations | 9. Security Considerations | |||
| The mechanisms in this document use BGP for the control plane. | The mechanisms in this document use BGP for the control plane. | |||
| Hence, techniques such as those discussed in [RFC5925]] can be used | Hence, techniques such as those discussed in [RFC5925] can be used to | |||
| to help authenticate BGP sessions and thus the messages between BGP | help authenticate BGP sessions and, thus, the messages between BGP | |||
| peers, making it harder to spoof updates (which could be used to | peers, making it harder to spoof updates (which could be used to | |||
| install bogus SFPs or to advertise false SIs) or withdrawals. | install bogus SFPs or advertise false SIs) or withdrawals. | |||
| Further discussion of security considerations for BGP may be found in | Further discussion of security considerations for BGP may be found in | |||
| the BGP specification itself [RFC4271] and in the security analysis | the BGP specification itself [RFC4271] and the security analysis for | |||
| for BGP [RFC4272]. The original discussion of the use of the TCP MD5 | BGP [RFC4272]. [RFC5925] contains a discussion of the | |||
| signature option to protect BGP sessions is found in [RFC5925], while | inappropriateness of the TCP MD5 signature option for protecting BGP | |||
| [RFC6952] includes an analysis of BGP keying and authentication | sessions. [RFC6952] includes an analysis of BGP keying and | |||
| issues. | authentication issues. | |||
| Additionally, this document depends on other documents that specify | Additionally, this document depends on other documents that specify | |||
| BGP Multiprotocol Extensions and the documents that define the | BGP Multiprotocol Extensions and the documents that define the | |||
| attributes that are carried by BGP UPDATEs of the SFC AFI/SAFI. | attributes that are carried by BGP UPDATEs of the SFC AFI/SAFI. | |||
| [RFC4760] observes that the use of AFI/SAFI does not change the | [RFC4760] observes that the use of AFI/SAFI does not change the | |||
| underlying security issues inherent in the existing BGP. Relevant | underlying security issues inherent in the existing BGP. Relevant | |||
| additional security measures are considered in | additional security measures are considered in [RFC9012]. | |||
| [I-D.ietf-idr-tunnel-encaps]. | ||||
| This document does not fundamentally change the security behavior of | This document does not fundamentally change the security behavior of | |||
| BGP deployments, which depend considerably on the network operator's | BGP deployments, which depend considerably on the network operator's | |||
| perception of risk in their network. It may be observed that the | perception of risk in their network. It may be observed that the | |||
| application of the mechanisms described in this document are scoped | application of the mechanisms described in this document is scoped to | |||
| to a single domain as implied by [RFC8300] noted in Section 2.1 of | a single domain, as implied by [RFC8300] and noted in Section 2.1 of | |||
| this document. Applicability of BGP within a single domain may | this document. Applicability of BGP within a single domain may | |||
| enable a network operator to make easier and more consistent | enable a network operator to make easier and more consistent | |||
| decisions about what security measures to apply, and the domain | decisions about what security measures to apply, and the domain | |||
| boundary, which BGP enforces by definition, provides a safeguard that | boundary, which BGP enforces by definition, provides a safeguard that | |||
| prevents leakage of SFC programming in either direction at the | prevents leakage of SFC programming in either direction at the | |||
| boundary. | boundary. | |||
| Service Function Chaining provides a significant attack opportunity: | Service function chaining provides a significant attack opportunity; | |||
| packets can be diverted from their normal paths through the network, | packets can be diverted from their normal paths through the network, | |||
| packets can be made to execute unexpected functions, and the | packets can be made to execute unexpected functions, and the | |||
| functions that are instantiated in software can be subverted. | functions that are instantiated in software can be subverted. | |||
| However, this specification does not change the existence of Service | However, this specification does not change the existence of service | |||
| Function Chaining and security issues specific to Service Function | function chaining, and security issues specific to service function | |||
| Chaining are covered in [RFC7665] and [RFC8300]. | chaining are covered in [RFC7665] and [RFC8300]. | |||
| This document defines a control plane for Service Function Chaining. | This document defines a control plane for service function chaining. | |||
| Clearly, this provides an attack vector for a Service Function | Clearly, this provides an attack vector for a service function | |||
| Chaining system as an attack on this control plane could be used to | chaining system, as an attack on this control plane could be used to | |||
| make the system misbehave. Thus, the security of the BGP system is | make the system misbehave. Thus, the security of the BGP system is | |||
| critically important to the security of the whole Service Function | critically important to the security of the whole service function | |||
| Chaining system. The control plane mechanisms are very similar to | chaining system. The control plane mechanisms are very similar to | |||
| those used for BGP/MPLS IP VPNs as described in [RFC4364], and so the | those used for BGP/MPLS IP VPNs as described in [RFC4364], and so the | |||
| security considerations in that document (Section 13) provide good | security considerations in that document (Section 13) provide good | |||
| guidance for securing SFC systems reliant on this specification. Of | guidance for securing service function chaining systems reliant on | |||
| particular relevance is the need to securely distinguish between | this specification. Of particular relevance is the need to securely | |||
| messages intended for the control of different SFC overlays which is | distinguish between messages intended for the control of different | |||
| similar to the need to distinguish between different VPNs. | SFC overlays, which is similar to the need to distinguish between | |||
| Section 19 of [RFC7432] also provides useful guidance on the use of | different VPNs. Section 19 of [RFC7432] also provides useful | |||
| BGP in a similar environment. | guidance on the use of BGP in a similar environment. | |||
| Note that a component of an SFC system that uses the procedures | Note that a component of a service function chaining system that uses | |||
| described in this document also requires communications between a | the procedures described in this document also requires | |||
| Controller and the SFC network elements (specifically the SFFs and | communications between a controller and the service function chaining | |||
| Classifiers). This communication covers instructing the Classifiers | network elements (specifically the SFFs and classifiers). This | |||
| using BGP mechanisms (see Section 7.4), thus the use of BGP security | communication covers instructing the classifiers using BGP mechanisms | |||
| is strongly recommended. But it also covers other mechanisms for | (see Section 7.4); therefore, the use of BGP security is strongly | |||
| programming the Classifier and instructing the SFFs and SFs (for | recommended. But it also covers other mechanisms for programming the | |||
| example, to bind SFs to an SFF, and to cause the establishment of | classifier and instructing the SFFs and SFs (for example, to bind SFs | |||
| tunnels between SFFs). This document does not cover these latter | to an SFF, and to cause the establishment of tunnels between SFFs). | |||
| mechanisms and so their security is out of scope, but it should be | This document does not cover these latter mechanisms, and so their | |||
| noted that these communications provide an attack vector on the SFC | security is out of scope, but it should be noted that these | |||
| system and so attention must be paid to ensuring that they are | communications provide an attack vector on the service function | |||
| secure. | chaining system, and so attention must be paid to ensuring that they | |||
| are secure. | ||||
| There is an intrinsic assumption in SFC systems that nodes that | There is an intrinsic assumption in service function chaining systems | |||
| announce support for specific SFs actually offer those functions, and | that nodes that announce support for specific SFs actually offer | |||
| that SFs are not, themselves, attacked or subverted. This is | those functions and that SFs are not, themselves, attacked or | |||
| particularly important when the SFs are implemented as software that | subverted. This is particularly important when the SFs are | |||
| can be updated. Protection against this sort of concern forms part | implemented as software that can be updated. Protection against this | |||
| of the security of any SFC system and so is outside the scope of the | sort of concern forms part of the security of any service function | |||
| control plane mechanisms described in this document. | chaining system and so is outside the scope of the control plane | |||
| mechanisms described in this document. | ||||
| Similarly, there is a vulnerability if a rogue or subverted | Similarly, there is a vulnerability if a rogue or subverted | |||
| Controller announces SFPs especially if that controller "takes over" | controller announces SFPs, especially if that controller "takes over" | |||
| an existing SFP and changes its contents. This is corresponds to a | an existing SFP and changes its contents. This corresponds to a | |||
| rogue BGP speaker entering a routing system, or even to a Route | rogue BGP speaker entering a routing system, or even a Route | |||
| Reflector becoming subverted. Protection mechanisms, as above, | Reflector becoming subverted. Protection mechanisms, as above, | |||
| include securing BGP sessions and protecting software loads on the | include securing BGP sessions and protecting software loads on the | |||
| controllers. | controllers. | |||
| In an environment where there is concern that rogue Controllers might | In an environment where there is concern that rogue controllers might | |||
| be introduced to the network and inject false SFPRs or take over and | be introduced to the network and inject false SFPRs or take over and | |||
| change existing SFPRs, it is RECOMMENDED that each SFF and Classifier | change existing SFPRs, it is RECOMMENDED that each SFF and classifier | |||
| be configured with the identities of authorized Controllers. Thus, | be configured with the identities of authorized controllers. Thus, | |||
| the announcement of an SFPR by any other BGP peer would be rejected. | the announcement of an SFPR by any other BGP peer would be rejected. | |||
| Lastly, note that Section 3.2.2 makes two operational suggestions | Lastly, note that Section 3.2.2 makes two operational suggestions | |||
| that have implications for the stability and security of the | that have implications for the stability and security of the | |||
| mechanisms described in this document: | mechanisms described in this document: | |||
| o That modifications to active SFPs not be made. | * That modifications to active SFPs not be made. | |||
| o That SPIs not be immediately re-used. | * That SPIs not be immediately reused. | |||
| 10. IANA Considerations | 10. IANA Considerations | |||
| 10.1. New BGP AF/SAFI | 10.1. New BGP AF/SAFI | |||
| IANA maintains a registry of "Address Family Numbers". IANA is | IANA maintains the "Address Family Numbers" registry. IANA has | |||
| requested to assign a new Address Family Number from the "Standards | assigned a new Address Family Number from the "Standards Action" | |||
| Action" range called "BGP SFC" (TBD1 in this document) with this | range called "BGP SFC" (31), with this document as a reference. | |||
| document as a reference. | ||||
| IANA maintains a registry of "Subsequent Address Family Identifiers | IANA maintains the "Subsequent Address Family Identifiers (SAFI) | |||
| (SAFI) Parameters". IANA is requested to assign a new SAFI value | Parameters" registry. IANA has assigned a new SAFI value from the | |||
| from the "Standards Action" range called "BGP SFC" (TBD2 in this | "Standards Action" range called "BGP SFC" (9), with this document as | |||
| document) with this document as a reference. | a reference. | |||
| 10.2. New BGP Path Attribute | 10.2. "SFP attribute" BGP Path Attribute | |||
| IANA maintains a registry of "Border Gateway Protocol (BGP) | IANA maintains a registry of "Border Gateway Protocol (BGP) | |||
| Parameters" with a subregistry of "BGP Path Attributes". IANA is | Parameters" with a subregistry of "BGP Path Attributes". IANA has | |||
| requested to assign a new Path attribute called "SFP attribute" (TBD3 | assigned a new Path attribute called "SFP attribute" with a value of | |||
| in this document) with this document as a reference. | 37 and with this document as a reference. | |||
| 10.3. New SFP Attribute TLVs Type Registry | 10.3. "SFP Attribute TLVs" Registry | |||
| IANA maintains a registry of "Border Gateway Protocol (BGP) | IANA maintains a registry of "Border Gateway Protocol (BGP) | |||
| Parameters". IANA is request to create a new subregistry called the | Parameters". IANA has created a new subregistry called the "SFP | |||
| "SFP Attribute TLVs" registry. | Attribute TLVs" registry. | |||
| Valid values are in the range 0 to 65535. | Valid values are in the range 0 to 65535. | |||
| o Values 0 and 65535 are to be marked "Reserved, not to be | * Values 0 and 65535 are marked "Reserved". | |||
| allocated". | ||||
| o Values 1 through 65534 are to be assigned according to the "First | * Values 1 through 65534 are to be assigned according to the "First | |||
| Come First Served" policy [RFC8126]. | Come First Served" policy [RFC8126]. | |||
| This document should be given as a reference for this registry. | This document is a reference for this registry. | |||
| The new registry should track: | The registry tracks: | |||
| o Type | * Type | |||
| o Name | ||||
| o Reference Document or Contact | * Name | |||
| o Registration Date | * Reference | |||
| The registry should initially be populated as follows: | * Registration Date | |||
| Type | Name | Reference | Date | The registry is initially populated as follows: | |||
| ------+-------------------------+---------------+--------------- | ||||
| 1 | Association TLV | [This.I-D] | Date-to-be-set | ||||
| 2 | Hop TLV | [This.I-D] | Date-to-be-set | ||||
| 3 | SFT TLV | [This.I-D] | Date-to-be-set | ||||
| 4 | MPLS Swapping/Stacking | [This.I-D] | Date-to-be-set | ||||
| 5 | SFP Traversal With MPLS | [This.I-D] | Date-to-be-set | ||||
| 10.4. New SFP Association Type Registry | +======+=========================+===========+===================+ | |||
| | Type | Name | Reference | Registration Date | | ||||
| +======+=========================+===========+===================+ | ||||
| | 1 | Association TLV | RFC 9015 | 2020-09-02 | | ||||
| +------+-------------------------+-----------+-------------------+ | ||||
| | 2 | Hop TLV | RFC 9015 | 2020-09-02 | | ||||
| +------+-------------------------+-----------+-------------------+ | ||||
| | 3 | SFT TLV | RFC 9015 | 2020-09-02 | | ||||
| +------+-------------------------+-----------+-------------------+ | ||||
| | 4 | MPLS Swapping/Stacking | RFC 9015 | 2020-09-02 | | ||||
| +------+-------------------------+-----------+-------------------+ | ||||
| | 5 | SFP Traversal With MPLS | RFC 9015 | 2020-09-02 | | ||||
| +------+-------------------------+-----------+-------------------+ | ||||
| Table 1: SFP Attribute TLVs Subregistry Initial Contents | ||||
| 10.4. "SFP Association Type" Registry | ||||
| IANA maintains a registry of "Border Gateway Protocol (BGP) | IANA maintains a registry of "Border Gateway Protocol (BGP) | |||
| Parameters". IANA is request to create a new subregistry called the | Parameters". IANA has created a new subregistry called the "SFP | |||
| "SFP Association Type" registry. | Association Type" registry. | |||
| Valid values are in the range 0 to 65535. | Valid values are in the range 0 to 65535. | |||
| o Values 0 and 65535 are to be marked "Reserved, not to be | * Values 0 and 65535 are marked "Reserved". | |||
| allocated". | ||||
| o Values 1 through 65534 are to be assigned according to the "First | * Values 1 through 65534 are assigned according to the "First Come | |||
| Come First Served" policy [RFC8126]. | First Served" policy [RFC8126]. | |||
| This document should be given as a reference for this registry. | This document is given as a reference for this registry. | |||
| The new registry should track: | The new registry tracks: | |||
| o Association Type | * Association Type | |||
| o Name | * Name | |||
| o Reference Document or Contact | * Reference | |||
| o Registration Date | * Registration Date | |||
| The registry should initially be populated as follows: | The registry should initially be populated as follows: | |||
| Association Type | Name | Reference | Date | +==================+===================+===========+============+ | |||
| -----------------+--------------------+------------+--------------- | | Association Type | Name | Reference | Date | | |||
| 1 | Bidirectional SFP | [This.I-D] | Date-to-be-set | +==================+===================+===========+============+ | |||
| | 1 | Bidirectional SFP | RFC 9015 | 2020-09-02 | | ||||
| +------------------+-------------------+-----------+------------+ | ||||
| 10.5. New Service Function Type Registry | Table 2: SFP Association Type Subregistry Initial Contents | |||
| IANA is request to create a new top-level registry called "Service | 10.5. "Service Function Chaining Service Function Types" Registry | |||
| Function Chaining Service Function Types". | ||||
| IANA has created a new top-level registry called "Service Function | ||||
| Chaining Service Function Types". | ||||
| Valid values are in the range 0 to 65535. | Valid values are in the range 0 to 65535. | |||
| o Values 0 and 65535 are to be marked "Reserved, not to be | * Values 0 and 65535 are marked "Reserved". | |||
| allocated". | ||||
| o Values 1 through 31 are to be assigned by "Standards Action" | * Values 1 through 31 are to be assigned by "Standards Action" | |||
| [RFC8126] and are referred to as the Special Purpose SFT values. | [RFC8126] and are referred to as the "special-purpose SFT values". | |||
| o Values 32 through 64495 are to be assigned according to the "First | * Values 32 through 64495 are to be assigned according to the "First | |||
| Come First Served" policy [RFC8126]. | Come First Served" policy [RFC8126]. | |||
| o Values 64496 through 65534 are for Private Use and are not to be | * Values 64496 through 65534 are for Private Use and are not to be | |||
| recorded by IANA. | recorded by IANA. | |||
| This document should be given as a reference for this registry. | This document is given as a reference for this registry. | |||
| The new registry should track: | The registry tracks: | |||
| o Value | * Value | |||
| o Name | * Name | |||
| o Reference Document or Contact | * Reference | |||
| o Registration Date | * Registration Date | |||
| The registry should initially be populated as follows where | The registry is initially populated as follows. | |||
| [I-D.darwa] should be expanded to | ||||
| [I-D.dawra-idr-bgp-ls-sr-service-segments]. | ||||
| Value | Name | Reference | Date | +=============+===================+=============+============+ | |||
| ------+-------------------------+------------+--------------- | | Value | Name | Reference | Date | | |||
| 0 | Reserved, not to be | [This.I-D] | Date-to-be-set | +=============+===================+=============+============+ | |||
| | allocated | | | | 0 | Reserved | RFC 9015 | 2020-09-02 | | |||
| 1 | Change Sequence | [This.I-D] | Date-to-be-set | +-------------+-------------------+-------------+------------+ | |||
| 2-31 | Unassigned | | | | 1 | Change Sequence | RFC 9015 | 2020-09-02 | | |||
| 32 | Classifier | [This.I-D] | Date-to-be-set | +-------------+-------------------+-------------+------------+ | |||
| | | [I-D.dawra]| | | 2-31 | Unassigned | | | | |||
| 33 | Firewall | [This.I-D] | Date-to-be-set | +-------------+-------------------+-------------+------------+ | |||
| | | [I-D.dawra]| | | 32 | Classifier | RFC 9015, | 2020-09-02 | | |||
| 34 | Load balancer | [This.I-D] | Date-to-be-set | | | | [BGP-LS-SR] | | | |||
| | | [I-D.dawra]| | +-------------+-------------------+-------------+------------+ | |||
| 35 | Deep packet inspection | [This.I-D] | Date-to-be-set | | 33 | Firewall | RFC 9015, | 2020-09-02 | | |||
| | engine | [I-D.dawra]| | | | | [BGP-LS-SR] | | | |||
| 36 | Penalty box | [This.I-D] | Date-to-be-set | +-------------+-------------------+-------------+------------+ | |||
| | | [RFC8300] | | | 34 | Load balancer | RFC 9015, | 2020-09-02 | | |||
| 37 | WAN accelerator | [This.I-D] | Date-to-be-set | | | | [BGP-LS-SR] | | | |||
| | | [RFC7665] | | +-------------+-------------------+-------------+------------+ | |||
| | | [RFC8300] | | | 35 | Deep packet | RFC 9015, | 2020-09-02 | | |||
| 38 | Application accelerator | [This.I-D] | Date-to-be-set | | | inspection engine | [BGP-LS-SR] | | | |||
| | | [RFC7665] | | +-------------+-------------------+-------------+------------+ | |||
| 39 | TCP optimizer | [This.I-D] | Date-to-be-set | | 36 | Penalty box | RFC 9015, | 2020-09-02 | | |||
| | | [RFC7665] | | | | | [RFC8300] | | | |||
| 40 | Network Address | [This.I-D] | Date-to-be-set | +-------------+-------------------+-------------+------------+ | |||
| | Translator | [RFC7665] | | | 37 | WAN accelerator | RFC 9015, | 2020-09-02 | | |||
| 41 | NAT44 | [This.I-D] | Date-to-be-set | | | | [RFC7665], | | | |||
| | | [RFC7665] | | | | | [RFC8300] | | | |||
| | | [RFC3022] | | +-------------+-------------------+-------------+------------+ | |||
| 42 | NAT64 | [This.I-D] | Date-to-be-set | | 38 | Application | RFC 9015, | 2020-09-02 | | |||
| | | [RFC7665] | | | | accelerator | [RFC7665] | | | |||
| | | [RFC6146] | | +-------------+-------------------+-------------+------------+ | |||
| 43 | NPTv6 | [This.I-D] | Date-to-be-set | | 39 | TCP optimizer | RFC 9015, | 2020-09-02 | | |||
| | | [RFC7665] | | | | | [RFC7665] | | | |||
| | | [RFC6296] | | +-------------+-------------------+-------------+------------+ | |||
| 44 | Lawful intercept | [This.I-D] | Date-to-be-set | | 40 | Network Address | RFC 9015, | 2020-09-02 | | |||
| | | [RFC7665] | | | | Translator | [RFC7665] | | | |||
| 45 | HOST_ID injection | [This.I-D] | Date-to-be-set | +-------------+-------------------+-------------+------------+ | |||
| | | [RFC7665] | | | 41 | NAT44 | RFC 9015, | 2020-09-02 | | |||
| 46 | HTTP header enrichment | [This.I-D] | Date-to-be-set | | | | [RFC7665], | | | |||
| | | [RFC7665] | | | | | [RFC3022] | | | |||
| 47 | Caching engine | [This.I-D] | Date-to-be-set | +-------------+-------------------+-------------+------------+ | |||
| | | [RFC7665] | | | 42 | NAT64 | RFC 9015, | 2020-09-02 | | |||
| 48- | | | | | | | [RFC7665], | | | |||
| -65534|Unassigned | | | | | | [RFC6146] | | | |||
| 65535 | Reserved, not to be | | | +-------------+-------------------+-------------+------------+ | |||
| | allocated | [This.I-D] | Date-to-be-set | | 43 | NPTv6 | RFC 9015, | 2020-09-02 | | |||
| | | | [RFC7665], | | | ||||
| | | | [RFC6296] | | | ||||
| +-------------+-------------------+-------------+------------+ | ||||
| | 44 | Lawful intercept | RFC 9015, | 2020-09-02 | | ||||
| | | | [RFC7665] | | | ||||
| +-------------+-------------------+-------------+------------+ | ||||
| | 45 | HOST_ID injection | RFC 9015, | 2020-09-02 | | ||||
| | | | [RFC7665] | | | ||||
| +-------------+-------------------+-------------+------------+ | ||||
| | 46 | HTTP header | RFC 9015, | 2020-09-02 | | ||||
| | | enrichment | [RFC7665] | | | ||||
| +-------------+-------------------+-------------+------------+ | ||||
| | 47 | Caching engine | RFC 9015, | 2020-09-02 | | ||||
| | | | [RFC7665] | | | ||||
| +-------------+-------------------+-------------+------------+ | ||||
| | 48-64495 | Unassigned | | | | ||||
| +-------------+-------------------+-------------+------------+ | ||||
| | 64496-65534 | Reserved for | | | | ||||
| | | Private Use | | | | ||||
| +-------------+-------------------+-------------+------------+ | ||||
| | 65535 | Reserved, not to | RFC 9015 | 2020-09-02 | | ||||
| | | be allocated | | | | ||||
| +-------------+-------------------+-------------+------------+ | ||||
| 10.6. New Generic Transitive Experimental Use Extended Community Sub- | Table 3: Service Function Chaining Service Function Types | |||
| Types | Registry Initial Contents | |||
| IANA maintains a registry of "Border Gateway Protocol (BGP) | 10.6. Flow Specification for SFC Classifiers | |||
| Parameters" with a subregistry of "Generic Transitive Experimental | ||||
| Use Extended Community Sub-Type". IANA is requested to assign a new | ||||
| sub-type as follows: | ||||
| "Flow Specification for SFC Classifiers" (TBD4 in this document) | IANA maintains a registry of "Border Gateway Protocol (BGP) Extended | |||
| Communities" with a subregistry of "Generic Transitive Experimental | ||||
| Use Extended Community Sub-Types". IANA has assigned a new subtype | ||||
| as follows: | ||||
| "Flow Specification for SFC Classifiers" with a value of 0x0d and | ||||
| with this document as the reference. | with this document as the reference. | |||
| 10.7. New BGP Transitive Extended Community Type | 10.7. New BGP Transitive Extended Community Type | |||
| IANA maintains a registry of "Border Gateway Protocol (BGP) | IANA maintains a registry of "Border Gateway Protocol (BGP) Extended | |||
| Parameters" with a subregistry of "BGP Transitive Extended Community | Communities" with a subregistry of "BGP Transitive Extended Community | |||
| Types". IANA is requested to assign a new type as follows: | Types". IANA has assigned a new type as follows: | |||
| o SFC (Sub-Types are defined in the "SFC Extended Community Sub- | SFC (Sub-Types are defined in the "SFC Extended Community Sub- | |||
| Types" registry) (TBD6 in this document) with this document as the | Types" registry) with a value of 0x0b and with this document as | |||
| reference. | the reference. | |||
| 10.8. New SFC Extended Community Sub-Types Registry | 10.8. "SFC Extended Community Sub-Types" Registry | |||
| IANA maintains a registry of "Border Gateway Protocol (BGP) | IANA maintains a registry of "Border Gateway Protocol (BGP) | |||
| Parameters". IANA is requested to create a new sub-registry called | Parameters". IANA has created a new subregistry called the "SFC | |||
| the "SFC Extended Community Sub-Types Registry". | Extended Community Sub-Types" registry. | |||
| IANA should include the following note replacing the string "TBD6" | IANA has included the following note: | |||
| with the value assigned for Section 10.7: | ||||
| This registry contains values of the second octet (the "Sub-Type" | | This registry contains values of the second octet (the "Sub- | |||
| field) of an extended community when the value of the first octet | | Type" field) of an extended community when the value of the | |||
| (the "Type" field) is set to TBD6. | | first octet (the "Type" field) is set to 0x0b. | |||
| The allocation policy for this registry should be First Come First | The allocation policy for this registry is First Come First Served. | |||
| Served. | ||||
| Valid values are 0 to 255. The value 0 is reserved and should not be | Valid values are 0 to 255. The value 0 is reserved and should not be | |||
| allocated. | allocated. | |||
| IANA is requested to populate this registry with the following | IANA has populated this registry with the following entries: | |||
| entries: | ||||
| Sub-Type | | | | +==========+==========================+===========+============+ | |||
| Value | Name | Reference | Date | | Sub-Type | Name | Reference | Date | | |||
| ---------+----------------------+-------------+--------------- | | Value | | | | | |||
| 0 | Reserved, not to be | | | +==========+==========================+===========+============+ | |||
| | allocated | | | | 0 | Reserved | RFC 9015 | | | |||
| 1 | SFIR Pool Identifier | [This.I-D] | Date-to-be-set | +----------+--------------------------+-----------+------------+ | |||
| 2 | MPLS Label Stack | [This.I-D] | Date-to-be-set | | 1 | SFIR pool identifier | RFC 9015 | 2020-09-02 | | |||
| | Mixed Swapping/ | | | +----------+--------------------------+-----------+------------+ | |||
| | Stacking Labels | | | | 2 | MPLS Label Stack Mixed | RFC 9015 | 2020-09-02 | | |||
| 3-255 | Unassigned | | | | | Swapping/Stacking Labels | | | | |||
| +----------+--------------------------+-----------+------------+ | ||||
| | 3-255 | Unassigned | | | | ||||
| +----------+--------------------------+-----------+------------+ | ||||
| All other values should be marked "Unassigned". | Table 4: SFC Extended Community Sub-Types Subregistry | |||
| Initial Contents | ||||
| 10.9. SPI/SI Representation | 10.9. New SPI/SI Representation Sub-TLV | |||
| IANA is requested to assign a codepoint from the "BGP Tunnel | IANA has assigned a codepoint from the "BGP Tunnel Encapsulation | |||
| Encapsulation Attribute Sub-TLVs" registry for the "SPI/SI | Attribute Sub-TLVs" registry for the "SPI/SI Representation Sub-TLV" | |||
| Representation Sub-TLV" (TBD5 in this document) with this document | with a value of 16 and with this document as the reference. | |||
| being the reference. | ||||
| 10.10. SFC SPI/SI Representation Flags Registry | 10.10. "SFC SPI/SI Representation Flags" Registry | |||
| IANA maintains the "BGP Tunnel Encapsulation Attribute Sub-TLVs" | IANA maintains the "BGP Tunnel Encapsulation Attribute Sub-TLVs" | |||
| registry and is requested to create an associated registry called the | registry and has created an associated registry called the "SFC SPI/ | |||
| "SFC SPI/SI Representation Flags" registry. | SI Representation Flags" registry. | |||
| Bits are to be assigned by Standards Action. The field is 16 bits | Bits are to be assigned by Standards Action. The field is 16 bits | |||
| long, and bits are counted from the the most significant bit as bit | long, and bits are counted from the most significant bit as bit zero. | |||
| zero. | ||||
| IANA is requested to populate the registry as follows: | ||||
| Bit number | Name | Reference | ||||
| -----------+----------------------+----------- | ||||
| TBD9 | NSH data plane | [This.I-D] | ||||
| TBD10 | MPLS data plane | [This.I-D] | ||||
| 11. Contributors | ||||
| Stuart Mackie | ||||
| Juniper Networks | ||||
| Email: wsmackie@juinper.net | ||||
| Keyur Patel | ||||
| Arrcus, Inc. | ||||
| Email: keyur@arrcus.com | ||||
| Avinash Lingala | ||||
| AT&T | ||||
| Email: ar977m@att.com | ||||
| 12. Acknowledgements | ||||
| Thanks to Tony Przygienda, Jeff Haas, and Andy Malis for helpful | ||||
| comments, and to Joel Halpern for discussions that improved this | ||||
| document. Yuanlong Jiang provided a useful review and caught some | ||||
| important issues. Stephane Litkowski did an exceptionally good and | ||||
| detailed document shepherd review. | ||||
| Andy Malis contributed text that formed the basis of Section 7.7. | ||||
| Brian Carpenter and Martin Vigoureux provided useful reviews during | IANA has populated the registry as follows: | |||
| IETF last call. Thanks also to Sheng Jiang, Med Boucadair, Ravi | ||||
| Singh, Benjamin Kaduk, Roman Danyliw, Adam Roach, Alvaro Retana, | ||||
| Barry Leiba, and Murray Kucherawy for review comments. Ketan | ||||
| Talaulikar provided helpful discussion of the SFT code point | ||||
| registry. Ron Bonica kept us honest on the difference between an RD | ||||
| and RT; Benjamin Kaduk kept us on message about the differnce between | ||||
| an RD and an extended community. | ||||
| 13. References | +=======+=================+===========+ | |||
| | Value | Name | Reference | | ||||
| +=======+=================+===========+ | ||||
| | 0 | NSH data plane | RFC 9015 | | ||||
| +-------+-----------------+-----------+ | ||||
| | 1 | MPLS data plane | RFC 9015 | | ||||
| +-------+-----------------+-----------+ | ||||
| 13.1. Normative References | Table 5: SFC SPI/SI Representation | |||
| Flags Registry Initial Contents | ||||
| [I-D.ietf-idr-rfc5575bis] | 11. References | |||
| Loibl, C., Hares, S., Raszuk, R., McPherson, D., and M. | ||||
| Bacher, "Dissemination of Flow Specification Rules", | ||||
| draft-ietf-idr-rfc5575bis-26 (work in progress), August | ||||
| 2020. | ||||
| [I-D.ietf-idr-tunnel-encaps] | 11.1. Normative References | |||
| Patel, K., Velde, G., Sangli, S., and J. Scudder, "The BGP | ||||
| Tunnel Encapsulation Attribute", draft-ietf-idr-tunnel- | ||||
| encaps-17 (work in progress), July 2020. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | [RFC4271] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | |||
| Border Gateway Protocol 4 (BGP-4)", RFC 4271, | Border Gateway Protocol 4 (BGP-4)", RFC 4271, | |||
| DOI 10.17487/RFC4271, January 2006, | DOI 10.17487/RFC4271, January 2006, | |||
| <https://www.rfc-editor.org/info/rfc4271>. | <https://www.rfc-editor.org/info/rfc4271>. | |||
| skipping to change at page 70, line 25 ¶ | skipping to change at line 3091 ¶ | |||
| Forwarding Plane for Service Function Chaining", RFC 8595, | Forwarding Plane for Service Function Chaining", RFC 8595, | |||
| DOI 10.17487/RFC8595, June 2019, | DOI 10.17487/RFC8595, June 2019, | |||
| <https://www.rfc-editor.org/info/rfc8595>. | <https://www.rfc-editor.org/info/rfc8595>. | |||
| [RFC8596] Malis, A., Bryant, S., Halpern, J., and W. Henderickx, | [RFC8596] Malis, A., Bryant, S., Halpern, J., and W. Henderickx, | |||
| "MPLS Transport Encapsulation for the Service Function | "MPLS Transport Encapsulation for the Service Function | |||
| Chaining (SFC) Network Service Header (NSH)", RFC 8596, | Chaining (SFC) Network Service Header (NSH)", RFC 8596, | |||
| DOI 10.17487/RFC8596, June 2019, | DOI 10.17487/RFC8596, June 2019, | |||
| <https://www.rfc-editor.org/info/rfc8596>. | <https://www.rfc-editor.org/info/rfc8596>. | |||
| 13.2. Informative References | [RFC8955] Loibl, C., Hares, S., Raszuk, R., McPherson, D., and M. | |||
| Bacher, "Dissemination of Flow Specification Rules", | ||||
| RFC 8955, DOI 10.17487/RFC8955, December 2020, | ||||
| <https://www.rfc-editor.org/info/rfc8955>. | ||||
| [I-D.dawra-idr-bgp-ls-sr-service-segments] | [RFC9012] Patel, K., Van de Velde, G., Sangli, S., and J. Scudder, | |||
| "The BGP Tunnel Encapsulation Attribute", RFC 9012, | ||||
| DOI 10.17487/RFC9012, April 2021, | ||||
| <https://www.rfc-editor.org/info/rfc9012>. | ||||
| 11.2. Informative References | ||||
| [BGP-LS-SR] | ||||
| Dawra, G., Filsfils, C., Talaulikar, K., Clad, F., | Dawra, G., Filsfils, C., Talaulikar, K., Clad, F., | |||
| daniel.bernier@bell.ca, d., Uttaro, J., Decraene, B., | Bernier, D., Uttaro, J., Decraene, B., Elmalky, H., Xu, | |||
| Elmalky, H., Xu, X., Guichard, J., and C. Li, "BGP-LS | X., Guichard, J., and C. Li, "BGP-LS Advertisement of | |||
| Advertisement of Segment Routing Service Segments", draft- | Segment Routing Service Segments", Work in Progress, | |||
| dawra-idr-bgp-ls-sr-service-segments-04 (work in | Internet-Draft, draft-dawra-idr-bgp-ls-sr-service- | |||
| progress), August 2020. | segments-05, 15 February 2021, | |||
| <https://tools.ietf.org/html/draft-dawra-idr-bgp-ls-sr- | ||||
| service-segments-05>. | ||||
| [RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network | [RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network | |||
| Address Translator (Traditional NAT)", RFC 3022, | Address Translator (Traditional NAT)", RFC 3022, | |||
| DOI 10.17487/RFC3022, January 2001, | DOI 10.17487/RFC3022, January 2001, | |||
| <https://www.rfc-editor.org/info/rfc3022>. | <https://www.rfc-editor.org/info/rfc3022>. | |||
| [RFC4272] Murphy, S., "BGP Security Vulnerabilities Analysis", | [RFC4272] Murphy, S., "BGP Security Vulnerabilities Analysis", | |||
| RFC 4272, DOI 10.17487/RFC4272, January 2006, | RFC 4272, DOI 10.17487/RFC4272, January 2006, | |||
| <https://www.rfc-editor.org/info/rfc4272>. | <https://www.rfc-editor.org/info/rfc4272>. | |||
| skipping to change at page 71, line 20 ¶ | skipping to change at line 3146 ¶ | |||
| BGP, LDP, PCEP, and MSDP Issues According to the Keying | BGP, LDP, PCEP, and MSDP Issues According to the Keying | |||
| and Authentication for Routing Protocols (KARP) Design | and Authentication for Routing Protocols (KARP) Design | |||
| Guide", RFC 6952, DOI 10.17487/RFC6952, May 2013, | Guide", RFC 6952, DOI 10.17487/RFC6952, May 2013, | |||
| <https://www.rfc-editor.org/info/rfc6952>. | <https://www.rfc-editor.org/info/rfc6952>. | |||
| [RFC7498] Quinn, P., Ed. and T. Nadeau, Ed., "Problem Statement for | [RFC7498] Quinn, P., Ed. and T. Nadeau, Ed., "Problem Statement for | |||
| Service Function Chaining", RFC 7498, | Service Function Chaining", RFC 7498, | |||
| DOI 10.17487/RFC7498, April 2015, | DOI 10.17487/RFC7498, April 2015, | |||
| <https://www.rfc-editor.org/info/rfc7498>. | <https://www.rfc-editor.org/info/rfc7498>. | |||
| Acknowledgements | ||||
| Thanks to Tony Przygienda, Jeff Haas, and Andy Malis for helpful | ||||
| comments, and to Joel Halpern for discussions that improved this | ||||
| document. Yuanlong Jiang provided a useful review and caught some | ||||
| important issues. Stephane Litkowski did an exceptionally good and | ||||
| detailed Document Shepherd review. | ||||
| Andy Malis contributed text that formed the basis of Section 7.7. | ||||
| Brian Carpenter and Martin Vigoureux provided useful reviews during | ||||
| IETF Last Call. Thanks also to Sheng Jiang, Med Boucadair, Ravi | ||||
| Singh, Benjamin Kaduk, Roman Danyliw, Adam Roach, Alvaro Retana, | ||||
| Barry Leiba, and Murray Kucherawy for review comments. Ketan | ||||
| Talaulikar provided helpful discussion of the SFT codepoint registry. | ||||
| Ron Bonica kept us honest on the difference between an RD and an RT; | ||||
| Benjamin Kaduk kept us on message about the difference between an RD | ||||
| and an Extended Community. | ||||
| Contributors | ||||
| Stuart Mackie | ||||
| Juniper Networks | ||||
| Email: wsmackie@juinper.net | ||||
| Keyur Patel | ||||
| Arrcus, Inc. | ||||
| Email: keyur@arrcus.com | ||||
| Avinash Lingala | ||||
| AT&T | ||||
| Email: ar977m@att.com | ||||
| Authors' Addresses | Authors' Addresses | |||
| Adrian Farrel | Adrian Farrel | |||
| Old Dog Consulting | Old Dog Consulting | |||
| Email: adrian@olddog.co.uk | Email: adrian@olddog.co.uk | |||
| John Drake | John Drake | |||
| Juniper Networks | Juniper Networks | |||
| End of changes. 469 change blocks. | ||||
| 1251 lines changed or deleted | 1293 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||