RFC 9350

IGP Flexible Algorithm

๐Ÿ“… published February 2023, from ietf

RFC 9350: IGP Flexible Algorithm ๐Ÿฆ‹

Okay bestie, this one is RFC 9350, a Standards Track doc from the IETF, dated February 2023. It's ISSN 2070-1721, and it's giving serious networking energy ๐Ÿ’…

The authors are P. Psenak (Ed.) from Cisco Systems, Inc, S. Hegde from Juniper Networks, Inc, C. Filsfils from Cisco Systems, Inc, K. Talaulikar from Cisco Systems, Inc, and A. Gulko from Edward Jones. ๐Ÿซถ

The header doesn't list any RFCs that this one obsoletes or updates, so it's standing on its own ๐ŸŒธ

Abstract

Okay so IGP protocols have always picked the best paths across the network using the IGP metric on each link. ๐Ÿ›ฃ๏ธ But lots of networks use RSVP-TE or Segment Routing - Traffic Engineering (SR-TE) to steer traffic onto a path computed with different metrics or constraints than the shortest IGP path. This doc specifies a solution that lets the IGPs themselves compute constraint-based paths. โœจ It also specifies a way of using Segment Routing (SR) Prefix-SIDs and SRv6 locators to steer packets along those constraint-based paths. Iconic. ๐Ÿ‘‘

Status of This Memo

This is an Internet Standards Track document. โœจ

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841. ๐Ÿ’–

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc9350. ๐Ÿงš

Copyright (c) 2023 IETF Trust and the persons identified as the document authors. All rights reserved. ๐ŸŒˆ

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License. ๐ŸŽ€

Table of Contents

  1.  Introduction
  2.  Requirements Language
  3.  Terminology
  4.  Flexible Algorithm
  5.  Flexible Algorithm Definition Advertisement
    5.1.  IS-IS Flexible Algorithm Definition Sub-TLV
    5.2.  OSPF Flexible Algorithm Definition TLV
    5.3.  Common Handling of the Flexible Algorithm Definition TLV
  6.  Sub-TLVs of IS-IS FAD Sub-TLV
    6.1.  IS-IS Flexible Algorithm Exclude Admin Group Sub-TLV
    6.2.  IS-IS Flexible Algorithm Include-Any Admin Group Sub-TLV
    6.3.  IS-IS Flexible Algorithm Include-All Admin Group Sub-TLV
    6.4.  IS-IS Flexible Algorithm Definition Flags Sub-TLV
    6.5.  IS-IS Flexible Algorithm Exclude SRLG Sub-TLV
  7.  Sub-TLVs of the OSPF FAD TLV
    7.1.  OSPF Flexible Algorithm Exclude Admin Group Sub-TLV
    7.2.  OSPF Flexible Algorithm Include-Any Admin Group Sub-TLV
    7.3.  OSPF Flexible Algorithm Include-All Admin Group Sub-TLV
    7.4.  OSPF Flexible Algorithm Definition Flags Sub-TLV
    7.5.  OSPF Flexible Algorithm Exclude SRLG Sub-TLV
  8.  IS-IS Flexible Algorithm Prefix Metric Sub-TLV
  9.  OSPF Flexible Algorithm Prefix Metric Sub-TLV
  10. OSPF Flexible Algorithm ASBR Reachability Advertisement
    10.1.  OSPFv2 Extended Inter-Area ASBR LSA
      10.1.1.  OSPFv2 Extended Inter-Area ASBR TLV
    10.2.  OSPF Flexible Algorithm ASBR Metric Sub-TLV
  11. Advertisement of Node Participation in a Flex-Algorithm
    11.1.  Advertisement of Node Participation for Segment Routing
    11.2.  Advertisement of Node Participation for Other Data Planes
  12. Advertisement of Link Attributes for Flex-Algorithm
  13. Calculation of Flexible Algorithm Paths
    13.1.  Multi-area and Multi-domain Considerations
  14. Flex-Algorithm and Forwarding Plane
    14.1.  Segment Routing MPLS Forwarding for Flex-Algorithm
    14.2.  SRv6 Forwarding for Flex-Algorithm
    14.3.  Other Data Planes' Forwarding for Flex-Algorithm
  15. Operational Considerations
    15.1.  Inter-area Considerations
    15.2.  Usage of the SRLG Exclude Rule with Flex-Algorithm
    15.3.  Max-Metric Consideration
    15.4.  Flexible Algorithm Definition and Changes
    15.5.  Number of Flex-Algorithms
  16. Backward Compatibility
  17. Security Considerations
  18. IANA Considerations
    18.1.  IGP IANA Considerations
      18.1.1.  IGP Algorithm Types Registry
      18.1.2.  IGP Metric-Type Registry
    18.2.  IGP Flexible Algorithm Definition Flags Registry
    18.3.  IS-IS IANA Considerations
      18.3.1.  IS-IS Sub-TLVs for IS-IS Router CAPABILITY TLV
               Registry
      18.3.2.  IS-IS Sub-TLVs for TLVs Advertising Prefix
               Reachability Registry
      18.3.3.  IS-IS Sub-Sub-TLVs for Flexible Algorithm Definition
               Sub-TLV Registry
    18.4.  OSPF IANA Considerations
      18.4.1.  OSPF Router Information (RI) TLVs Registry
      18.4.2.  OSPFv2 Extended Prefix TLV Sub-TLVs Registry
      18.4.3.  OSPFv3 Extended-LSA Sub-TLVs Registry
      18.4.4.  OSPF Flex-Algorithm Prefix Metric Bits Registry
      18.4.5.  Opaque Link-State Advertisements (LSA) Option Types
               Registry
      18.4.6.  OSPFv2 Extended Inter-Area ASBR TLVs Registry
      18.4.7.  OSPFv2 Extended Inter-Area ASBR Sub-TLVs Registry
      18.4.8.  OSPF Flexible Algorithm Definition TLV Sub-TLVs
               Registry
      18.4.9.  Link Attribute Application Identifiers Registry
  19. References
    19.1.  Normative References
    19.2.  Informative References
  Acknowledgements
  Authors' Addresses

1. Introduction โœจ

Okay so the shortest IGP path is often swapped out for a traffic-engineered path, because the app needs something the IGP metric doesn't capture. ๐ŸŽฏ Some networks set their IGP metrics so that they reflect link bandwidth or delay. If, for example, the IGP metric reflects the bandwidth on the link and user traffic is delay sensitive, the best IGP path may not be the best path from that user's perspective. Not me being picky about it, just the reality ๐Ÿ™ˆ

To fix this, people have deployed various kinds of Traffic Engineering, including RSVP-TE and SR-TE. With those, the TE component is in charge of computing paths based on additional metrics and/or constraints. ๐Ÿ’… These paths need to be installed in the forwarding tables, either in addition to the original IGP paths or as a replacement for them. Tunnels are often used to represent the engineered paths, and mechanisms like the one described in [RFC3906] are used to swap the original IGP paths out for those tunnel paths. ๐Ÿš‡

This document specifies a set of extensions to IS-IS, OSPFv2, and OSPFv3 that let a router advertise TLVs that do three things: (a) identify a calculation-type, (b) specify a metric-type, and (c) describe a set of constraints on the topology that are used to compute the best paths along the constrained topology. ๐Ÿง  A given combination of calculation-type, metric-type, and constraints is known as a "Flexible Algorithm Definition". A router that sends that set of TLVs also assigns a Flex-Algorithm value to that combination of calculation-type, metric-type, and constraints. Main character energy ๐Ÿ‘‘

This document also specifies a way for a router to use IGPs to associate one or more Segment Routing with the MPLS Data Plane (SR-MPLS) Prefix-SIDs [RFC8660] or Segment Routing over IPv6 (SRv6) locators [RFC8986] with a particular Flex-Algorithm. ๐Ÿฆ‹ Each Prefix-SID or SRv6 locator then represents a path that is computed according to the identified Flex-Algorithm. In SRv6, it's the locator, not the Segment Identifier (SID), that holds the binding to the algorithm. Iykyk ๐ŸŒธ

2. Requirements Language ๐Ÿช„

Okay bestie, these are the magic caps words. ๐Ÿช„ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. So if you see them in caps, that's the real deal, and if they're lowercase, they're just regular words ๐Ÿ’–

3. Terminology ๐Ÿ“š

This section defines the terms that come up a lot in this document. ๐Ÿง

  • Flexible Algorithm Definition (FAD): the set consisting of (a) a calculation-type, (b) a metric-type, and (c) a set of constraints. ๐Ÿ’œ
  • Flex-Algorithm: a numeric identifier in the range 128-255 that is associated via configuration with the Flexible Algorithm Definition. ๐Ÿ”ข
  • Flexible Algorithm Participation: per the data plane configuration state, this expresses whether the node is participating in a particular Flexible Algorithm. Not all routers in a given network need to participate in a given Flexible Algorithm. The Flexible Algorithm(s) that a given router participates in is determined by configuration. โš™๏ธ
  • IGP Algorithm: a value from the IANA "IGP Algorithm Types" registry, defined under the "Interior Gateway Protocol (IGP) Parameters" registry group. IGP Algorithms represent the triplet (calculation-type, metric-type, and constraints), where the second and third elements of the triplet MAY be unspecified. ๐Ÿงฉ
  • ABR: Area Border Router. In IS-IS terminology, it is also known as the Level 1 (L1) / Level 2 (L2) router. ๐Ÿ›ฐ๏ธ
  • ASBR: Autonomous System Border Router. ๐ŸŒ‰

4. Flexible Algorithm ๐Ÿ’…

Okay so there are lots of possible constraints you can use to compute a path across a network. Some networks are deployed as multiple planes, and a simple constraint is just to use one particular plane. ๐Ÿ›ค๏ธ A more sophisticated constraint can include an extended metric, as described in [RFC8570]. You can also restrict paths to links with specific affinities, or make them avoid links with specific affinities. And yes, you can combine all of these. Literally endless options ๐Ÿคฏ

To give you maximum flexibility, there's a mechanism that lets a router identify a particular calculation-type and metric-type, describe a particular set of constraints, and assign a numeric identifier, called the Flex-Algorithm, to that combination. ๐ŸŽ€ The mapping between the Flex-Algorithm and what it means is flexible and defined by the user. As long as every router in the domain has a common understanding of what a particular Flex-Algorithm represents, the routing computation is consistent and traffic is not subject to any looping. No loops, no drama ๐Ÿ”โœจ

The set consisting of (a) a calculation-type, (b) a metric-type, and (c) a set of constraints is referred to as a Flexible Algorithm Definition. ๐ŸŒˆ

The Flex-Algorithm is a numeric identifier in the range 128-255 that is associated via configuration with the Flexible Algorithm Definition. ๐Ÿ”ข

The IANA "IGP Algorithm Types" registry defines the set of values for IGP Algorithms. The following values are allocated by IANA from this registry for Flex-Algorithms: ๐Ÿซง

      128-255 - Flex-Algorithms

5. Flexible Algorithm Definition Advertisement โœจ

Okay bestie, the big goal here is loop-free forwarding for paths computed for a Flex-Algorithm ๐Ÿ’…. To get there, every router that (a) is set up to participate in a particular Flex-Algorithm and (b) sits in the same Flex-Algorithm Definition advertisement scope MUST agree on what that Flex-Algorithm is. The procedures below make sure that actually happens ๐Ÿซถ.

5.1. IS-IS Flexible Algorithm Definition Sub-TLV

The IS-IS Flexible Algorithm Definition (FAD) sub-TLV is how the definition of the Flex-Algorithm gets advertised ๐Ÿ“ฃ.

It rides along as a sub-TLV of the IS-IS Router CAPABILITY TLV-242, which is defined in [RFC7981] ๐ŸŽ€.

Here's the layout ๐Ÿ‘‘:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Type     |    Length     |Flex-Algorithm |  Metric-Type  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Calc-Type   |    Priority   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Sub-TLVs                             |
   +                                                               +
   |                            ...                                |

   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Here's what each field means ๐Ÿงš:

  • Type: 26 ๐ŸŒธ
  • Length: a variable number of octets, depending on which sub-TLVs are included ๐Ÿ“
  • Flex-Algorithm: the Flexible Algorithm number. It's a single octet value between 128 and 255 inclusive ๐Ÿฆ‹
  • Metric-Type: the type of metric, taken from the IANA "IGP Metric-Type" registry (Section 18.1.2), that gets used during the calculation. These values are defined:
    • 0: IGP Metric
    • 1: Min Unidirectional Link Delay, as defined in Section 4.2 of [RFC8570], encoded as an application-specific link attribute, as specified in [RFC8919] and Section 12 of this document โšก
    • 2: Traffic Engineering Default Metric, as defined in Section 3.7 of [RFC5305], encoded as an application-specific link attribute, as specified in [RFC8919] and Section 12 of this document โšก
  • Calc-Type: the calculation-type. It's a value from 0 to 127 inclusive, taken from the IANA "IGP Algorithm Types" registry under the "Interior Gateway Protocol (IGP) Parameters" registry. IGP Algorithms in the range 0-127 have a defined triplet of (calculation-type, metric-type, constraints). When this is used to specify the calculation-type in the FAD sub-TLV, only the calculation-type defined for the specified IGP Algorithm gets used. The Metric/Constraints MUST NOT be inherited. If the required calculation-type is Shortest Path First, the value 0 MUST appear in this field ๐Ÿ™…โ€โ™€๏ธ
  • Priority: a value between 0 and 255 inclusive that specifies the priority of the advertisement. Numerically greater values are preferred. How the priority gets used is described in Section 5.3 ๐Ÿ’ฏ
  • Sub-TLVs: optional sub-TLVs ๐ŸŽ

The IS-IS FAD sub-TLV MAY be advertised in a Label Switched Path (LSP) of any number. The IS-IS router MAY advertise more than one IS-IS FAD sub-TLV for a given Flexible Algorithm (see Section 6) ๐ŸŒˆ.

The IS-IS FAD sub-TLV has an area/level scope. The Router Capability TLV that the FAD sub-TLV lives in MUST have the S bit clear ๐Ÿ”’.

An IS-IS L1/L2 router MAY be configured to regenerate the winning FAD from level 2, without any modification to it, into the level 1 area. The regeneration is decided by the L1/L2 router, not by whoever originated the FAD advertisement in level 2 ๐Ÿง . When that happens, the regenerated FAD sub-TLV gets advertised in the level 1 Router Capability TLV that the L1/L2 router originated โœจ.

bestie, the regen only goes one way ๐Ÿšฆ: level 2 down to level 1, never the other direction.

An L1/L2 router MUST NOT regenerate any FAD sub-TLV from level 1 to level 2 ๐Ÿšซ.


5.2. OSPF Flexible Algorithm Definition TLV

The OSPF FAD TLV is advertised as a top-level TLV of the Router Information (RI) Link State Advertisement (LSA), which is defined in [RFC7770] ๐Ÿ“ก.

Here's the OSPF layout ๐Ÿฆ„:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Flex-Algorithm |   Metric-Type |   Calc-Type   |    Priority   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            Sub-TLVs                           |
   +                                                               +
   |                               ...                             |

   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

And the fields ๐Ÿ“:

  • Type: 16 ๐ŸŒท
  • Length: a variable number of octets, depending on which sub-TLVs are included ๐Ÿ“
  • Flex-Algorithm: the Flexible Algorithm number. It's a single octet value between 128 and 255 inclusive ๐Ÿฆ‹
  • Metric-Type: the type of metric, taken from the IANA "IGP Metric-Type" registry (Section 18.1.2), that gets used during the calculation. These values are defined:
    • 0: IGP Metric
    • 1: Min Unidirectional Link Delay, as defined in Section 4.2 of [RFC7471], encoded as an application-specific link attribute, as specified in [RFC8920] and Section 12 of this document โšก
    • 2: Traffic Engineering Metric, as defined in Section 2.5.5 of [RFC3630], encoded as an application-specific link attribute, as specified in [RFC8920] and Section 12 of this document โšก
  • Calc-Type: as described in Section 5.1 ๐Ÿ”
  • Priority: as described in Section 5.1 ๐Ÿ”
  • Sub-TLVs: optional sub-TLVs ๐ŸŽ

When multiple OSPF FAD TLVs for the same Flexible Algorithm come in from a given router, the receiver MUST use the first occurrence of the TLV in the RI LSA ๐Ÿ‘€. If the OSPF FAD TLV for the same Flex-Algorithm shows up in multiple RI LSAs that have different flooding scopes, the OSPF FAD TLV in the RI LSA with the area-scoped flooding scope MUST be used ๐Ÿ . If the OSPF FAD TLV for the same algorithm shows up in multiple RI LSAs that have the same flooding scope, the OSPF FAD TLV in the RI LSA with the numerically smallest Instance ID MUST be used, and subsequent instances of the OSPF FAD TLV MUST be ignored ๐Ÿ™ˆ.

The RI LSA can be advertised at any of the defined opaque flooding scopes: link, area, or Autonomous System (AS). For the purpose of OSPF FAD TLV advertisement, area-scoped flooding is REQUIRED ๐Ÿ†. The AS flooding scope SHOULD NOT be used unless local configuration policy on the originating router indicates domain-wide flooding ๐ŸŒ.


5.3. Common Handling of the Flexible Algorithm Definition TLV

This section covers the protocol-independent handling of the FAD TLV (OSPF) or FAD sub-TLV (IS-IS). We'll just call it "FAD TLV" in here, even though for IS-IS it's technically a sub-TLV ๐Ÿซ .

The value of the Flex-Algorithm MUST be between 128 and 255 inclusive. If it isn't, the FAD TLV MUST be ignored ๐Ÿšฎ.

Only a subset of the routers participating in the particular Flex-Algorithm need to advertise its definition ๐Ÿค.

Every router that is configured to participate in a particular Flex-Algorithm MUST select the Flex-Algorithm Definition using the following ordered rules ๐Ÿ“‹. This keeps the selection consistent even when different routers advertise different definitions for the same Flex-Algorithm ๐Ÿ”ฅ:

  1. From the advertisements of the FAD in the area (including both locally generated advertisements and received advertisements), select the one(s) with the numerically greatest priority value ๐Ÿฅ‡.
  2. If there are multiple advertisements of the FAD with the same numerically greatest priority, select the one originated from the router with the numerically greatest System-ID (for IS-IS) or Router ID (for OSPFv2 and OSPFv3) ๐Ÿ†”. For IS-IS, the System-ID is described in [ISO10589]. For OSPFv2 and OSPFv3, the standard Router ID is described in [RFC2328] and [RFC5340], respectively.

The FAD selected by these rules is also known as the "winning FAD" ๐Ÿ….

A router that is not configured to participate in a particular Flex-Algorithm MUST ignore FAD sub-TLV advertisements for that Flex-Algorithm ๐Ÿ™‰. A router that is not participating in a particular Flex-Algorithm MAY advertise the FAD for that Flex-Algorithm. Receiving routers MUST consider a received FAD advertisement regardless of whether that advertisement's originator participates in the Flex-Algorithm ๐Ÿ’Œ.

Any change in the Flex-Algorithm Definition may cause a temporary disruption of traffic forwarded on those Flex-Algorithm paths ๐Ÿ˜ฌ. The impact is similar to any other event that requires network-wide convergence ๐ŸŒŠ.

If a node is configured to participate in a particular Flexible Algorithm, but either there's no valid Flex-Algorithm Definition available for it, or the selected Flex-Algorithm Definition includes a calculation-type, metric-type, constraint, flag, or sub-TLV that the node doesn't support, then it MUST stop participating in that Flexible Algorithm ๐Ÿ›‘. That means it MUST NOT announce participation in that Flexible Algorithm, as specified in Section 11, and it MUST remove any forwarding state associated with it ๐Ÿงน.

The Flex-Algorithm Definition is topology independent. It applies to all topologies that a router participates in ๐Ÿ—บ๏ธ.


6. Sub-TLVs of IS-IS FAD Sub-TLV ๐Ÿงฉ

One of the limitations of IS-IS [ISO10589] is that a TLV/sub-TLV's length is capped at a maximum of 255 octets ๐Ÿ˜ค. The FAD sub-TLV supports a number of sub-sub-TLVs (defined below), so for a given Flex-Algorithm the total number of octets needed to fully define a FAD can go over what a single FAD sub-TLV can hold ๐Ÿ“ฆ. In those cases, the FAD MAY be split across multiple such sub-TLVs, and the contents of those sub-TLVs get combined to give a complete FAD for the Flex-Algorithm ๐Ÿงƒ. When that happens, the fixed portion of the FAD (see Section 5.1) MUST be identical in all of the FAD sub-TLVs for a given Flex-Algorithm from a given IS. If the fixed portions of those FAD sub-TLVs differ, the values in the fixed portion of the FAD sub-TLV in the first occurrence in the lowest-numbered LSP from that IS MUST be used ๐Ÿ”.

Any specification that introduces a new IS-IS FAD sub-sub-TLV MUST specify whether the FAD sub-TLV may appear multiple times in the set of FAD sub-TLVs for a given Flex-Algorithm from a given IS, and how to handle them if multiple are allowed ๐Ÿ“โœจ.

6.1. IS-IS Flexible Algorithm Exclude Admin Group Sub-TLV

okay so the Flex-Algo Definition can name "colors" ๐ŸŽจ that the operator uses to exclude links when Flex-Algorithm paths get computed ๐Ÿ™…โ€โ™€๏ธ

The IS-IS Flexible Algorithm Exclude Admin Group (FAEAG) sub-TLV is how that exclude rule gets advertised. It's what the path calculation uses, as described in Section 13 ๐Ÿ’…

The IS-IS FAEAG sub-TLV lives inside the IS-IS FAD sub-TLV, and it looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Type     |    Length     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Extended Admin Group                     |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 1
  • Length: variable, depends on how big the Extended Admin Group is. It MUST be a multiple of 4 octets ๐Ÿ“
  • Extended Administrative Group: the Extended Administrative Group, as defined in [RFC7308] โœจ

Here's the rule: the IS-IS FAEAG sub-TLV MUST NOT appear more than once in a single IS-IS FAD sub-TLV. If it shows up twice, the receiver MUST ignore the whole IS-IS FAD sub-TLV ๐Ÿ˜ญ

Across the whole set of FAD sub-TLVs for one Flex-Algorithm from one IS, it MUST NOT appear more than once either. If it does, the first occurrence in the lowest-numbered LSP from that IS MUST be used, and every other occurrence MUST be ignored ๐Ÿซถ

6.2. IS-IS Flexible Algorithm Include-Any Admin Group Sub-TLV

again with the colors ๐ŸŒˆ this time the Flex-Algo Definition uses them to include links during the Flex-Algorithm path computation.

The IS-IS Flexible Algorithm Include-Any Admin Group sub-TLV advertises the include-any rule that gets used during the Flex-Algorithm path calculation, as specified in Section 13. It's a sub-TLV of the IS-IS FAD sub-TLV and looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Type     |    Length     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Extended Admin Group                     |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 2
  • Length: variable, depends on the size of the Extended Admin Group. It MUST be a multiple of 4 octets.
  • Extended Administrative Group: the Extended Administrative Group, as defined in [RFC7308] ๐Ÿ’œ

It MUST NOT appear more than once in a single IS-IS FAD sub-TLV. If it does, the receiver MUST ignore that IS-IS FAD sub-TLV ๐Ÿ™ˆ

It also MUST NOT appear more than once in the set of FAD sub-TLVs for a given Flex-Algorithm from a given IS. If it does, the first occurrence in the lowest-numbered LSP from that IS MUST be used, and any other occurrences MUST be ignored ๐Ÿ’–

6.3. IS-IS Flexible Algorithm Include-All Admin Group Sub-TLV

same vibe, different rule โœจ the Flex-Algo Definition can use colors to include links during Flex-Algorithm path computation, but this time it's the include-all rule.

The IS-IS Flexible Algorithm Include-All Admin Group sub-TLV advertises that include-all rule, which gets used during the Flex-Algorithm path calculation, as specified in Section 13. It's a sub-TLV of the IS-IS FAD sub-TLV:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Type     |    Length     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Extended Admin Group                     |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 3
  • Length: variable, depends on the size of the Extended Admin Group. It MUST be a multiple of 4 octets.
  • Extended Administrative Group: the Extended Administrative Group, as defined in [RFC7308] ๐Ÿฆ‹

It MUST NOT appear more than once in a single IS-IS FAD sub-TLV. If it appears more than once, the receiver MUST ignore the IS-IS FAD sub-TLV.

It MUST NOT appear more than once in the set of FAD sub-TLVs for a given Flex-Algorithm from a given IS either. If it does, the first occurrence in the lowest-numbered LSP from that IS MUST be used, and any other occurrences MUST be ignored ๐ŸŒธ

6.4. IS-IS Flexible Algorithm Definition Flags Sub-TLV

the FADF sub-TLV is the flags sub-TLV ๐Ÿšฉ it's a sub-TLV of the IS-IS FAD sub-TLV and it looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Type     |    Length     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Flags                             |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 4
  • Length: variable, the number of octets in the Flags field.
  • Flags:
                 0 1 2 3 4 5 6 7...
                +-+-+-+-+-+-+-+-+...
                |M| | |          ...
                +-+-+-+-+-+-+-+-+...
  • M-flag: when it's set, the Flex-Algorithm-specific prefix metric MUST be used for inter-area and external prefix calculation. This flag doesn't apply to prefixes advertised as SRv6 locators ๐Ÿ™Œ

A new IANA "IGP Flexible Algorithm Definition Flags" registry is defined for allocating bits in the Flags field. See Section 18.2 ๐Ÿ“‹

Bits get defined and sent starting from bit 0, as shown above. Future bit definitions SHOULD be assigned in ascending bit order, so that the fewest bits need to be transmitted ๐Ÿงš

Undefined bits MUST be transmitted as 0.

Bits that aren't transmitted MUST be treated as if they're set to 0 on receipt.

The IS-IS FADF sub-TLV MUST NOT appear more than once in a single IS-IS FAD sub-TLV. If it does, the receiver MUST ignore that IS-IS FAD sub-TLV.

The IS-IS FADF sub-TLV also MUST NOT appear more than once in the set of FAD sub-TLVs for a given Flex-Algorithm from a given IS. If it does, the first occurrence in the lowest-numbered LSP from that IS MUST be used, and any other occurrences MUST be ignored ๐ŸŽ€

If the IS-IS FADF sub-TLV isn't present inside the IS-IS FAD sub-TLV, all the bits are assumed to be set to 0.

โš ๏ธ bestie, this one is serious: if a node is set up to take part in a particular Flexible Algorithm, but the selected Flex-Algorithm Definition has a bit in the IS-IS FADF sub-TLV that the node doesn't support, it MUST stop participating in that Flexible Algorithm ๐Ÿ˜ฑ

New flag bits may get defined in the future. Implementations MUST check all advertised flag bits in the received IS-IS FADF sub-TLV, not just the subset that's currently defined ๐Ÿ‘‘

The M-flag MUST not be used when calculating prefix reachability for the SRv6 Locator prefix. ๐Ÿฆ„

6.5. IS-IS Flexible Algorithm Exclude SRLG Sub-TLV

the Flex-Algo Definition can also specify Shared Risk Link Groups (SRLGs) that the operator wants to exclude during Flex-Algorithm path computation ๐Ÿšซ

The IS-IS Flexible Algorithm Exclude SRLG (FAESRLG) sub-TLV advertises that exclude rule, which gets used during the Flex-Algorithm path calculation, as specified in Section 13. It's a sub-TLV of the IS-IS FAD sub-TLV:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Type     |    Length     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Shared Risk Link Group Value             |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 5
  • Length: variable, depends on the number of SRLG values. It MUST be a multiple of 4 octets.
  • Shared Risk Link Group Value: the SRLG value, as defined in [RFC5307] ๐Ÿ”ฅ

It MUST NOT appear more than once in a single IS-IS FAD sub-TLV. If it does, the receiver MUST ignore that IS-IS FAD sub-TLV.

The IS-IS FAESRLG sub-TLV MAY appear more than once in the set of FAD sub-TLVs for a given Flex-Algorithm from a given IS. This can be needed when the total number of SRLG values makes the FAD sub-TLV go over the maximum length of a single FAD sub-TLV ๐Ÿ“ฆ In that case, the receiver MUST use the union of all values across all IS-IS FAESRLG sub-TLVs from that set. ๐Ÿซง

7. Sub-TLVs of the OSPF FAD TLV

7.1. OSPF Flexible Algorithm Exclude Admin Group Sub-TLV

the OSPF version of the exclude-admin-group thing ๐ŸŒท this OSPF FAEAG sub-TLV is a sub-TLV of the OSPF FAD TLV. Its usage is described in Section 6.1, and it looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Extended Admin Group                     |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 1
  • Length: variable, depends on the size of the Extended Admin Group. It MUST be a multiple of 4 octets.
  • Extended Administrative Group: the Extended Administrative Group, as defined in [RFC7308] ๐ŸŽ‰

The OSPF FAEAG sub-TLV MUST NOT appear more than once in an OSPF FAD TLV. If it does, the receiver MUST ignore the OSPF FAD TLV ๐Ÿ™ƒ

7.2. OSPF Flexible Algorithm Include-Any Admin Group Sub-TLV โœจ

okay bestie, this one is the OSPF Include-Any Admin Group sub-TLV ๐ŸŽ€ It's a sub-TLV of the OSPF FAD TLV, and you can see how it gets used in Section 6.2 ๐Ÿ’… Here's the layout:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Extended Admin Group                     |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 2 ๐ŸŒธ
  • Length: variable, depending on the size of the Extended Admin Group. It MUST be a multiple of 4 octets ๐Ÿ’–
  • Extended Administrative Group: the Extended Administrative Group, as defined in [RFC7308] ๐Ÿฆ‹

Heads up, this one is strict ๐Ÿ™ˆ The OSPF Flexible Algorithm Include-Any Admin Group sub-TLV MUST NOT appear more than once in an OSPF FAD TLV. If it shows up more than once, the receiver MUST ignore the whole OSPF FAD TLV ๐Ÿ˜ญ


7.3. OSPF Flexible Algorithm Include-All Admin Group Sub-TLV ๐Ÿ“

this one is basically the Include-Any sibling's twin ๐Ÿ‘ฏโ€โ™€๏ธ It's also a sub-TLV of the OSPF FAD TLV, and its usage is in Section 6.3. Same shape:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Extended Admin Group                     |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 3 ๐Ÿงš
  • Length: variable, depending on the size of the Extended Admin Group. It MUST be a multiple of 4 octets โœจ
  • Extended Administrative Group: the Extended Administrative Group, as defined in [RFC7308] ๐Ÿ’œ

Same rule as before, so no cap: the OSPF Flexible Algorithm Include-All Admin Group sub-TLV MUST NOT appear more than once in an OSPF FAD TLV. If it appears more than once, the receiver MUST ignore the OSPF FAD TLV ๐Ÿซถ


7.4. OSPF Flexible Algorithm Definition Flags Sub-TLV ๐ŸŒˆ

okay this is the flags one and it's giving bit-level drama ๐Ÿ’… The OSPF Flexible Algorithm Definition Flags (FADF) sub-TLV is a sub-TLV of the OSPF FAD TLV. Here's the shape:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Flags                             |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 4 ๐Ÿ’–
  • Length: variable, depending on the size of the Flags field. It MUST be a multiple of 4 octets ๐ŸŽ€
  • Flags: the bit layout looks like this:
                 0 1 2 3 4 5 6 7...
                +-+-+-+-+-+-+-+-+...
                |M| | |          ...
                +-+-+-+-+-+-+-+-+...
  • M-flag: when set, the Flex-Algorithm-specific prefix and ASBR metric MUST be used for inter-area and external prefix calculation. This flag is not applicable to prefixes advertised as SRv6 locators ๐Ÿฆ‹

A brand-new IANA "IGP Flexible Algorithm Definition Flags" registry exists for allocating bits in the Flags field, so check Section 18.2 for that ๐Ÿ“‹

Bits are defined and sent starting with bit 0, as shown above. Future bit definitions SHOULD be assigned in ascending bit order, so fewer bits need to be transmitted ๐ŸŒธ Undefined bits MUST be transmitted as 0. Bits that are not transmitted MUST be treated as if they are set to 0 on receipt ๐Ÿ’œ

The OSPF FADF sub-TLV MUST NOT appear more than once in an OSPF FAD TLV. If it appears more than once, the OSPF FAD TLV MUST be ignored by the receiver ๐Ÿ™ˆ

If the OSPF FADF sub-TLV is not present inside the OSPF FAD TLV, all the bits are assumed to be set to 0 โœจ

Big warning, bestie: if a node is set up to take part in a particular Flexible Algorithm, but the selected Flex-Algorithm Definition includes a bit in the OSPF FADF sub-TLV that the node doesn't support, it MUST stop participating in that Flexible Algorithm ๐Ÿ˜ญ

New flag bits may be defined in the future. Implementations MUST check all advertised flag bits in the received OSPF FADF sub-TLV, not just the subset that's currently defined ๐Ÿ”ฅ

The M-flag MUST not be used when calculating prefix reachability for the SRv6 Locator prefix ๐Ÿ’€


7.5. OSPF Flexible Algorithm Exclude SRLG Sub-TLV ๐Ÿฆ‹

the OSPF Flexible Algorithm Exclude SRLG (FAESRLG) sub-TLV is another sub-TLV of the OSPF FAD TLV, and its usage is in Section 6.5 ๐Ÿ’… Here's the format:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Shared Risk Link Group Value                |
   +-                                                             -+
   |                            ...                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 5 ๐ŸŒˆ
  • Length: variable, depending on the number of SRLGs. It MUST be a multiple of 4 octets ๐Ÿ“
  • Shared Risk Link Group Value: the SRLG value, as defined in [RFC4203] ๐Ÿ’œ

The OSPF FAESRLG sub-TLV MUST NOT appear more than once in an OSPF FAD TLV. If it appears more than once, the receiver MUST ignore the OSPF FAD TLV ๐Ÿ˜ญ


8. IS-IS Flexible Algorithm Prefix Metric Sub-TLV ๐Ÿ‘‘

the IS-IS Flexible Algorithm Prefix Metric (FAPM) sub-TLV is how you advertise a Flex-Algorithm-specific prefix metric tied to a given prefix advertisement ๐Ÿ“ฃ

The IS-IS FAPM sub-TLV is a sub-TLV of TLVs 135, 235, 236, and 237, and it looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Type     |    Length     |Flex-Algorithm |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Metric                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 6 ๐ŸŒธ
  • Length: 5 octets ๐Ÿ’–
  • Flex-Algorithm: a single octet value between 128 and 255 inclusive ๐Ÿงš
  • Metric: 4 octets of metric information โœจ

The IS-IS FAPM sub-TLV MAY appear multiple times in its parent TLV. If it appears more than once with the same Flex-Algorithm value, the first instance MUST be used and any subsequent instances MUST be ignored ๐ŸŽ€

If a prefix is advertised with a Flex-Algorithm prefix metric larger than MAX_PATH_METRIC, as defined in [RFC5305], this prefix MUST NOT be considered during the Flexible Algorithm computation ๐Ÿ™ˆ

The usage of the Flex-Algorithm prefix metric is described in Section 13 ๐Ÿฆ‹

The IS-IS FAPM sub-TLV MUST NOT be advertised as a sub-TLV of the IS-IS SRv6 Locator TLV [RFC9352]. The IS-IS SRv6 Locator TLV includes the Algorithm and Metric fields, which MUST be used instead. If the FAPM sub-TLV is present as a sub-TLV of the IS-IS SRv6 Locator TLV in the received LSP, such FAPM sub-TLV MUST be ignored ๐Ÿ’…


9. OSPF Flexible Algorithm Prefix Metric Sub-TLV ๐ŸŒˆ

the OSPF Flexible Algorithm Prefix Metric (FAPM) sub-TLV also supports advertising a Flex-Algorithm-specific prefix metric for a given prefix advertisement โœจ

The OSPF FAPM sub-TLV is a sub-TLV of the following:

  • OSPFv2 Extended Prefix TLV [RFC7684] and
  • the following OSPFv3 TLVs, as defined in [RFC8362]:
    • Inter-Area Prefix TLV
    • External-Prefix TLV

The OSPF FAPM sub-TLV has this format:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Flex-Algorithm |     Flags     |            Reserved           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            Metric                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 3 for OSPFv2, and 26 for OSPFv3 ๐Ÿงš
  • Length: 8 octets ๐Ÿ’œ
  • Flex-Algorithm: a single octet value between 128 and 255 inclusive ๐ŸŒธ
  • Flags: a 1-octet value, laid out like this:
                 0 1 2 3 4 5 6 7
                +-+-+-+-+-+-+-+-+
                |E|             |
                +-+-+-+-+-+-+-+-+
  • E bit: position 0. This is the type of external metric. If the bit is set, the metric specified is a Type 2 external metric. This bit is applicable only to OSPF external and Not-So-Stubby Area (NSSA) external prefixes. This is semantically the same as the E bit in Appendix A.4.5 of [RFC2328] and Appendix A.4.7 of [RFC5340] for OSPFv2 and OSPFv3, respectively ๐Ÿฆ‹
  • Bits 1 through 7: MUST be cleared by the originator and ignored by the receiver ๐Ÿซถ
  • Reserved: MUST be set to 0 and ignored at reception ๐ŸŽ€
  • Metric: 4 octets of metric information ๐Ÿ’–

The OSPF FAPM sub-TLV MAY appear multiple times in its parent TLV. If it appears more than once with the same Flex-Algorithm value, the first instance MUST be used and any subsequent instances MUST be ignored ๐Ÿ™ˆ

The usage of the Flex-Algorithm prefix metric is described in Section 13 ๐ŸŒˆ


10. OSPF Flexible Algorithm ASBR Reachability Advertisement ๐Ÿ“

an OSPF ABR advertises the reachability of ASBRs in its attached areas, so routers inside those areas can do their route calculations for external prefixes advertised by those ASBRs ๐Ÿ—บ๏ธ OSPF extensions for advertising Flex-Algorithm-specific reachability and metric for ASBRs are similarly required for Flex-Algorithm external prefix computations, as described further in Section 13.1 ๐Ÿ‘‘

10.1. OSPFv2 Extended Inter-Area ASBR LSA

okay so this is the OSPFv2 Extended Inter-Area ASBR (EIA-ASBR) LSA ๐Ÿ’… It's an OSPF Opaque LSA [RFC5250] that carries extra info about how to reach an ASBR that lives outside your area but still inside the OSPF domain ๐ŸŒธ Semantically it's basically the fixed format Type 4 summary-LSA [RFC2328] doing its thing, but the vibe is different. The Link State ID (LSID) of the EIA-ASBR LSA does not carry the ASBR Router ID, because that ID gets tucked into the body of the LSA instead ๐ŸŽ€ An ABR originates it, and flooding is area-scoped only, so it stays put in its area โœจ

An OSPFv2 ABR makes an EIA-ASBR LSA for an ASBR when it's already advertising the Type 4 summary-LSA for that ASBR and it has extra attributes to share beyond what the fixed-format Type 4 summary-LSA can hold ๐Ÿฆ‹ An OSPFv2 ABR MUST NOT advertise the EIA-ASBR LSA for an ASBR it isn't advertising a Type 4 summary-LSA for. This is the guardrail that keeps the ABR from making an EIA-ASBR LSA for an ASBR it doesn't even have reachability to in the base OSPFv2 topology calculation ๐Ÿ™ˆ The OSPFv2 ABR SHOULD NOT advertise the EIA-ASBR LSA for an ASBR when it has no additional attributes to share for that ASBR ๐Ÿ’œ

The OSPFv2 EIA-ASBR LSA looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            LS age             |     Options   |   LS Type     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Opaque Type  |                 Opaque ID                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Advertising Router                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     LS sequence number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         LS checksum           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +-                            TLVs                             -+
   |                             ...                               |

The LS age and Options fields are as defined in Appendix A.4.1 of [RFC2328] ๐Ÿงš

The LS Type MUST be 10, which means the Opaque LSA flooding scope is area-local [RFC5250] ๐Ÿ”ฅ

The Opaque Type used by the OSPFv2 EIA-ASBR LSA is 11. The Opaque Type is how the different OSPFv2 Opaque LSAs get told apart, and it's described in Section 3 of [RFC5250] ๐ŸŒˆ

The Opaque ID field is an arbitrary value that helps keep multiple OSPFv2 EIA-ASBR LSAs separate ๐Ÿ“ For these LSAs the Opaque ID has no semantic significance beyond telling apart EIA-ASBR LSAs from the same OSPFv2 ABR. If multiple OSPFv2 EIA-ASBR LSAs specify the same ASBR, the attributes from the Opaque LSA with the lowest Opaque ID SHOULD be used ๐Ÿ‘‘

The Advertising Router, LS sequence number, and LS checksum fields are as defined in Appendix A.4.1 of [RFC2328] โœจ

The Length field is also as defined in Appendix A.4.1 of [RFC2328]. It's the total length in octets of the Opaque LSA, including the LSA header and all TLVs (padding too) ๐Ÿ’–

The TLVs inside the body of the OSPFv2 EIA-ASBR LSA use the same format as the Traffic Engineering Extensions to OSPFv2 [RFC3630] ๐Ÿฆ‹ The variable TLV section holds one or more nested TLV tuples, and nested TLVs are also called sub-TLVs. The TLV Length field gives the length of the value portion in octets, so a TLV with no value portion has a length of 0 ๐ŸŒธ Every TLV gets padded to 4-octet alignment, and the padding is NOT counted in the Length field. So a 3-octet value has a Length of 3, but the whole TLV takes up 8 octets ๐Ÿ˜ญ Nested TLVs are 32-bit aligned too. For example, a 1-octet value has its Length field set to 1, and 3 octets of zero padding go on the end of the value ๐Ÿซถ

10.1.1. OSPFv2 Extended Inter-Area ASBR TLV

The OSPFv2 Extended Inter-Area ASBR (EIA-ASBR) TLV is a top-level TLV of the OSPFv2 EIA-ASBR LSA, and it carries the extra attributes tied to an ASBR's reachability ๐Ÿ’œ

The OSPFv2 EIA-ASBR TLV looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             Type              |           Length              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        ASBR Router ID                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   .                                                               .
   .                            Sub-TLVs                           .
   .                                                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 1
  • Length: variable number of octets.
  • ASBR Router ID: 4 octets carrying the OSPF Router ID of the ASBR whose information is being carried.
  • Sub-TLVs: variable

Only a single OSPFv2 EIA-ASBR TLV MUST be advertised in each OSPFv2 EIA-ASBR LSA, and the receiver MUST ignore every instance of this TLV except the first one in an LSA ๐Ÿ™…โ€โ™€๏ธ

The OSPFv2 EIA-ASBR TLV MUST be present inside an OSPFv2 EIA-ASBR LSA and MUST include at least a single sub-TLV. Otherwise, the OSPFv2 EIA-ASBR LSA MUST be ignored by the receiver ๐Ÿ’€

10.2. OSPF Flexible Algorithm ASBR Metric Sub-TLV

okay this is the one that makes the ASBR metric per Flex-Algorithm ๐Ÿ”ฅ The OSPF Flexible Algorithm ASBR Metric (FAAM) sub-TLV carries a Flex-Algorithm-specific metric tied to a given ASBR reachability advertisement made by an ABR โœจ

The OSPF FAAM sub-TLV is a sub-TLV of:

  • the OSPFv2 Extended Inter-Area ASBR TLV, as defined in Section 10.1.1, and
  • the OSPFv3 Inter-Area-Router TLV, as defined in [RFC8362].

The OSPF FAAM sub-TLV looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Flex-Algorithm |                   Reserved                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            Metric                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

  • Type: 1 for OSPFv2, and 33 for OSPFv3
  • Length: 8 octets
  • Flex-Algorithm: single octet value between 128 and 255 inclusive.
  • Reserved: 3 octets. MUST be set to 0 and ignored at reception.
  • Metric: 4 octets of metric information.

The OSPF FAAM sub-TLV MAY appear multiple times in its parent TLV. If it shows up more than once with the same Flex-Algorithm value, the first instance MUST be used and any subsequent instances MUST be ignored ๐ŸŽ€

The advertisement of ASBR reachability using the OSPF FAAM sub-TLV inside the OSPFv2 EIA-ASBR LSA follows Section 12.4.3 of [RFC2328], and inside the OSPFv3 E-Inter-Area-Router-LSA it follows Section 4.8.5 of [RFC5340]. The reachability of the ASBR is evaluated in the context of the specific Flex-Algorithm ๐Ÿฆ‹

The FAAM computed by the ABR is equal to the metric to reach the ASBR for a given Flex-Algorithm in a source area, or the cumulative metric via an ABR(s) when the ASBR is in a remote area. This is similar in nature to how the metric is set when the ASBR reachability metric is computed in the default algorithm for the metric in the OSPFv2 Type 4 ASBR summary-LSA and the OSPFv3 Inter-Area-Router-LSA ๐ŸŒธ

An OSPF ABR MUST NOT include the OSPF FAAM sub-TLV with a specific Flex-Algorithm in its reachability advertisement for an ASBR between areas unless that ASBR is reachable for it in the context of that specific Flex-Algorithm ๐Ÿ™ˆ

An OSPF ABR MUST include the OSPF FAAM sub-TLVs as part of the ASBR reachability advertisement between areas for any Flex-Algorithm whose winning FAD includes the M-flag, provided the ASBR is reachable in the context of that specific Flex-Algorithm ๐Ÿ‘‘

OSPF routers MUST use the OSPF FAAM sub-TLV to calculate the reachability of the ASBRs if the winning FAD for the specific Flex-Algorithm includes the M-flag. OSPF routers MUST NOT use the OSPF FAAM sub-TLV to calculate the reachability of the ASBRs for the specific Flex-Algorithm if the winning FAD for that Flex-Algorithm does not include the M-flag. Instead, the OSPFv2 Type 4 summary-LSAs or the OSPFv3 Inter-Area-Router-LSAs MUST be used, as specified in Section 16.2 of [RFC2328] and Section 4.8.5 of [RFC5340] for OSPFv2 and OSPFv3, respectively ๐Ÿ’…

The processing of a new or changed OSPF FAAM sub-TLV triggers processing of external routes, similar to what is described in Section 16.5 of [RFC2328] for OSPFv2 and Section 4.8.5 of [RFC5340] for OSPFv3, for the specific Flex-Algorithm. The OSPF external and NSSA external route calculation SHOULD be limited to Flex-Algorithm(s) whose winning FAD(s) include the M-flag ๐Ÿงš

Processing of the OSPF FAAM sub-TLV does not require the existence of the equivalent OSPFv2 Type 4 summary-LSA or the OSPFv3 Inter-Area-Router-LSA advertised by the same ABR inside the area. The base LSA is not mandatory for using the extended LSA with the OSPF FAAM sub-TLV ๐ŸŒˆ


11. Advertisement of Node Participation in a Flex-Algorithm

okay so when a router is configured to take part in a particular Flex-Algorithm and advertises that, it's officially participating in that Flex-Algorithm ๐Ÿ’–

Paths for various data planes MAY be computed for a specific Flex-Algorithm ๐Ÿฆ‹ Each data plane uses its own forwarding over those Flex-Algorithm paths. To make sure the data-plane-specific forwarding for a Flex-Algorithm actually exists, a router MUST advertise its participation for that Flex-Algorithm for each data plane ๐Ÿ”ฅ Some data planes can share a single participation advertisement (for example, SR-MPLS and SRv6) ๐Ÿซถ

Advertising participation in any particular Flex-Algorithm in any data plane is subject to the condition in Section 5.3 โœจ

11.1. Advertisement of Node Participation for Segment Routing

[RFC8665], [RFC8666], and [RFC8667] (the IGP Segment Routing extensions) describe how the SR-Algorithm is used to compute the IGP best path ๐ŸŒธ

Routers advertise support for the SR-Algorithm as a node capability, as described in those IGP Segment Routing extensions. To advertise participation for a particular Flex-Algorithm for Segment Routing, including both SR-MPLS and SRv6, the Flex-Algorithm value MUST be advertised in the SR-Algorithm TLV (OSPF) or sub-TLV (IS-IS) ๐Ÿ’œ

Segment Routing Flex-Algorithm participation advertisement is topology independent. When a router advertises participation in an SR-Algorithm, that participation applies to all topologies in which the advertising node participates ๐ŸŽ€

11.2. Advertisement of Node Participation for Other Data Planes

okay so this bit is about how other data planes (aka not Segment Routing ๐Ÿ‘€) can announce that they're part of a specific Flex-Algorithm ๐Ÿ’…

Data-plane-specific Flex-Algorithm participation advertisements MAY be topology specific or MAY be topology independent, depending on the data plane itself. ๐Ÿฆ‹ So it's up to each data plane whether its ads are tied to a topology or not.

Data-plane-specific advertisement for Flex-Algorithm participation MUST be defined for each data plane and is outside the scope of this document. ๐Ÿ“– Every data plane needs its own definition for this, and that's a whole other story, so it's not in this doc ๐Ÿ™ˆ

Various link attributes may be used during the Flex-Algorithm path calculation. โœจ For example, include or exclude rules based on link affinities can be part of the Flex-Algorithm Definition, as defined in Sections 6 and 7. ๐ŸŽ€

Okay, so application-specific link attributes (the ones in [RFC8919] or [RFC8920]) that get used during Flex-Algorithm calculation MUST use the Application-Specific Link Attribute (ASLA) advertisements defined in [RFC8919] or [RFC8920] ๐Ÿ’– The only exception is IS-IS: if the L-flag is set in the ASLA advertisement, that's the exit ramp. When the L-flag is set, then legacy advertisements MUST be used, subject to the procedures and constraints defined in Section 4.2 of [RFC8919] and Section 6. ๐ŸŒธ Main character energy for the legacy ads, honestly.

The mandatory use of ASLA advertisements applies to link attributes specifically mentioned in this document (Min Unidirectional Link Delay, TE Default Metric, Administrative Group, Extended Administrative Group, and Shared Risk Link Group) and any other link attributes that may be used in support of Flex-Algorithm in the future. ๐Ÿงš So the list is the list, plus anything that gets added later.

A new Application Identifier Bit is defined to indicate that the ASLA advertisement is associated with the Flex-Algorithm application. ๐Ÿ’œ This bit is set in the Standard Application Bit Mask (SABM) defined in [RFC8919] or [RFC8920]:

Bit 3:  Flexible Algorithm (X-bit)

ASLA Admin Group Advertisements to be used by the Flexible Algorithm application MAY use either the Administrative Group or Extended Administrative Group encodings. ๐Ÿ“ Pick your favourite, both are valid bestie.

A receiver supporting this specification MUST accept both ASLA Administrative Group and Extended Administrative Group TLVs, as defined in [RFC8919] or [RFC8920]. ๐Ÿซถ In the case of IS-IS, if the L-flag is set in the ASLA advertisement, as defined in Section 4.2 of [RFC8919], then the receiver MUST be able to accept both the Administrative Group TLV, as defined in [RFC5305], and the Extended Administrative Group TLV, as defined in [RFC7308]. ๐Ÿ”ฅ Receivers really do need to be ready for both, no cap.

13. Calculation of Flexible Algorithm Paths

A router MUST be configured to participate in a given Flex-Algorithm K and MUST select the FAD based on the rules defined in Section 5.3 before it can compute any path for that Flex-Algorithm. ๐Ÿ‘‘ No participating, no FAD, no paths. Simple as that.

No specific two-way connectivity check is performed during the Flex-Algorithm path computation. ๐Ÿ™„ The result of the existing Flex-Algorithm-agnostic, two-way connectivity check is used during the Flex-Algorithm path computation. It's giving "reuse what you already have" โœจ

As described in Section 11, participation for any particular Flex-Algorithm MUST be advertised on a per data plane basis. ๐ŸŒˆ Calculation of the paths for any particular Flex-Algorithm is data plane specific. Each data plane does its own thing here.

Multiple data planes MAY use the same Flex-Algorithm value at the same time and, as such, share the FAD for it. ๐Ÿฆ‹ Traffic for each data plane will be forwarded based on the data-plane-specific forwarding entries. So they share the recipe but cook their own food ๐Ÿ“

The Flex-Algorithm Definition is data plane independent and is used by all Flex-Algorithm data planes. ๐Ÿ’… One FAD, every data plane gets to use it.

The way various data planes handle nodes that do not participate in Flexible Algorithm is data plane specific. โœจ If the data plane only wants to consider participating nodes during the Flex-Algorithm calculation, then when computing paths for a given Flex-Algorithm, all nodes that do not advertise participation for that Flex-Algorithm in their data-plane-specific advertisements MUST be pruned from the topology. ๐Ÿ’€ Segment Routing, including both SR-MPLS and SRv6, are data planes that MUST use such pruning when computing Flex-Algorithm paths. Those nodes are getting cut from the guest list ๐Ÿ™ˆ

When computing the path for a given Flex-Algorithm, the metric-type that is part of the Flex-Algorithm Definition (Section 5) MUST be used. ๐ŸŽ€ Use the metric-type from the FAD, no substitutions.

When computing the path for a given Flex-Algorithm, the calculation-type that is part of the Flex-Algorithm Definition (Section 5) MUST be used. ๐Ÿ’– Same deal with the calculation-type, it's in the FAD, so it's the one you use.

Various links that include or exclude rules can be part of the Flex-Algorithm Definition. ๐ŸŒธ To refer to a particular bit within an Admin Group or Extended Admin Group, we use the term "color". Think of it like a little sticker on a bit ๐ŸŒˆ

Rules, in the order as specified below, MUST be used to prune links from the topology during the Flex-Algorithm computation. โญ Order matters here, bestie, so go top to bottom.

For all links in the topology:

  1. Check if any exclude Administrative Group rule is part of the Flex-Algorithm Definition. If such exclude rule exists, check if any color that is part of the exclude rule is also set on the link. If such a color is set, the link MUST be pruned from the computation. ๐Ÿšซ Sticker matches the no-fly list? Gone.
  2. Check if any exclude SRLG rule is part of the Flex-Algorithm Definition. If such exclude rule exists, check if the link is part of any SRLG that is also part of the SRLG exclude rule. If the link is part of such SRLG, the link MUST be pruned from the computation. ๐Ÿ”ฅ Same vibe, but with shared risk groups.
  3. Check if any include-any Administrative Group rule is part of the Flex-Algorithm Definition. If such include-any rule exists, check if any color that is part of the include-any rule is also set on the link. If no such color is set, the link MUST be pruned from the computation. ๐Ÿงš Needs at least one of the colors, or it's out.
  4. Check if any include-all Administrative Group rule is part of the Flex-Algorithm Definition. If such include-all rule exists, check if all colors that are part of the include-all rule are also set on the link. If all such colors are not set on the link, the link MUST be pruned from the computation. ๐Ÿ‘‘ This one is stricter: every single color has to be there.
  5. If the Flex-Algorithm Definition uses something other than the IGP metric (Section 5), and such metric is not advertised for the particular link in a topology for which the computation is done, such link MUST be pruned from the computation. A metric of value 0 MUST NOT be assumed in such a case. ๐Ÿ’… No metric advertised? Out. And absolutely do not treat it as zero, periodt ๐Ÿ˜ญ

13.1. Multi-area and Multi-domain Considerations ๐Ÿ—บ๏ธ

okay bestie, first things first: any IGP Shortest Path Tree calculation is limited to a single area ๐ŸŒธ, and Flex-Algorithm calcs are no different. The computing router can't see the topology of the next area or domain, so the Flex-Algorithm path to an inter-area or inter-domain prefix only gets computed for the local area ๐Ÿซถ. The egress L1/L2 router (that's the ABR in OSPF), or the ASBR for an inter-domain case, gets picked based on the best path for that Flex-Algorithm in the local area. Then that router is the one responsible for computing the best Flex-Algorithm path over the next area or domain ๐Ÿ’…. ngl, this can give you an end-to-end path that isn't optimal for the Flex-Algorithm constraints ๐Ÿ’€. And if the ABR or ASBR has no reachability to a prefix for that Flex-Algorithm in the next area or domain, the traffic could get dropped right there ๐Ÿ˜ญ.

To get the optimal end-to-end path for an inter-area or inter-domain prefix in any Flex-Algorithm, the FAPM was defined in Sections 8 and 9 โœจ. For external route calculation for prefixes originated by ASBRs in remote areas in OSPF, the FAAM was defined in Section 10.2. That's how the ABR tells everyone its ASBR reachability, along with the metric for that specific Flex-Algorithm ๐ŸŽ€.

If the FAD selected based on the rules defined in Section 5.3 includes the M-flag, an ABR or an ASBR MUST include the FAPM (see Sections 8 and 9) when advertising a prefix that's reachable in a given Flex-Algorithm between areas or domains. That metric is equal to the metric to reach the prefix for that Flex-Algorithm in its source area or domain. It's giving the same energy as how the metric gets set when prefixes are advertised between areas or domains for the default algorithm ๐Ÿฆ‹. When a prefix is unreachable in its source area or domain in a specific Flex-Algorithm, then an ABR or ASBR MUST NOT include the FAPM for that Flex-Algorithm when advertising the prefix between areas or domains ๐Ÿ™ˆ.

If the FAD selected based on the rules defined in Section 5.3 includes the M-flag, the FAPM MUST be used during the calculation of prefix reachability for the inter-area and external prefixes ๐Ÿ”ฅ. If the FAPM for the Flex-Algorithm isn't advertised with the inter-area or external prefix reachability advertisement, the prefix MUST be considered as unreachable for that Flex-Algorithm ๐Ÿ’€. Same vibe in OSPF for ASBRs in remote areas: if the FAAM isn't advertised by the local ABR(s), the ASBR MUST be considered as unreachable for that Flex-Algorithm, and the external prefix advertisements from that ASBR aren't considered for that Flex-Algorithm ๐Ÿ™…โ€โ™€๏ธ.

The Flex-Algorithm prefix metrics and the OSPF Flex-Algorithm ASBR metrics MUST NOT be used during the Flex-Algorithm computation unless the FAD selected based on the rules defined in Section 5.3 includes the M-flag, as described in Sections 6.4 or 7.4 ๐ŸŒˆ.

In OSPF, when calculating external routes in a Flex-Algorithm, if the winning FAD includes the M-flag and the advertising ASBR is in a remote area, the metric is the sum of:

  • the FAPM for that Flex-Algorithm advertised with the external route by the ASBR ๐Ÿ’–
  • the metric to reach the ASBR for that Flex-Algorithm from the local ABR, i.e., the FAAM for that Flex-Algorithm advertised by the ABR in the local area for that ASBR ๐Ÿงš
  • the Flex-Algorithm-specific metric to reach the local ABR ๐Ÿ“

This is similar in nature to how the metric is calculated for routes learned from remote ASBRs in the default algorithm, using the OSPFv2 Type 4 ASBR summary-LSA and the OSPFv3 Inter-Area-Router-LSA โœจ.

If the FAD selected based on the rules defined in Section 5.3 does not include the M-flag, then the IGP metrics associated with the prefix reachability advertisements used by the base IS-IS and OSPF protocol MUST be used for the Flex-Algorithm route computation. Same story for external route calculations in OSPF: the ASBR reachability is determined based on the base OSPFv2 Type 4 summary-LSA and the OSPFv3 Inter-Area-Router-LSA ๐ŸŒธ.

It is NOT RECOMMENDED to use the Flex-Algorithm for inter-area or inter-domain prefix reachability without the M-flag set, and here's why ๐Ÿšจ. Without the explicit Flex-Algorithm prefix metric advertisement (and the Flex-Algorithm ASBR metric advertisement for OSPF external route calculation), there's no way to conclude whether the ABR or ASBR has reachability to the inter-area or inter-domain prefix for a given Flex-Algorithm in the next area or domain. Sending the Flex-Algorithm traffic for that prefix towards the ABR or ASBR may result in traffic looping or persistent traffic drop ๐Ÿ˜ญ๐ŸŒ€.

During the route computation, the Flex-Algorithm-specific metric can exceed the maximum value that fits in an unsigned 32-bit variable. When that happens, the value MUST be considered to be of value 0xFFFFFFFF during the computation and advertised as such ๐Ÿ”ข.

The FAPM MUST NOT be advertised with IS-IS L1 or L2 intra-area, OSPFv2 intra-area, or OSPFv3 intra-area routes. If the FAPM is advertised for these route-types, it MUST be ignored during the prefix reachability calculation ๐Ÿ™ƒ.

The M-flag in the FAD doesn't apply to prefixes advertised as SRv6 locators ๐Ÿ’…. The IS-IS SRv6 Locator TLV [RFC9352] includes the Algorithm and Metric fields. When the SRv6 Locator is advertised between areas or domains, the Metric field in the Locator TLV of IS-IS MUST be used, irrespective of the M-flag in the FAD advertisement ๐Ÿซถ.

OSPF external and NSSA external prefix advertisements MAY include a non-zero forwarding address in the base protocol. In that case, the Flex-Algorithm-specific reachability of the external prefix is determined by the Flex-Algorithm-specific reachability of the forwarding address ๐Ÿฆ‹.

In OSPF, the procedures for translating NSSA external prefix advertisements into external prefix advertisements, performed by an NSSA ABR [RFC3101], stay unchanged for Flex-Algorithm ๐Ÿ“œ. An NSSA translator MUST include the OSPF FAPM sub-TLVs for all Flex-Algorithms that are in the original NSSA external prefix advertisement from the NSSA ASBR, in the translated external prefix advertisement it generates. That's true regardless of whether it participates in those Flex-Algorithms, or has reachability to the NSSA ASBR in those Flex-Algorithms ๐Ÿ‘‘.

An area could get partitioned from the Flex-Algorithm's point of view because of the constraints and/or metric being used for it, even while continuity holds in the base algorithm ๐Ÿ˜ฑ. When that happens, some destinations inside that area can become unreachable in that Flex-Algorithm. Those destinations can't use an inter-area path, because the inter-area prefix reachability advertisement isn't available for these intra-area destinations within the area. It's RECOMMENDED to minimize the risk of this by providing enough redundancy inside the area for each Flex-Algorithm in use ๐Ÿ›ก๏ธ๐Ÿ’œ.


14. Flex-Algorithm and Forwarding Plane ๐Ÿฆ‹

This section is all about how Flex-Algorithm paths actually get used in forwarding ๐Ÿš€.

14.1. Segment Routing MPLS Forwarding for Flex-Algorithm ๐Ÿ’ซ

This section covers how Flex-Algorithm paths are used with SR MPLS forwarding โœจ.

Prefix-SID advertisements include an SR-Algorithm value, so they're associated with the specified SR-Algorithm ๐ŸŽ€. Prefix-SIDs are also associated with a specific topology, inherited from the associated prefix reachability advertisement ๐Ÿ—‚๏ธ. When the algorithm value advertised is a Flex-Algorithm value, the Prefix-SID is associated with paths calculated using that Flex-Algorithm in the associated topology ๐ŸŒˆ.

A Flex-Algorithm path MUST be installed in the MPLS forwarding plane using the MPLS label that corresponds to the Prefix-SID advertised for that Flex-Algorithm ๐Ÿท๏ธ. If the Prefix-SID for a given Flex-Algorithm isn't known, the Flex-Algorithm-specific path can't be installed in the MPLS forwarding plane ๐Ÿ˜ต.

Traffic that's supposed to be routed via Flex-Algorithm-specific paths MUST be dropped when there are no such paths available ๐Ÿ—‘๏ธ.

Loop Free Alternate (LFA) paths ([RFC6571] or its variants) for a given Flex-Algorithm MUST be computed using the same constraints as the calculation of the primary paths for that Flex-Algorithm ๐Ÿ”. LFA paths MUST only use Prefix-SIDs advertised specifically for the given algorithm. LFA paths MUST NOT use an Adjacency SID that belongs to a link that has been pruned from the Flex-Algorithm computation ๐Ÿšซ.

If LFA protection is being used to protect a given Flex-Algorithm path, all routers in the area participating in the given Flex-Algorithm SHOULD advertise at least one Flex-Algorithm-specific Node-SID ๐Ÿ›Ÿ. These Node-SIDs are used to steer traffic over the LFA-computed backup path ๐Ÿซถ.

14.2. SRv6 Forwarding for Flex-Algorithm ๐ŸŒŠ

This section describes how Flex-Algorithm paths are used with SRv6 forwarding ๐ŸŒ.

In SRv6, a node is provisioned with a (topology, algorithm) specific locator for each of the topology/algorithm pairs it supports ๐Ÿงฉ. Each locator is an aggregate prefix for all SIDs provisioned on that node that have the matching topology/algorithm ๐Ÿ“ฆ.

The SRv6 locator advertisement in IS-IS [RFC9352] includes the Multi-Topology Identifier (MTID) value, which associates the locator with a specific topology ๐Ÿ—บ๏ธ. SRv6 locator advertisements also include an algorithm value that explicitly associates the locator with a specific algorithm ๐ŸŽฏ. When the algorithm value advertised with a locator represents a Flex-Algorithm, the paths to the locator prefix MUST be calculated using the specified Flex-Algorithm in the associated topology ๐Ÿ’….

Forwarding entries for the locator prefixes advertised in IS-IS MUST be installed in the forwarding plane of the receiving SRv6-capable routers when the associated topology/algorithm is participating in them ๐Ÿ“ฅ. Forwarding entries for locators associated with Flex-Algorithms in which the node is not participating MUST NOT be installed in the forwarding plane ๐Ÿ™…โ€โ™€๏ธ.

When the locator is associated with a Flex-Algorithm, LFA paths to the locator prefix MUST be calculated using that Flex-Algorithm in the associated topology, so they follow the same constraints as the primary paths ๐Ÿ”. LFA paths MUST only use SRv6 SIDs advertised specifically for the given Flex-Algorithm ๐ŸŽ€.

If LFA protection is being used to protect locators associated with a given Flex-Algorithm, all routers in the area participating in that Flex-Algorithm SHOULD advertise at least one Flex-Algorithm-specific locator and END SID per node, and one END.X SID for every link that has not been pruned from that Flex-Algorithm computation ๐Ÿง. These locators and SIDs are used to steer traffic over the LFA-computed backup path ๐Ÿ’œ.

14.3. Other Data Planes' Forwarding for Flex-Algorithm ๐ŸŒˆ

Any data plane that wants to use Flex-Algorithm-specific forwarding needs to install some form of Flex-Algorithm-specific forwarding entries ๐Ÿง .

Data-plane-specific forwarding for Flex-Algorithms MUST be defined for each data plane, and that work is outside the scope of this document ๐Ÿ“.


15. Operational Considerations ๐Ÿ“‹

15.1. Inter-area Considerations ๐Ÿฆ‹

okay so the scope of a Flex-Algorithm computation and the scope of the FAD is an area ๐Ÿ—บ๏ธ In IS-IS, the Router Capability TLV that carries the FAD sub-TLV MUST have the S bit clear, which keeps it from leaking outside the level it started in ๐Ÿšซ OSPF is a little different. The FAD sub-TLV can get flooded in an RI LSA with an AS flooding scope, but the FAD selection still happens separately for every area where it's actually used ๐Ÿ’…

There's no requirement that the FAD for a particular Flex-Algorithm be identical in every area ๐ŸŒˆ For example, traffic on the same Flex-Algorithm could be optimized for minimal delay (using the delay metric) in one area or level, while another area or level optimizes it for available bandwidth (using the IGP metric). Totally valid, bestie โœจ

As Section 5.1 explains, IS-IS lets the winning FAD get regenerated from level 2 into a level 1 area without any changes to it ๐ŸŽ€ This means the operator can configure the FAD on one or more routers in level 2 instead of repeating the whole thing in every level 1 area, if they want the same FAD for that Flex-Algorithm across all levels. OSPF can do the same thing by using the AS flooding scope of the RI LSA that carries the FAD sub-TLV for that Flex-Algorithm ๐Ÿ™Œ

Regenerating the FAD from a level 1 area into the level 2 area is NOT something IS-IS supports ๐Ÿ™…โ€โ™€๏ธ So if you want to regenerate the FAD between IS-IS levels, the FAD MUST be defined on a router (or routers) that's in level 2. In OSPF, the FAD can be defined in any area and then propagated to every router in the OSPF routing domain using the AS flooding scope of the RI LSA ๐Ÿ‘‘

15.2. Usage of the SRLG Exclude Rule with Flex-Algorithm ๐Ÿ”ฅ

There are two different ways SRLG information can be used with Flex-Algorithms, and they're giving two very different vibes ๐Ÿ’œ

  • In the context of a single Flex-Algorithm, it can be used to compute backup paths, as described in [RTGWG-SEGMENT-ROUTING-TI-LFA]. This usage does NOT need any specific SRLG constraint associated with the given Flex-Algorithm Definition ๐Ÿงš
  • In the context of multiple Flex-Algorithms, it can be used to create disjoint sets of paths by pruning the links that belong to a specific SRLG out of the topology that a specific Flex-Algorithm computes its paths on. This usage:
    • makes it easy to reuse SRLG configurations that are already deployed, so you can set up disjoint paths between two or more Flex-Algorithms ๐ŸŒธ
    • requires an explicit association between a given Flex-Algorithm and a specific set of SRLG constraints, as defined in Sections 6.5 and 7.5 ๐Ÿซถ

The two usages above are orthogonal, meaning they don't depend on each other at all ๐Ÿฆ‹

15.3. Max-Metric Consideration ๐Ÿ“

Both IS-IS and OSPF have a way to set the IGP metric on a link to a value that either makes the link unreachable or turns it into a link of last resort ๐Ÿ’€ Similar functionality would be needed for the Min Unidirectional Link Delay and the TE metric, since those can be used to compute Flex-Algorithm paths ๐Ÿ“

To make a link unreachable for all Flex-Algorithms that use the Min Unidirectional Link Delay as a metric (see Section 5.1), just remove the Flex-Algorithm ASLA Min Unidirectional Link Delay advertisement for that link ๐Ÿ™ˆ To make it the link of last resort instead, set the delay value in the Flex-Algorithm ASLA delay advertisement for the link to 16,777,215 (2^24 - 1) โญ

To make a link unreachable for all Flex-Algorithms that use the TE metric (see Section 5.1), remove the Flex-Algorithm ASLA TE metric advertisement for that link ๐ŸŒˆ To make it the link of last resort, set the TE metric value in the Flex-Algorithm ASLA delay advertisement for the link to (2^24 - 1) in IS-IS and (2^32 - 1) in OSPF ๐ŸŽ€

15.4. Flexible Algorithm Definition and Changes ๐Ÿง 

When you configure a node to participate in a specific Flex-Algorithm, you should think carefully about the components of the FAD (the calculation-type, metric-type, and constraints) ๐Ÿ’… Configuring participation in a Flex-Algorithm doesn't guarantee the node will actively participate in it, because the node might not support the calculation-type, the metric-type, or some constraint advertised by the winning FAD (see Section 5.3). Changes to the FAD configuration should also be considered alongside the capabilities of the participating routers in the scope of the FAD advertisement ๐Ÿซถ

As Section 5.3 points out, a change to the Flex-Algorithm Definition may require a network-wide Shortest Path First (SPF) recomputation and network reconvergence ๐Ÿ˜ญ That potential for disruption should be part of your plan whenever you make changes to the FAD ๐Ÿšง

15.5. Number of Flex-Algorithms ๐Ÿ”ข

The maximum number of Flex-Algorithms is set by the algorithm range 128-255, as specified in Section 4 ๐ŸŒŸ It's possible to use all of them, but it's NOT expected that they'll all be in use at the same time. Typically, only a limited subset of Flex-Algorithms is expected to be deployed in the network ๐Ÿ“

16. Backward Compatibility ๐Ÿ”„

This extension doesn't bring any new backward-compatibility issues ๐Ÿฅฐ IS-IS, OSPFv2, and OSPFv3 all have well-defined handling for unrecognized TLVs and sub-TLVs, which means new extensions similar to the ones defined here can be introduced without causing any interoperability issues ๐Ÿฆ‹

17. Security Considerations ๐Ÿšจ

This document adds two new ways to disrupt IGP networks, so pay attention, bestie ๐Ÿ˜ค

  • An attacker can hijack a particular Flex-Algorithm by advertising a FAD with a priority of 255 (or any priority higher than that of the legitimate nodes) ๐Ÿ‘ฟ
  • An attacker could make it look like a router supports a particular Flex-Algorithm when it actually doesn't, or vice versa ๐Ÿ™ƒ

Both of these attacks can be handled by the existing security extensions: [RFC5304] and [RFC5310] for IS-IS, [RFC2328] and [RFC7474] for OSPFv2, and [RFC4552] and [RFC5340] for OSPFv3 ๐Ÿ”

If an attacker takes over an authenticated node, that rogue node can advertise the FAD for any Flex-Algorithm ๐Ÿ˜ฑ Doing so may cause traffic for that Flex-Algorithm to be misrouted, or not delivered at all, for example by using an unsupported metric-type, calculation-type, or constraint. This kind of attack can't be prevented by authentication alone, and it's no different from advertising any other incorrect information through IS-IS or OSPF. Literally the worst-case plot twist ๐Ÿ’€

18. IANA Considerations ๐Ÿ“‹

18.1. IGP IANA Considerations ๐Ÿ—‚๏ธ

18.1.1. IGP Algorithm Types Registry ๐Ÿ”ข

This document makes the following registration in the "IGP Algorithm Types" registry โœจ

          +=========+=====================+=====================+
          | Value   | Description         | Reference           |
          +=========+=====================+=====================+
          | 128-255 | Flexible Algorithms | RFC 9350, Section 4 |
          +---------+---------------------+---------------------+

                   Table 1: IGP Algorithm Types Registry

18.1.2. IGP Metric-Type Registry ๐Ÿ“

IANA has created the "IGP Metric-Type" registry within the "Interior Gateway Protocol (IGP) Parameters" registry group ๐ŸŽ€ The registration policy is "Standards Action" [RFC8126] [RFC7120]. Values are assigned from the range 0-255, and they've been registered as follows ๐Ÿ’…

        +======+======================================+===========+
        | Type | Description                          | Reference |
        +======+======================================+===========+
        | 0    | IGP Metric                           | RFC 9350, |
        |      |                                      | Section   |
        |      |                                      | 5.1       |
        +------+--------------------------------------+-----------+
        | 1    | Min Unidirectional Link Delay as     | RFC 9350, |
        |      | defined in [RFC8570], Section 4.2    | Section   |
        |      | and [RFC7471], Section 4.2           | 5.1       |
        +------+--------------------------------------+-----------+
        | 2    | Traffic Engineering Default Metric   | RFC 9350, |
        |      | as defined in [RFC5305], Section 3.7 | Section   |
        |      | and Traffic Engineering Metric as    | 5.1       |
        |      | defined in [RFC3630], Section 2.5.5  |           |
        +------+--------------------------------------+-----------+

                     Table 2: IGP Metric-Type Registry

18.2. IGP Flexible Algorithm Definition Flags Registry ๐Ÿณ๏ธ

IANA has created the "IGP Flexible Algorithm Definition Flags" registry within the "Interior Gateway Protocol (IGP) Parameters" registry group ๐ŸŒธ The registration policy is "Standards Action". New registrations should be assigned in ascending bit order (see Section 6.4). The single bit below is the one that's been assigned so far ๐Ÿงš

        +=====+=============================+====================+
        | Bit | Name                        | Reference          |
        +=====+=============================+====================+
        | 0   | Prefix Metric Flag (M-flag) | RFC 9350, Sections |
        |     |                             | 6.4 and 7.4        |
        +-----+-----------------------------+--------------------+

        Table 3: IGP Flexible Algorithm Definition Flags Registry

18.3. IS-IS IANA Considerations ๐Ÿงฉ

18.3.1. IS-IS Sub-TLVs for IS-IS Router CAPABILITY TLV Registry ๐Ÿ“

This document makes the following registration in the "IS-IS Sub-TLVs for IS-IS Router CAPABILITY TLV" registry ๐Ÿ’–

       +=======+=====================================+=============+
       | Value | Description                         | Reference   |
       +=======+=====================================+=============+
       | 26    | Flexible Algorithm Definition (FAD) | RFC 9350,   |
       |       |                                     | Section 5.1 |
       +-------+-------------------------------------+-------------+

          Table 4: IS-IS Sub-TLVs for IS-IS Router CAPABILITY TLV
                                  Registry

18.3.2. IS-IS Sub-TLVs for TLVs Advertising Prefix Reachability Registry ๐Ÿ›ฐ๏ธ

This document makes the following registration in the "IS-IS Sub-TLVs for TLVs Advertising Prefix Reachability" registry ๐Ÿฆ‹

   +======+==================+====+=====+=====+=====+=====+===========+
   | Type | Description      | 27 | 135 | 235 | 236 | 237 | Reference |
   +======+==================+====+=====+=====+=====+=====+===========+
   | 6    | Flexible         | n  | y   | y   | y   | y   | RFC 9350, |
   |      | Algorithm Prefix |    |     |     |     |     | Section 8 |
   |      | Metric (FAPM)    |    |     |     |     |     |           |
   +------+------------------+----+-----+-----+-----+-----+-----------+

     Table 5: IS-IS Sub-TLVs for TLVs Advertising Prefix Reachability
                                 Registry

18.3.3. IS-IS Sub-Sub-TLVs for Flexible Algorithm Definition Sub-TLV Registry โœจ

okay so IANA made a new registry called "IS-IS Sub-Sub-TLVs for Flexible Algorithm Definition Sub-TLV" ๐ŸŽ€ and it lives inside the "IS-IS TLV Codepoints" registry group. The registration procedure is "Expert Review", and the group's own Expert Review guidance applies to every registry under it ๐Ÿ’…

the sub-sub-TLVs defined in this doc got assigned like this:

  +=======+========================================+=============+
  | Type  | Description                            | Reference   |
  +=======+========================================+=============+
  | 0     | Reserved                               | RFC 9350    |
  +-------+----------------------------------------+-------------+
  | 1     | Flexible Algorithm Exclude Admin Group | RFC 9350,   |
  |       |                                        | Section 6.1 |
  +-------+----------------------------------------+-------------+
  | 2     | Flexible Algorithm Include-Any Admin   | RFC 9350,   |
  |       | Group                                  | Section 6.2 |
  +-------+----------------------------------------+-------------+
  | 3     | Flexible Algorithm Include-All Admin   | RFC 9350,   |
  |       | Group                                  | Section 6.3 |
  +-------+----------------------------------------+-------------+
  | 4     | Flexible Algorithm Definition Flags    | RFC 9350,   |
  |       |                                        | Section 6.4 |
  +-------+----------------------------------------+-------------+
  | 5     | Flexible Algorithm Exclude SRLG        | RFC 9350,   |
  |       |                                        | Section 6.5 |
  +-------+----------------------------------------+-------------+
  | 6-255 | Unassigned                             |             |
  +-------+----------------------------------------+-------------+

            Table 6: IS-IS Sub-Sub-TLVs for Flexible Algorithm
                       Definition Sub-TLV Registry

18.4. OSPF IANA Considerations ๐Ÿฆ‹

18.4.1. OSPF Router Information (RI) TLVs Registry ๐ŸŒธ

this doc adds one entry to the "OSPF Router Information (RI) TLVs" registry, and it's giving main character ๐Ÿ‘‘

  +=======+=========================================+=============+
  | Value | Description                             | Reference   |
  +=======+=========================================+=============+
  | 16    | Flexible Algorithm Definition (FAD) TLV | RFC 9350,   |
  |       |                                         | Section 5.2 |
  +-------+-----------------------------------------+-------------+

         Table 7: OSPF Router Information (RI) TLVs Registry

18.4.2. OSPFv2 Extended Prefix TLV Sub-TLVs Registry ๐Ÿงš

next up, one registration in the "OSPFv2 Extended Prefix TLV Sub-TLVs" registry ๐Ÿ’–

   +=======+=========================================+===========+
   | Value | Description                             | Reference |
   +=======+=========================================+===========+
   | 3     | Flexible Algorithm Prefix Metric (FAPM) | RFC 9350, |
   |       |                                         | Section 9 |
   +-------+-----------------------------------------+-----------+

        Table 8: OSPFv2 Extended Prefix TLV Sub-TLVs Registry

18.4.3. OSPFv3 Extended-LSA Sub-TLVs Registry ๐Ÿ’œ

this one gets two registrations in the "OSPFv3 Extended-LSA Sub-TLVs" registry, so iykyk ๐Ÿ™ˆ

 +=======+=========================================+==============+
 | Value | Description                             | Reference    |
 +=======+=========================================+==============+
 | 26    | Flexible Algorithm Prefix Metric (FAPM) | RFC 9350,    |
 |       |                                         | Section 9    |
 +-------+-----------------------------------------+--------------+
 | 33    | OSPF Flexible Algorithm ASBR Metric     | RFC 9350,    |
 |       |                                         | Section 10.2 |
 +-------+-----------------------------------------+--------------+

           Table 9: OSPFv3 Extended-LSA Sub-TLVs Registry

18.4.4. OSPF Flex-Algorithm Prefix Metric Bits Registry โœจ

IANA made a new "OSPF Flex-Algorithm Prefix Metric Bits" registry under the "Open Shortest Path First (OSPF) Parameters" registry. The registration procedure is "IETF Review". Bits 1-7 are unassigned, and bit 0 got its initial value like this ๐ŸŽ€

     +============+=======================+=====================+
     | Bit Number | Description           | Reference           |
     +============+=======================+=====================+
     | 0          | E bit - External Type | RFC 9350, Section 9 |
     +------------+-----------------------+---------------------+

      Table 10: OSPF Flex-Algorithm Prefix Metric Bits Registry

this doc registers one entry in the "Opaque Link-State Advertisements (LSA) Option Types" registry, which sits inside the "Open Shortest Path First (OSPF) Opaque Link-State Advertisements (LSA) Option Types" registry group ๐Ÿซถ

          +=======+==========================+==============+
          | Value | Opaque Type              | Reference    |
          +=======+==========================+==============+
          | 11    | OSPFv2 Extended Inter-   | RFC 9350,    |
          |       | Area ASBR (EIA-ASBR) LSA | Section 10.1 |
          +-------+--------------------------+--------------+

               Table 11: Opaque Link-State Advertisements
                      (LSA) Option Types Registry

18.4.6. OSPFv2 Extended Inter-Area ASBR TLVs Registry ๐Ÿ“

IANA created the "OSPFv2 Extended Inter-Area ASBR TLVs" registry inside the "Open Shortest Path First v2 (OSPFv2) Parameters" registry group. The registration procedure is "IETF Review" or "IESG Approval". The initial value went in like this:

           +=======+==========================+===========+
           | Value | Description              | Reference |
           +=======+==========================+===========+
           | 1     | Extended Inter-Area ASBR | RFC 9350  |
           +-------+--------------------------+-----------+

              Table 12: OSPFv2 Extended Inter-Area ASBR
                            TLVs Registry

the values 2-32767 are unassigned, the values 32768-33023 are reserved for Experimental Use, and the values 0 and 33024-65535 are reserved ๐Ÿ™ƒ

18.4.7. OSPFv2 Extended Inter-Area ASBR Sub-TLVs Registry ๐Ÿ’…

IANA created the "OSPFv2 Extended Inter-Area ASBR Sub-TLVs" registry under the "Open Shortest Path First v2 (OSPFv2) Parameters" registry. The registration procedure is "IETF Review" or "IESG Approval". The initial value is:

      +=======+=====================================+===========+
      | Value | Description                         | Reference |
      +=======+=====================================+===========+
      | 1     | OSPF Flexible Algorithm ASBR Metric | RFC 9350  |
      +-------+-------------------------------------+-----------+

      Table 13: OSPFv2 Extended Inter-Area ASBR Sub-TLVs Registry

the values 2-32767 are unassigned, the values 32768-33023 are reserved for Experimental Use, and the values 0 and 33024-65535 are reserved, same as the TLVs registry above ๐ŸŒธ

18.4.8. OSPF Flexible Algorithm Definition TLV Sub-TLVs Registry ๐Ÿ‘‘

IANA created the "OSPF Flexible Algorithm Definition TLV Sub-TLVs" registry within the "Open Shortest Path First (OSPF) Parameters" registry group. The registration procedure is "IETF Review" or "IESG Approval".

this registry defines sub-TLVs at any level of nesting for the Flexible Algorithm TLV, and new values can be allocated through the registration procedure ๐Ÿงš

this doc registers the following sub-TLVs:

+============+========================================+=============+
| Bit Number | Description                            | Reference   |
+============+========================================+=============+
| 0          | Reserved                               | RFC 9350    |
+------------+----------------------------------------+-------------+
| 1          | Flexible Algorithm                     | RFC 9350,   |
|            | Exclude Admin Group                    | Section 7.1 |
+------------+----------------------------------------+-------------+
| 2          | Flexible Algorithm                     | RFC 9350,   |
|            | Include-Any Admin Group                | Section 7.2 |
+------------+----------------------------------------+-------------+
| 3          | Flexible Algorithm                     | RFC 9350,   |
|            | Include-All Admin Group                | Section 7.3 |
+------------+----------------------------------------+-------------+
| 4          | Flexible Algorithm                     | RFC 9350,   |
|            | Definition Flags                       | Section 7.4 |
+------------+----------------------------------------+-------------+
| 5          | Flexible Algorithm                     | RFC 9350,   |
|            | Exclude SRLG                           | Section 7.5 |
+------------+----------------------------------------+-------------+

  Table 14: OSPF Flexible Algorithm Definition TLV Sub-TLVs Registry

the values 6-32767 are unassigned, and values 32768-33023 are for Experimental Use. these won't be registered with IANA ๐Ÿ™ˆ

types in the range 33024-65535 aren't to be assigned at this time. Before any assignments can be made in that range, there MUST be an IETF specification that specifies IANA considerations covering the range being assigned. no cap, that's a hard rule ๐Ÿ”ฅ

this doc registers one bit in the "Link Attribute Application Identifiers" registry ๐ŸŒˆ

     +=====+============================+======================+
     | Bit | Description                | Reference            |
     +=====+============================+======================+
     | 3   | Flexible Algorithm (X-bit) | RFC 9350, Section 12 |
     +-----+----------------------------+----------------------+

      Table 15: Link Attribute Application Identifiers Registry

19. References ๐Ÿ“š

19.1. Normative References โœจ

19.2. Informative References ๐Ÿฆ‹

Acknowledgements ๐Ÿซถ

Okay bestie, this section is basically a big thank-you note ๐Ÿ’– Among other things, this document tackles the problem that [ROUTING-PLANES-USING-SR] was going after, and every author of that document agreed to join this one. Iconic teamwork ๐Ÿ‘‘

Huge thanks to Eric Rosen, Tony Przygienda, William Britto A. J., Gunter Van de Velde, Dirk Goethals, Manju Sivaji, and Baalajee S. for their detailed review and excellent comments ๐ŸŒธ Thanks to Cengiz Halit for his review and feedback during the initial phase of the solution definition โœจ Thanks to Kenji Kumaki for his comments ๐Ÿ’œ And thanks to Acee Lindem for the editorial comments ๐Ÿ’…

Authors' Addresses ๐ŸŽ€

Peter Psenak (editor)
Cisco Systems, Inc.
Apollo Business Center
Mlynske nivy 43
82109 Bratislava
Slovakia
Email: ppsenak@cisco.com


Shraddha Hegde
Juniper Networks, Inc.
Embassy Business Park
Bangalore 560093
KA
India
Email: shraddha@juniper.net


Clarence Filsfils
Cisco Systems, Inc.
Brussels
Belgium
Email: cfilsfil@cisco.com


Ketan Talaulikar
Cisco Systems, Inc
India
Email: ketant.ietf@gmail.com


Arkadiy Gulko
Edward Jones
Email: arkadiy.gulko@edwardjones.com

That's the whole spec, bestie! ๐ŸŒˆโœจ Go forth and implement it, you absolutely iconic protocol queen ๐Ÿ‘‘๐Ÿ’–

๐Ÿ“ฆ where this page comes from