RFC 9843

IGP Flexible Algorithms: Bandwidth, Delay, Metrics, and Constraints

๐Ÿ“… published September 2025, from ietf

RFC 9843: IGP Flexible Algorithms: Bandwidth, Delay, Metrics, and Constraints ๐ŸŽ€

Okay bestie, meet RFC 9843 ๐Ÿ’– It's an IETF Standards Track document, so it's a real spec that implementers depend on, not just vibes. It was published in September 2025 under ISSN 2070-1721 โœจ. The authors are S. Hegde, W. Britto, R. Shetty (Juniper Networks Inc.), B. Decraene (Orange), P. Psenak (Cisco Systems), and T. Li (Juniper Networks Inc.) ๐Ÿซถ. It updates RFC 9350 ๐Ÿฆ‹, so keep that in mind when you read 9350 next to this one.

Abstract ๐ŸŒธ

So the gist is that lots of networks set the IGP link metric based on link capacity, and high bandwidth traffic gets routed over the big links ๐Ÿš—. Flexible Algorithms are how you build constraint-based paths inside an IGP ๐Ÿ’…. This spec defines a generic metric-type plus a set of bandwidth-related constraints you can use with Flexible Algorithms, and honestly it's giving main character energy ๐Ÿ‘‘.

This document updates RFC 9350.

Status of This Memo ๐Ÿงš

This is an Internet Standards Track document.

It's a product of the Internet Engineering Task Force (IETF), so it represents the consensus of the IETF community ๐Ÿค. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check Section 2 of RFC 7841 ๐Ÿ“š.

Info about the current status of this document, any errata, and how to send feedback lives at https://www.rfc-editor.org/info/rfc9843 ๐Ÿ’Œ.

Copyright (c) 2025 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. Please actually read these, because they spell out your rights and restrictions for 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 they're provided without warranty as described in the Revised BSD License ๐Ÿ“.

Table of Contents ๐Ÿ—‚๏ธ

1.  Introduction
  1.1.  Requirements Language
2.  Generic Metric Advertisement
  2.1.  IS-IS Generic Metric Sub-TLV
  2.2.  OSPF Generic Metric Sub-TLV
  2.3.  Generic Metric Applicability to Flexible Algorithm
        Multi-Domain/Multi-Area Networks
3.  FAD Constraint Sub-TLVs
  3.1.  IS-IS FAD Constraint Sub-TLVs
    3.1.1.  IS-IS Exclude Minimum Bandwidth Sub-TLV
    3.1.2.  IS-IS Exclude Maximum Delay Sub-TLV
  3.2.  OSPF FAD Constraint Sub-TLVs
    3.2.1.  OSPF Exclude Minimum Bandwidth Sub-TLV
    3.2.2.  OSPF Exclude Maximum Delay Sub-TLV
4.  Bandwidth Metric Advertisement
  4.1.  Automatic Metric Calculation
    4.1.1.  Automatic Metric Calculation Modes
    4.1.2.  Automatic Metric Calculation Methods
    4.1.3.  IS-IS FAD Constraint Sub-TLVs for Automatic Metric
            Calculation
    4.1.4.  OSPF FAD Constraint Sub-TLVs for Automatic Metric
            Calculation
5.  Bandwidth Metric Considerations
6.  Calculation of Flex-Algorithm Paths
7.  Backward Compatibility
8.  Security Considerations
9.  Operational Considerations
10. IANA Considerations
  10.1.  IGP Metric-Type Registry
  10.2.  IS-IS Sub-Sub-TLVs for Flexible Algorithm Definition
         Sub-TLV
  10.3.  OSPF Sub-TLVs for Flexible Algorithm Definition Sub-TLV
  10.4.  IS-IS Sub-TLVs for TLVs Advertising Neighbor Information
  10.5.  Sub-Sub-TLV Codepoints for Application-Specific Link
         Attributes
  10.6.  OSPFv2 Extended Link TLV Sub-TLVs
  10.7.  Types for Sub-TLVs of TE Link TLV (Value 2)
  10.8.  OSPFv3 Extended-LSA Sub-TLVs
11. References
  11.1.  Normative References
  11.2.  Informative References
Appendix A.  Updated List of Rules for Pruning Links in
        Flex-Algorithm Topology
Acknowledgements
Contributors
Authors' Addresses

1. Introduction โœจ

Okay so high bandwidth traffic, like residential Internet traffic and machine-to-machine elephant flows, really benefits from high capacity links ๐Ÿ˜. That's why lots of network operators set a link's metric relative to its capacity, to steer traffic toward the fatter pipes. But that's no guarantee the slower links get avoided, especially when stuff breaks ๐Ÿ˜ญ. If you want elephant flows to only land on high capacity links, it would be useful to explicitly keep the high throughput traffic off any link below a certain capacity ๐Ÿ’–. Flex-Algorithm [RFC9350] gives you a way to build constrained paths by defining a set of parameters: a calculation-type, a metric-type, and a set of constraints. In this document, we add more extensions to the Flexible Algorithm Definition (FAD) so operators get extra control over their traffic flows, especially around bandwidth constraints ๐ŸŽ€.

Historically, IGPs computed paths by minimizing the sum of the link metrics along the path from source to destination ๐Ÿ›ฃ๏ธ. The metric is administratively defined, but implementations have defaulted to a metric that's inversely proportional to link bandwidth. That pushed traffic onto higher bandwidth links, and it meant people had to manually tweak metrics to get the network loaded the way they wanted ๐Ÿ™„.

Over time, as different traffic types showed up, the need for other kinds of metrics grew ๐Ÿ“ˆ. Flex-Algorithm already supports the minimum link delay and the administratively assigned traffic-engineering metrics in path computation. Still, it's clear that other metrics could be useful in different situations โœจ. A network operator might want to minimize operational costs, so they'd want a metric that reflects the actual fiscal cost of using a link ๐Ÿ’ธ. Other traffic might need low jitter, which calls for a completely different set of metrics ๐Ÿฆ‹. With Flex-Algorithm, all of these metrics, and more, could be used at the same time on the same network ๐ŸŒˆ.

Sometimes path computation constraints, like administrative groups, are used to make sure traffic avoids certain parts of the network ๐Ÿšง. These strict constraints fit when there's an absolute requirement to avoid parts of the topology, even during failures ๐Ÿ™…โ€โ™€๏ธ. But if the requirement is less strict, then putting a high metric on a portion of the topology may be a better fit ๐Ÿง.

This document defines a family of generic metrics that can advertise various types of administratively assigned metrics ๐Ÿ“ฃ. It introduces standard metric-types that have specific semantics and need standardization. It also specifies user-defined metric-types, where the specifics aren't defined, so administrators are free to assign whatever semantics they like ๐ŸŽจ.

Section 3 defines additional FAD [RFC9350] constraints that let the network administrator rule out low bandwidth links or high delay links ๐Ÿšซ. Section 4 specifies a new bandwidth-based metric-type to be used with Flex-Algorithm and other applications ๐Ÿ’….

Section 4.1 defines mechanisms to automatically calculate link metrics based on the parameters in the FAD and the advertised Maximum Link Bandwidth of each link ๐Ÿค–. This is a big deal because administrators can change their criteria for metric assignment in one central place, without touching each link's metric across the whole network ๐Ÿ™Œ. The procedures here are meant to assign a metric to a link based on total link capacity. They are not meant to update the metric based on actual traffic flow ๐Ÿšซ๐Ÿ“Š. So these procedures don't replace the capability of a PCE [RFC4655], which has a dynamic view of the network and provides real-time bandwidth management, or a distributed bandwidth management protocol ๐Ÿง .

1.1. Requirements Language ๐Ÿ’œ

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.

2. Generic Metric Advertisement ๐ŸŒท

IS-IS [RFC1195] and OSPF [RFC2328] advertise a metric for each link in their respective link state advertisements ๐Ÿ“ก. Multiple metric-types are already supported ๐Ÿ™Œ. Administratively assigned metrics are described in the original OSPF and IS-IS specifications. The Traffic Engineering Default Metric is defined in [RFC5305] and [RFC3630], and the Unidirectional Link Delay is defined in [RFC8570] and [RFC7471] โฑ๏ธ. Other metrics, like jitter, reliability, and fiscal cost, may be helpful depending on the traffic class ๐Ÿ’ธ. Rather than trying to list every metric someone might care about, this document specifies a generic mechanism for advertising metrics ๐Ÿซถ.

Each generic metric advertisement is on a per-link and per-metric-type basis ๐Ÿ”—. The metric advertisement has a metric-type field and a value for the metric. The metric-type field is assigned in the "IGP Metric-Type" IANA registry. Metric-types 0-127 are standard metric-types as assigned by IANA ๐Ÿ“‹. This document further specifies a user-defined metric-type space, metric-types 128-255, which an operator can assign for local use ๐ŸŽ€.

Implementations MUST support sending and receiving a Generic Metric sub-TLV in Application-Specific Link Attributes (ASLA) encodings, as well as in TLV 22 and Extended Link Opaque Link State Advertisements (LSAs) [RFC7684] and TE-LSAs ๐Ÿ› ๏ธ. The usage of a generic metric by an individual application is subject to the same rules that apply to other link attributes, as defined in [RFC3630], [RFC5305], [RFC9479], [RFC9492], and [RFC9350] ๐Ÿ’….

2.1. IS-IS Generic Metric Sub-TLV โœจ

okay so the IS-IS Generic Metric sub-TLV is how a link's metric gets told to the world for a given metric-type ๐Ÿ’… and usually a network admin is the one picking that number ๐ŸŽ€. it shows up in these TLVs/sub-TLVs:

  • a. TLV 22 (Extended IS reachability) [RFC5305]
  • b. TLV 222 (MT-ISN) [RFC5120]
  • c. TLV 23 (IS Neighbor Attribute) [RFC5311]
  • d. TLV 223 (MT IS Neighbor Attribute) [RFC5311]
  • e. TLV 141 (Inter-AS Reachability Information) [RFC9346]
  • f. sub-TLV 16 (Application-Specific Link Attributes (ASLA)) of TLVs 22/222/23/223/141 [RFC9479]
  • g. TLV 25 (L2 Bundle Member Attributes) [RFC8668]. Marked as "y(s)" (shareable among bundle members). ๐Ÿซถ

here's the layout bestie, it's giving very neat boxes ๐Ÿฆ‹

    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    |  metric-type  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Value                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                Figure 1: IS-IS Generic Metric Sub-TLV

now the fields, lowkey the important part ๐ŸŒธ

Type (1 octet): an 8-bit field that IANA assigned (17). this value uniquely identifies the Generic Metric TLV, so it's basically its name tag ๐Ÿท๏ธ

Length (1 octet): an 8-bit field giving the total length, in octets, of the fields after it. for this TLV the Length is set to 4 ๐Ÿ“

Metric-Type (1 octet): an 8-bit field that says what kind of metric this is. the value comes from the "IGP Metric-Type" registry that IANA keeps. the metric-type can be any value the "IGP Metric-Type" registry marks as allowed in the Generic Metric sub-TLV ๐Ÿงš

Value (3 octets): a 24-bit unsigned integer that holds the metric value. the valid range is 0 to 16,777,215 (0xFFFFFF) ๐Ÿ”ข

so the Generic Metric sub-TLV MAY be advertised multiple times ๐ŸŽ‰ but for a particular metric-type, it MUST be advertised only once for a link when it's advertised in TLVs 22, 222, 23, 223, and 141. when it's advertised in ASLA, each metric-type MUST be advertised only once per application for a link ๐Ÿ’œ and if a link has multiple Generic Metric sub-TLVs for the same metric-type (and the same application in the ASLA case) across one or more received Link State Protocol Data Units (LSPDUs), the advertisement in the lowest-numbered fragment MUST be used, and the later instances MUST be ignored ๐Ÿ™ˆ

next up, legacy metrics. for a link, if the metric-type matches one that already has a legacy advertisement mechanism (like the IGP Metric, the Min Unidirectional Link Delay, or the Traffic Engineering Default Metric), the legacy metric-types MUST be utilized from the existing TLV or sub-TLVs. if a Generic Metric advertises a legacy metric, it MUST be ignored ๐Ÿ’…

the max metric moment ๐Ÿ˜ญ a metric value of 0xFFFFFF is treated as a maximum link metric, and a link with that value MUST be used during Flex-Algorithm calculations as a last resort link, as described in Section 15.3 of [RFC9350]. and if you want a link to be totally unusable by Flex-Algorithm, just leave out the Generic Metric advertisement for the metric-type that the Flex-Algorithm uses, as described in [RFC9350] ๐Ÿ’€

and during router maintenance, the Generic Metric for all the links on the node MAY be set to the max value of 16,777,215 (0xFFFFFF), since that's the maximum usable link metric for the Flex-Algorithm calculations ๐Ÿ› ๏ธโœจ


2.2. OSPF Generic Metric Sub-TLV ๐ŸŒˆ

the OSPF version is giving the same energy: it sets the link metric for a given metric-type, and a network admin usually picks it ๐ŸŽ€. it gets advertised in these TLVs:

  • a. sub-TLV of TE Link TLV (type 2) of OSPF TE LSA [RFC3630].
  • b. sub-TLV of TE Link TLV (type 2) of OSPFv2 Inter-AS-TE-v2 LSA [RFC5392].
  • c. sub-TLV of TE Link TLV (type 2) of OSPFv3 Intra-Area-TE-LSA [RFC5329].
  • d. sub-TLV of TE Link TLV (type 2) of OSPFv3 Inter-AS-TE-v3 LSA [RFC5392].
  • e. sub-TLV of Application-Specific Link Attributes (ASLA) sub-TLV [RFC9492] of the OSPFv2 Extended Link TLV [RFC7684].
  • f. sub-TLV of Application-Specific Link Attributes (ASLA) sub-TLV [RFC9492] of the OSPFv3 Router-Link TLV [RFC8362].
  • g. sub-TLV of the OSPFv2 L2 Bundle Member Attributes sub-TLV [RFC9356].
  • h. sub-TLV of the OSPFv3 L2 Bundle Member Attributes sub-TLV [RFC9356].

the Generic Metric sub-TLV (types 25/36/34) is 8 octets long, so here's the picture ๐Ÿฆ‹

     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            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | metric-type   |         Reserved (MBZ)                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                            Value                              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 2: OSPF Generic Metric Sub-TLV

field by field, bestie ๐Ÿ’–

Type (2 octets): a 16-bit field that IANA assigned (25/36/34). this value uniquely identifies the Generic Metric TLV ๐Ÿท๏ธ

Length (2 octets): a 16-bit field giving the total length, in octets, of the fields after it. for this TLV the Length is set to 8 ๐Ÿ“

Metric-Type (1 octet): an 8-bit field that says what kind of metric this is. the value comes from the "IGP Metric-Type" registry maintained by IANA. the metric-type can be any value that the "IGP Metric-Type" registry marks as allowed in the Generic Metric sub-TLV ๐Ÿงš

Reserved (3 octets): MUST set to zero by the sender and MUST be ignored by the receiver ๐Ÿค

Value (4 octets): a 32-bit unsigned integer that holds the metric value. the valid range is 0 to 4,294,967,295 (0xFFFFFFFF) ๐Ÿ”ข

the Generic Metric sub-TLV MAY be advertised multiple times here too ๐ŸŽ‰ for a particular metric-type it MUST be advertised only once for a link when it's advertised as (a) through (d) above. when it's a sub-TLV of ASLA, it MUST be advertised only once per application for a link ๐Ÿ’œ and if there are multiple Generic Metric sub-TLVs for a link with the same metric-type (and the same application in the ASLA case) across one or more received LSAs, the advertisement in the lowest-numbered LSA MUST be used, and the subsequent instances MUST be ignored ๐Ÿ™ˆ

the legacy stuff is the same vibe: for a link, if the metric-type has a legacy advertisement mechanism (like the IGP Metric, the Min Unidirectional Link Delay, or the Traffic Engineering Default Metric), the legacy metric-types MUST be utilized from the existing TLV or sub-TLVs. if a Generic Metric advertises a legacy metric, it MUST be ignored ๐Ÿ’…

max metric alert ๐Ÿ˜ญ a metric value of 0xFFFFFFFF is considered a maximum link metric, and a link with this metric value MUST be used during Flex-Algorithm calculations as a last resort link, as described in Section 15.3 of [RFC9350]. and yes, a link can be made unusable by Flex-Algorithm by leaving out the Generic Metric advertisement of the metric-type that the Flex-Algorithm uses, as described in [RFC9350] ๐Ÿ’€

and during router maintenance, the Generic Metric for all the links on the node MAY be set to the max value of 4,294,967,295 (0xFFFFFFFF), since it's the maximum usable link metric for the Flex-Algorithm calculations ๐Ÿ› ๏ธโœจ


2.3. Generic Metric Applicability to Flexible Algorithm Multi-Domain/Multi-Area Networks ๐ŸŒธ

okay so Generic Metric can be used by Flex-Algorithm just by putting the metric-type in the Flexible Algorithm Definitions ๐Ÿฆ‹ when Flex-Algorithm runs in a multi-area network, [RFC9350] defines the Flexible Algorithm Prefix Metric (FAPM) sub-TLV, which carries the Flexible-Algorithm-specific metric ๐Ÿงš the metrics carried in FAPM are equal to the metric to reach the prefix for that Flex-Algorithm in its source area or domain (the source area from the Area Border Router (ABR) perspective) ๐Ÿ‘‘ and when Flex-Algorithm uses Generic Metric, the same procedures from Section 13 of [RFC9350] are used to send and process the FAPM sub-TLV ๐Ÿซถ


3. FAD Constraint Sub-TLVs ๐Ÿ’œ

so picture this: large high throughput flows are called "elephant flows" ๐Ÿ˜ and if an elephant flow gets sent down a low-bandwidth link, it might congest that link and make other critical application traffic on it drop ๐Ÿ˜ญ so in the context of Flex-Algorithm, it would be super useful to constrain the topology to only the links that can handle a minimum amount of bandwidth ๐Ÿ’…

if the capacity of a low-bandwidth link is constant, you can already avoid those links with administrative groups ๐ŸŽ€ but when a Layer 3 link is really a bunch of Layer 2 links (a Link Aggregation Group (LAG) / Layer 2 Bundle), the link bandwidth changes depending on which constituent links are active ๐ŸŒˆ you could automate that by having an implementation vary the advertised administrative groups based on bandwidth, but that seems unnecessarily complex ๐Ÿ™ˆ expressing the requirement as a direct constraint on the topology is simpler. it's also a win if the minimum required bandwidth changes, because this constraint gives you a single, centralized, coordinated point of control ๐Ÿ‘‘

so to cover this, this document defines an Exclude Minimum Bandwidth constraint โœจ when this constraint is advertised in a FAD, a link gets pruned from the Flex-Algorithm topology if the link's advertised maximum link bandwidth value is below the FAD advertised minimum bandwidth value ๐Ÿ”ฅ

same energy with the Exclude Maximum Link Delay constraint ๐Ÿฆ‹ applications like High-Frequency Trading are sensitive to link delays, and they can perform poorly in networks that are prone to delay variability, like networks with transparent Layer 2 link recovery mechanisms or satellite links ๐Ÿ›ฐ๏ธ there are already mechanisms to measure link delay dynamically and advertise it in the IGP, so networks that use dynamic link-delay measurement might want to exclude links whose delay is over a given threshold ๐Ÿงš

3.1. IS-IS FAD Constraint Sub-TLVs ๐ŸŒท

3.1.1. IS-IS Exclude Minimum Bandwidth Sub-TLV ๐Ÿ’–

okay so the IS-IS Flex-Algorithm Exclude Minimum Bandwidth (FAEMB) sub-TLV is a sub-TLV of the IS-IS FAD sub-TLV ๐ŸŽ€ here's how it's laid out:

       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     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Min Bandwidth                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Figure 3: IS-IS FAEMB Sub-TLV

where:

Type (1 octet): an 8-bit field assigned by IANA (6) โœจ this value uniquely identifies the FAEMB sub-TLV, so it's basically its ID card ๐Ÿชช

Length (1 octet): an 8-bit field showing the total length, in octets, of the fields that come after it ๐Ÿ“ for this sub-TLV, the Length is set to 4.

Min Bandwidth (4 octets): a 32-bit field giving the link bandwidth in IEEE floating point format (32 bits) [IEEE754-2019] ๐ŸŒˆ the units are bytes per second.

ok the FAEMB sub-TLV MUST appear once at most in the FAD sub-TLV ๐Ÿ‘‘ if it shows up more than once, the IS-IS FAD sub-TLV MUST be ignored by the receiver ๐Ÿ’€ no double-dipping allowed bestie.

the minimum bandwidth value advertised in the FAEMB sub-TLV MUST be compared with the maximum link bandwidth value advertised in sub-sub-TLV 9 of the ASLA sub-TLV [RFC9479] ๐Ÿ”ฅ and if the L-flag is set in the ASLA sub-TLV, then the minimum bandwidth value in the FAEMB sub-TLV MUST be compared with the maximum link bandwidth value as advertised in the sub-TLV 9 of the TLVs 22/222/23/223/141 [RFC5305], as defined in Section 4.2 of [RFC9479] ๐Ÿงš

if the maximum link bandwidth value is lower than the minimum link bandwidth value advertised in the FAEMB sub-TLV, the link MUST be excluded from the Flex-Algorithm topology ๐Ÿ™ˆ and if a link doesn't have the Maximum Link Bandwidth advertised but the FAD contains the FAEMB sub-TLV, then that link MUST NOT be excluded from the topology based on the Minimum Bandwidth constraint ๐Ÿซถ the link gets to stay, no cap.

3.1.2. IS-IS Exclude Maximum Delay Sub-TLV ๐ŸŒธ

okay next up, the IS-IS Flex-Algorithm Exclude Maximum Delay (FAEMD) sub-TLV, which is also a sub-TLV of the IS-IS FAD sub-TLV ๐Ÿฆ‹ layout time:

       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     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Max Link Delay            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Figure 4: IS-IS FAEMD Sub-TLV

where:

Type (1 octet): an 8-bit field assigned by IANA (7) ๐Ÿชช this uniquely identifies the FAEMD sub-TLV.

Length (1 octet): an 8-bit field showing the total length, in octets, of the fields after it ๐Ÿ“ for this sub-TLV, the Length is set to 3.

Max Link Delay (3 octets): a 24-bit field giving the Maximum link delay in microseconds โฑ๏ธ

the FAEMD sub-TLV MUST appear only once in the FAD sub-TLV ๐Ÿ’… if it appears more than once, the IS-IS FAD sub-TLV MUST be ignored by the receiver ๐Ÿ˜ญ rules are rules, bestie.

the maximum link delay value advertised in the FAEMD sub-TLV MUST be compared with the Min Unidirectional Link Delay advertised in sub-sub-TLV 34 of the ASLA sub-TLV [RFC9479] ๐ŸŒˆ and if the L-flag is set in the ASLA sub-TLV, the maximum link delay value advertised in the FAEMD sub-TLV MUST be compared with the Min Unidirectional Link Delay as advertised by the sub-TLV 34 of the TLVs 22/222/23/223/141 [RFC8570], as defined in Section 4.2 of [RFC9479] โœจ

if the Min Unidirectional Link Delay value is higher than the Maximum Link Delay advertised in the FAEMD sub-TLV, the link MUST be excluded from the Flex-Algorithm topology ๐Ÿšซ and if the Min Unidirectional Link Delay isn't advertised but the FAD contains the FAEMD sub-TLV, then that link MUST NOT be excluded from the topology based on the Maximum Delay constraint ๐Ÿ“ it's giving "benefit of the doubt."

3.2. OSPF FAD Constraint Sub-TLVs ๐Ÿงš

3.2.1. OSPF Exclude Minimum Bandwidth Sub-TLV ๐Ÿ’œ

okay so the OSPF Flex-Algorithm Exclude Minimum Bandwidth (FAEMB) sub-TLV is a sub-TLV of the OSPF FAD TLV ๐ŸŽ€ 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                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Min Bandwidth                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Figure 5: OSPF FAEMB Sub-TLV

where:

Type (2 octets): a 16-bit field assigned by IANA (6) ๐Ÿชช this uniquely identifies the OSPF FAEMB sub-TLV.

Length (2 octets): a 16-bit field showing the total length, in octets, of the fields after it ๐Ÿ“ for this sub-TLV, the Length is set to 4.

Min Bandwidth (4 octets): a 32-bit field giving the link bandwidth in IEEE floating point format (32 bits)[IEEE754-2019] ๐ŸŒˆ the units are bytes per second.

the FAEMB sub-TLV MUST only appear once in the FAD sub-TLV ๐Ÿ‘‘ if it appears more than once, the OSPF FAD TLV MUST be ignored by the receiver ๐Ÿ’€

the Maximum Link Bandwidth as advertised in the Extended Link TLV in the Extended Link Opaque LSA in OSPFv2 [RFC7684], or as a sub-TLV of the Router-Link TLV of the E-Router-LSA Router-Link TLV in OSPFv3 [RFC8362], MUST be compared against the Minimum Bandwidth advertised in the FAEMB sub-TLV ๐Ÿ”ฅ if the link bandwidth value is lower than the Minimum Bandwidth advertised in the FAEMB sub-TLV, the link MUST be excluded from the Flex-Algorithm topology ๐Ÿ™ˆ

if a link doesn't have the Maximum Link Bandwidth advertised but the FAD contains the FAEMB sub-TLV, then that link MUST be included in the topology and proceed to apply further pruning rules for the link ๐Ÿฆ‹ so it doesn't get cut yet, it just keeps going through the checks.

3.2.2. OSPF Exclude Maximum Delay Sub-TLV ๐ŸŒˆ

okay the OSPF Flex-Algorithm Exclude Maximum Delay (FAEMD) sub-TLV is a sub-TLV of the OSPF FAD TLV ๐Ÿ’… 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                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  RESERVED     |                     Max Link Delay            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Figure 6: OSPF FAEMD Sub-TLV

where:

Type (2 octets): a 16-bit field assigned by IANA (7) ๐Ÿชช this uniquely identifies the OSPF FAEMD sub-TLV.

Length (2 octets): a 16-bit field showing the total length, in octets, of the fields after it ๐Ÿ“ for this sub-TLV, the Length is set to 4.

Reserved (1 octet): MUST be set to zero by the sender and MUST be ignored by the receiver ๐Ÿซง

Max Link Delay (3 octets): a 24-bit field giving the Maximum link delay in microseconds โฑ๏ธ

the FAEMD sub-TLV MUST only appear once in the OSPF FAD TLV โœจ if it appears more than once, the OSPF FAD TLV MUST be ignored by the receiver ๐Ÿ˜ญ

the Min Delay value advertised via the Min/Max Unidirectional Link Delay of the ASLA sub-TLV [RFC9492] MUST be compared against the Maximum Delay advertised in the FAEMD sub-TLV ๐ŸŒธ if the Min Unidirectional Link Delay is higher than the Maximum Delay advertised in the FAEMD sub-TLV, the link MUST be excluded from the Flex-Algorithm topology ๐Ÿšซ and if the Min/Max Unidirectional Link Delay isn't advertised for a link but the FAD contains this sub-TLV, then that link MUST NOT be excluded from the topology based on the Maximum Delay constraint ๐Ÿ“

4. Bandwidth Metric Advertisement ๐ŸŒˆ

okay so historically, IGP implementations have made default metric assignments based on link bandwidth ๐Ÿซถ that's been useful, but the defaults were different across implementations, and link bandwidths have grown super fast ๐Ÿš€ with Flex-Algorithm, the network admin can define a function that produces a metric for each link, and every node automatically computes each link's metric from its bandwidth ๐Ÿงฎ so no more guessing.

this document defines a standard metric-type for this called the "Bandwidth Metric" โœจ the Bandwidth Metric MAY be advertised in the Generic Metric sub-TLV with the metric-type set to "Bandwidth Metric" ๐ŸŽ€ IS-IS and OSPF will advertise this type of metric in their link advertisements ๐Ÿฆ‹ the Bandwidth Metric is a link attribute, and it MUST follow Section 12 of [RFC9350] for its advertisement and processing during Flex-Algorithm calculation ๐Ÿ’…

Flex-Algorithm uses this metric-type by specifying the bandwidth metric as the metric-type in a FAD TLV ๐Ÿ‘‘ a FAD TLV may also specify an automatic computation of the bandwidth metric based on a link's advertised bandwidth ๐Ÿงš an explicit advertisement of a link's bandwidth metric using the Generic Metric sub-TLV overrides this automatic computation ๐Ÿ”ฅ and the automatic Bandwidth metric calculation sub-TLVs are advertised in the FAD TLV, and these parameters apply to applications like Flex-Algorithm that use the FAD TLV ๐Ÿ’–

4.1. Automatic Metric Calculation ๐Ÿงฎ

okay so networks that are designed to be highly regular and follow uniform metric assignment might want to simplify operations by automatically calculating the bandwidth metric ๐ŸŒธ when a FAD advertises the metric-type as Bandwidth Metric and the link doesn't have the Bandwidth Metric advertised, automatic metric derivation can be used along with the additional FAD constraint advertisement described in this section ๐Ÿซถ

if a link's bandwidth changes, the delay in learning about the change may create the possibility of micro-loops in the topology ๐Ÿ˜ฌ this is no different from the IGP's susceptibility to micro-loops during a metric change ๐ŸŒ€ the micro-loop avoidance procedures described in [SR-LOOP-AVOID], or any other mechanism described in the framework [RFC5715], can be used to avoid micro-loops when automatic metric calculation is deployed ๐Ÿ›ก๏ธ

computing the metric between adjacent systems based on bandwidth gets more complex with parallel adjacencies ๐Ÿ™ƒ if there are parallel adjacencies between systems, then the bandwidth between the systems is the sum of the bandwidth of the parallel links โž• this is a bit more complex to deal with, so there is an optional mode for computing the aggregate bandwidth ๐Ÿฐ

4.1.1. Automatic Metric Calculation Modes ๐Ÿ’œ

4.1.1.1. Simple Mode ๐Ÿซง

in Simple Mode, the Maximum Link Bandwidth of a single Layer 3 link is used to derive the metric ๐ŸŽฏ this mode is suitable for deployments that don't use parallel Layer 3 links โœจ in this case, the computation of the metric is straightforward ๐Ÿ’… if a Layer 3 link is composed of a Layer 2 bundle, then the link bandwidth is the sum of the bandwidths of the working components, and it may vary with Layer 2 link failures ๐ŸŒˆ bestie, that's the whole vibe.

4.1.1.2. Interface Group Mode ๐Ÿงš

Okay so Simple Mode might not vibe when there are multiple parallel Layer 3 interfaces between two nodes ๐Ÿ˜ฉ. Ideally, the metric between two systems should be the same for the same bandwidth, whether that bandwidth comes from parallel Layer 2 links or parallel Layer 3 links ๐Ÿ’…. To fix this, in Interface Group Mode, nodes MUST compute the aggregate bandwidth of all parallel adjacencies, MUST derive the metric based on that aggregate bandwidth, and MUST apply the resulting metric to each of the parallel adjacencies ๐Ÿ”ฅ. ngl, a single elephant flow is normally pinned to a single Layer 3 interface ๐Ÿ˜. If one Layer 3 link's bandwidth isn't enough for any single elephant flow, the mechanisms to solve that are outside the scope of this document ๐Ÿ™ˆ.

        A------B====C====F====D
               |              |
                ------E-------

                    Figure 7: Parallel Interfaces

Here's an example with that diagram ๐ŸŽ€. There are two parallel links between B->C, C->F, and F->D. Let's say the link bandwidth is a uniform 10 Gbps on all links. When bandwidth is used to derive the metric for the links, the metric for each link will be the same. Traffic from B to D will go B->E->D because that metric is lower. But since the bandwidth is higher on the B->C->F->D path, that path's metric should be lower than the B->E->D path to attract the traffic ๐Ÿฆ‹. Interface Group Mode should be preferred in cases where there are parallel Layer 3 links โœจ.

In Interface Group Mode, every node MUST identify the set of parallel links between a pair of nodes based on IGP link advertisements, and MUST consider the cumulative bandwidth of the parallel links while arriving at the metric of each link ๐Ÿซถ.

The parallel Layer 3 links between two nodes may not have the same bandwidth. In that case, the method described in Interface Group Mode will give all the parallel links the same metric, which may cause undesired load balancing on the links ๐Ÿ˜ญ. So a device may locally apply a load-balancing factor relative to the link bandwidth on the ECMP next hops ๐Ÿ’œ. The load-balancing mechanisms are outside the scope of this document ๐ŸŒธ.

4.1.2. Automatic Metric Calculation Methods ๐ŸŒˆ

For automatic metric calculation in Simple and Interface Group Mode, the Maximum Link Bandwidth of the links is used to derive the metric. There are two types of automatic metric derivation methods ๐Ÿ‘‘:

  1. Reference bandwidth method
  2. Bandwidth thresholds method

4.1.2.1. Reference Bandwidth Method ๐Ÿ’–

In many networks, the metric is inversely proportional to the link bandwidth ๐Ÿ“‰. The administrator or implementation selects a reference bandwidth, and the metric is derived by dividing the reference bandwidth by the advertised Maximum Link Bandwidth. Advertising the reference bandwidth in the FAD constraints lets the metric computation happen on every node for each link ๐Ÿง . The metric is computed using the reference bandwidth and the advertised link bandwidth. Centralized control of this reference bandwidth makes management simpler when the reference bandwidth changes ๐ŸŽฏ. To make sure small bandwidth changes don't change the link metric, it helps to define the granularity of the bandwidth you care about ๐Ÿ”. The link bandwidth gets truncated to this granularity before the metric is derived โœ‚๏ธ.

For example:

reference bandwidth = 1000G

Granularity = 20G

The derived metric is 10 for link bandwidth in the range 100G to
119G

4.1.2.2. Bandwidth Thresholds Method ๐Ÿ“

The reference bandwidth approach above gives a uniform metric value for a range of link bandwidths. Sometimes, though, you need non-proportional metric values for different ranges of link bandwidth ๐Ÿคธ. For example, bandwidths from 10G to 30G are assigned metric value 100, bandwidths from 30G to 70G are assigned a metric value of 50, and bandwidths greater than 70G have a metric of 10. To support this, a staircase mapping based on bandwidth thresholds is supported in the FAD. This advertisement contains a set of threshold values and their associated metrics ๐Ÿชœ๐Ÿ’….

4.1.3. IS-IS FAD Constraint Sub-TLVs for Automatic Metric Calculation ๐ŸŽ€

4.1.3.1. Reference Bandwidth Sub-TLV ๐Ÿฆ„

This section gives the FAD constraint advertisement details for the reference bandwidth method of metric calculation, as described in Section 4.1.2.1. The Flexible Algorithm Definition Reference Bandwidth (FADRB) sub-TLV is a sub-TLV of the IS-IS FAD sub-TLV. It has the following 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     |     Flags     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Reference Bandwidth                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Granularity Bandwidth                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Figure 8: IS-IS FADRB Sub-TLV

Here's what each field means ๐Ÿ”Ž:

  • Type (1 octet): An 8-bit field assigned by IANA (8). This value uniquely identifies the IS-IS FADRB sub-TLV ๐Ÿท๏ธ.
  • Length (1 octet): An 8-bit field indicating the total length, in octets, of the subsequent fields. For this sub-TLV, the Length is set to 9 ๐Ÿ“.
  • Flags (1 octet): An 8-bit field containing flags ๐Ÿšฉ.
                    0 1 2 3 4 5 6 7
                   +-+-+-+-+-+-+-+-+
                   |G|             |
                   +-+-+-+-+-+-+-+-+
  • G-flag: When set, Interface Group Mode MUST be used to derive the total link bandwidth. Unassigned bits MUST be set to zero and MUST be ignored by the receiver ๐Ÿ™Œ.
  • Reference Bandwidth (4 octets): A 32-bit field with Bandwidth encoded in IEEE floating point format [IEEE754-2019]. The units are bytes per second ๐Ÿ’ง.
  • Granularity Bandwidth (4 octets): A 32-bit field with Bandwidth encoded in IEEE floating point format [IEEE754-2019]. The units are bytes per second ๐Ÿ’ง.

The Granularity Bandwidth value makes sure the metric doesn't change when the link bandwidth changes a little ๐Ÿ›ก๏ธ. Here's the math ๐Ÿงฎ.

When granularity_bw is less than or equal to Total_link_bandwidth:

Metric calculation:  (Reference_bandwidth) / (Total_link_bandwidth -
   (Modulus of(Total_link_bandwidth, granularity_bw)))

When granularity_bw is greater than Total_link_bandwidth:

Metric calculation:  Reference_bandwidth / Total_link_bandwidth

The division used here is integer division. The Modulus of operation is defined as the remainder value when two numbers are divided โž—.

The IS-IS FADRB sub-TLV MUST NOT appear more than once in an IS-IS FAD sub-TLV. If it does appear more than once, the IS-IS FAD sub-TLV MUST be ignored by the receiver ๐Ÿšซ. The value advertised in the Reference Bandwidth field MUST be non-zero. If a zero value is advertised in the Reference Bandwidth field in the IS-IS FADRB sub-TLV, the sub-TLV MUST be ignored ๐Ÿ™…โ€โ™€๏ธ.

If a Generic Metric sub-TLV with a Bandwidth metric-type is advertised for a link, the Flex-Algorithm calculation MUST use the advertised Bandwidth Metric and MUST NOT use the automatically derived metric for that link. That's a big deal, bestie ๐Ÿšจ.

For Interface Group Mode, these rules apply to parallel links ๐Ÿ‘ฏ:

  • If all the parallel links have been advertised with the Bandwidth Metric: The individual link Bandwidth Metric MUST be used โœ….
  • If only some of the parallel links have advertised the Bandwidth Metric:
    • The Bandwidth Metric for those links MUST be ignored ๐Ÿ™ˆ.
    • Automatic metric calculation MUST be used to derive the link metric ๐Ÿ”„.

If the calculated metric evaluates to zero, a metric of 1 MUST be used 1๏ธโƒฃ.

If the calculated metric evaluates to a number greater than 0xFFFFFF, it is set to 0xFFFFFF ๐ŸŒŸ.

4.1.3.2. Bandwidth Threshold Sub-TLV ๐ŸŽ€

okay bestie, this section is the FADBT sub-TLV, and it's the one for the Bandwidth Thresholds method from Section 4.1.2.2 ๐Ÿซถ 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   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Bandwidth Threshold 1                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Threshold Metric 1        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Bandwidth Threshold 2                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Threshold Metric 2        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Bandwidth Threshold 3                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                  .....
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Threshold Metric N-1      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Bandwidth Threshold N                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Threshold Metric N        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 9: IS-IS FADBT Sub-TLV

here's what each field does ๐Ÿ’…

Type (1 octet): an 8-bit field that IANA assigned the value (9) โœจ this is what uniquely identifies the IS-IS FADBT sub-TLV, so it's basically its ID card ๐Ÿชช

Length (1 octet): an 8-bit field for the total length in octets of the stuff after it. for this one it's calculated as (1+N*7), where N is the number of Threshold Metrics. N MUST be greater than or equal to 1, so there's always at least one threshold ๐Ÿ“

Flags (1 octet):

                  0 1 2 3 4 5 6 7
                 +-+-+-+-+-+-+-+-+
                 |G| | |         |
                 +-+-+-+-+-+-+-+-+
  • G-flag: when this is set, Interface Group Mode MUST be used to derive the total link bandwidth ๐Ÿงš any unassigned bits MUST be set to zero and MUST be ignored by the receiver, no exceptions bestie ๐Ÿ™ˆ

now the staircase part, which is giving stairs of bandwidth ๐ŸŒˆ it's a list of bandwidth thresholds, each one paired with its own metric value:

Bandwidth Threshold 1 (4 octets): the Minimum Link Bandwidth, encoded in IEEE floating point format (32 bits) [IEEE754-2019]. the units are bytes per second ๐Ÿ’œ

Threshold Metric 1 (3 octets): the metric value range is 1 - 16,777,215 (0xFFFFFF) ๐Ÿฆ‹

Bandwidth Threshold N (4 octets): the Maximum Link Bandwidth, encoded in IEEE floating point format (32 bits) [IEEE754-2019]. again, the units are bytes per second ๐Ÿซง

Threshold Metric N (3 octets): the metric value range is 1 - 16,777,215 (0xFFFFFF) โœจ

when the G-flag is set, the cumulative bandwidth of the parallel links is computed the way Section 4.1.1.2 describes. if the G-flag is not set, the advertised Maximum Link Bandwidth is used instead ๐ŸŽ€


okay here comes the main event ๐Ÿ‘‘ how the Bandwidth Metric gets assigned for a link during the Flex-Algorithm Shortest Path First (SPF) calculation. this part is serious, so pay attention ๐Ÿ’…

The Bandwidth Metric for a link during the Flex-Algorithm Shortest Path First (SPF) calculation MUST be assigned according to the following rules:

  1. When the computed link bandwidth is less than Bandwidth Threshold 1:

The Bandwidth Metric MUST be set to the maximum metric value of 4,261,412,864. ๐Ÿ˜ญ

  1. When the computed link bandwidth is greater than or equal to Bandwidth Threshold 1 and less than Bandwidth Threshold 2:

The Bandwidth Metric MUST be set to Threshold Metric 1. ๐ŸŒธ

  1. When the computed link bandwidth is greater than or equal to Bandwidth Threshold 2 and less than Bandwidth Threshold 3:

The Bandwidth Metric MUST be set to Threshold Metric 2. ๐Ÿ’–

  1. In general, for all integer values of X such that 1 โ‰ค X < N:

When the computed link bandwidth is greater than or equal to Bandwidth Threshold X and less than Bandwidth Threshold X+1:

The Bandwidth Metric MUST be set to Threshold Metric X. ๐Ÿงš

  1. When the computed link bandwidth is greater than or equal to Bandwidth Threshold N:

The Bandwidth Metric MUST be set to Threshold Metric N. ๐Ÿฆ‹

a few notes to keep in your head bestie ๐Ÿ“

  • The term "Bandwidth Threshold X" just means a predefined threshold value for the index X ๐Ÿซถ
  • The term "Threshold Metric X" is the metric value tied to Bandwidth Threshold X ๐ŸŒˆ
  • N is the total number of bandwidth thresholds defined in the system โœจ

implementations MUST ensure that these rules are consistently applied, so the network stays interoperable and the path computation stays optimal ๐Ÿ”ฅ

also, the IS-IS FADBT sub-TLV MUST NOT appear more than once in an IS-IS FAD sub-TLV. if it shows up more than once, the IS-IS FAD sub-TLV MUST be ignored by the receiver ๐Ÿ™ˆ

a FAD MUST NOT contain both the FADBT sub-TLV and the FADRB sub-TLV. if both are advertised in the same FAD for a Flexible Algorithm, the FAD MUST be ignored by the receiver. no double dipping allowed ๐Ÿ’€

if a Generic Metric sub-TLV with Bandwidth metric-type is advertised for a link, then the Flex-Algorithm calculation MUST use the Bandwidth Metric advertised on the link and MUST NOT use the automatically derived metric for that link. the manual one wins, periodt ๐Ÿ’…๐ŸŽ€

and for Interface Group Mode with parallel links, here's the drama:

  • if all the parallel links have been advertised with the Bandwidth Metric:
    • the individual link Bandwidth Metric MUST be used ๐ŸŒธ
  • if only some of the parallel links have advertised the Bandwidth Metric:
    • the Bandwidth Metric for those links MUST be ignored ๐Ÿ˜ญ
    • automatic metric calculation MUST be used to derive the link metric ๐Ÿงš

4.1.4. OSPF FAD Constraint Sub-TLVs for Automatic Metric Calculation โœจ

okay so now we switch to the OSPF side of things ๐Ÿฆ‹ this is the OSPF FAD constraint sub-TLVs for automatic metric calculation, and the first one up is the Reference Bandwidth one.

4.1.4.1. Reference Bandwidth Sub-TLV ๐ŸŒˆ

the Flexible Algorithm Definition Reference Bandwidth (FADRB) sub-TLV is a sub-TLV of the OSPF FAD TLV. 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   |     Reserved                                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Reference Bandwidth                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Granularity Bandwidth                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 10: OSPF FADRB Sub-TLV

the fields, explained for bestie ๐Ÿ’–

Type (2 octets): a 16-bit field that IANA assigned the value (8) ๐ŸŽ€ this uniquely identifies the OSPF FADRB sub-TLV โœจ

Length (2 octets): a 16-bit field for the total length in octets of the stuff after it. for this sub-TLV, Length is set to 14 ๐Ÿงš

Flags (1 octet):

                  0 1 2 3 4 5 6 7
                 +-+-+-+-+-+-+-+-+
                 |G| | |         |
                 +-+-+-+-+-+-+-+-+
  • G-flag: when set, Interface Group Mode MUST be used to derive the total link bandwidth ๐Ÿซง unassigned bits MUST be set to zero and MUST be ignored by the receiver ๐ŸŒธ

Reference Bandwidth (4 octets): bandwidth encoded in 32 bits in IEEE floating point format [IEEE754-2019]. the units are in bytes per second ๐Ÿฆ‹

Granularity Bandwidth (4 octets): bandwidth encoded in 32 bits in IEEE floating point format [IEEE754-2019]. the units are in bytes per second ๐Ÿ’œ

now the math bit, which is lowkey the spiciest part ๐ŸŒถ๏ธ the metric calculation depends on whether granularity_bw is less than or equal to Total_link_bandwidth.

When granularity_bw is less than or equal to Total_link_bandwidth, then:

Metric calculation:
   (Reference_bandwidth) / (Total_link_bandwidth - (Modulus
   of(Total_link_bandwidth, granularity_bw)))

When granularity_bw is greater than Total_link_bandwidth, then:

Metric calculation:
   Reference_bandwidth/ Total_link_bandwidth

the division used here is integer division ๐Ÿ”ข and modulus is defined as the remainder value when two numbers are divided ๐Ÿงฎ

the Granularity Bandwidth value is there so the metric doesn't change when there's a small change in the link bandwidth. it's giving stability ๐Ÿซถ

some more rules, and these ones are important:

  • the OSPF FADRB 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 ๐Ÿ™ˆ
  • the value advertised in the Reference Bandwidth field MUST be non-zero ๐Ÿ’…
  • if a zero value is advertised in the Reference Bandwidth field in the OSPF FADRB sub-TLV, the sub-TLV MUST be ignored ๐Ÿ’€
  • if a Generic Metric sub-TLV with Bandwidth metric-type is advertised for a link, the Flex-Algorithm calculation MUST use the advertised Bandwidth Metric on the link and MUST NOT use the automatically derived metric for that link ๐Ÿ‘‘

and yes, Interface Group Mode has its own drama for OSPF too ๐ŸŒˆ

  • when all parallel links have advertised the Bandwidth Metric:
    • the individual link Bandwidth Metric MUST be used for each link ๐ŸŒธ
  • when only a subset of the parallel links have advertised the Bandwidth Metric:
    • the Bandwidth Metric advertisements for those links MUST be ignored ๐Ÿ˜ญ
    • automatic metric calculation MUST be used to derive the link metrics for all parallel links ๐Ÿงš

last but not least, the fallback rules ๐Ÿซถ

if the calculated metric evaluates to zero, a metric of 1 MUST be used. โœจ

if the calculated metric evaluates to a number greater than 0xFFFFFFFF, it is set to 0xFFFFFFFF. ๐Ÿฆ‹

4.1.4.2. Bandwidth Threshold Sub-TLV โœจ

okay bestie, so the Flex-Algorithm Definition Bandwidth Threshold (FADBT) sub-TLV lives inside the OSPF FAD TLV ๐ŸŽ€ and it's giving staircase energy. 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                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |    Flags   | Reserved                                         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Bandwidth Threshold 1                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Threshold Metric 1                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Bandwidth Threshold 2                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Threshold Metric 2                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Bandwidth Threshold 3                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     .....
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Threshold Metric N-1                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Bandwidth Threshold N                     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Threshold Metric N                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Figure 11: OSPF FADBT Sub-TLV

Here's what each field does ๐Ÿ’…

Type (2 octets): a 16-bit field assigned by IANA (9). It's how everyone knows this is the OSPF FADBT sub-TLV ๐Ÿฆ‹

Length (2 octets): a 16-bit field for the total length, in octets, of the fields after it. For this sub-TLV, Length is set to 2 + N*8 octets, where N is the number of Threshold Metrics you've specified. N MUST be greater than or equal to 1. no zero-threshold drama allowed ๐Ÿ™ˆ

Flags (1 octet):

                       0 1 2 3 4 5 6 7
                      +-+-+-+-+-+-+-+-+
                      |G|             |
                      +-+-+-+-+-+-+-+-+

G-flag: when this is set, Interface Group Mode MUST be used to derive the total link bandwidth ๐ŸŒˆ Any unassigned bits MUST be set to zero, and the receiver MUST ignore them. ignore the leftovers, periodt ๐Ÿ’–

Now for the staircase itself ๐Ÿชœ

Bandwidth Threshold 1 (4 octets): the Minimum Link Bandwidth, encoded in IEEE floating point format (32 bits)[IEEE754-2019]. The units are bytes per second โœจ

Threshold Metric 1 (4 octets): the metric value, in the range 1 - 4,294,967,296 (0xFFFFFFFF) ๐Ÿ“

Bandwidth Threshold N (4 octets): the Maximum Link Bandwidth, encoded in IEEE floating point format (32 bits)[IEEE754-2019]. The units are bytes per second ๐ŸŒธ

Threshold Metric N (4 octets): the metric value, in the range 1 - 4,294,967,296 (0xFFFFFFFF) ๐Ÿ’œ

When the G-flag is set, the cumulative bandwidth of the parallel links is computed as described in Section 4.1.1.2. If the G-flag is not set, the advertised Maximum Link Bandwidth is used ๐ŸŽ€

The assignment of the Bandwidth Metric based on the computed link bandwidth works like this:

During the Flex-Algorithm SPF calculation, the Bandwidth Metric for a link MUST be assigned according to the following rules ๐Ÿ‘‘

  1. When the computed link bandwidth is less than Bandwidth Threshold 1, the Bandwidth Metric MUST be set to the maximum metric value of 4,294,967,296. bottom of the staircase, no notes ๐Ÿ’€
  2. When the computed link bandwidth is greater than or equal to Bandwidth Threshold 1 and less than Bandwidth Threshold 2, the Bandwidth Metric MUST be set to Threshold Metric 1.
  3. When the computed link bandwidth is greater than or equal to Bandwidth Threshold 2 and less than Bandwidth Threshold 3, the Bandwidth Metric MUST be set to Threshold Metric 2.
  4. In general, for all integer values of X where 1 โ‰คX < N: when the computed link bandwidth is greater than or equal to Bandwidth Threshold X and less than Bandwidth Threshold X+1, the Bandwidth Metric MUST be set to Threshold Metric X.
  5. When the computed link bandwidth is greater than or equal to Bandwidth Threshold N, the Bandwidth Metric MUST be set to Threshold Metric N. top step, iconic ๐Ÿ‘‘

A few notes to keep you sane ๐Ÿงš

  • Bandwidth Threshold X refers to the predefined bandwidth threshold at index X.
  • Threshold Metric X is the metric value tied to Bandwidth Threshold X.
  • N is the total number of bandwidth thresholds defined in the system.

Implementations MUST consistently apply these rules to ensure accurate path computations and maintain interoperability within the network ๐Ÿซถ

Some more hard rules, bestie ๐Ÿ”ฅ The OSPF FADBT sub-TLV MUST NOT appear more than once in an OSPF FAD sub-TLV. If it does show up twice, the OSPF FAD sub-TLV MUST be ignored by the receiver. Also, a FAD MUST NOT contain both the FADBT sub-TLV and the FADRB sub-TLV. If both are advertised in the same FAD for a Flexible Algorithm, the FAD MUST be ignored by the receiver. no double-dipping ๐Ÿ’…

If a Generic Metric sub-TLV with Bandwidth metric-type is advertised for a link, the Flex-Algorithm calculation MUST use the Bandwidth Metric advertised on the link and MUST NOT use the automatically derived metric for that link. the advertised value wins, always ๐Ÿ†

Metric Assignment in Interface Group Mode:

When a link does not have a configured Bandwidth Metric, the automatically derived metric MUST be used for that link ๐Ÿฆ‹

For Interface Group Mode, these rules apply to parallel links:

  • If all parallel links have advertised the Bandwidth Metric, the individual link Bandwidth Metric MUST be used for each link during path computation. everyone shows up, everyone counts โœจ
  • If only some of the parallel links have advertised the Bandwidth Metric:
    • The Bandwidth Metric advertisements for those links MUST be ignored.
    • Automatic metric calculation MUST be used to derive the link metrics for all parallel links. partial hype doesn't count, sorry not sorry ๐Ÿ™ˆ

This approach keeps the metric calculation consistent and avoids discrepancies caused by partial Bandwidth Metric advertisements among parallel links ๐ŸŒˆ


5. Bandwidth Metric Considerations ๐ŸŽ€

This section specifies the rules for deriving the Bandwidth Metric if and only if the winning FAD for the Flex-Algorithm specifies the metric-type as "Bandwidth Metric" ๐Ÿ’–

  1. If the Generic Metric sub-TLV with Bandwidth metric-type is advertised for the link as described in Section 4, it MUST be used during the Flex-Algorithm calculation. the explicit advert goes first, obviously ๐Ÿฅ‡
  2. If the Generic Metric sub-TLV with Bandwidth metric-type is not advertised for the link, and the winning FAD for the Flex-Algorithm does not specify the automatic Bandwidth metric calculation (as defined in Section 4.1), the link is treated as if the Bandwidth Metric is not available for the link. no auto-math, no bandwidth ๐Ÿคทโ€โ™€๏ธ
  3. If the Generic Metric sub-TLV with Bandwidth metric-type is not advertised for the link, and the winning FAD (Section 5.3 of [RFC9350]) for the Flex-Algorithm specifies the automatic Bandwidth metric calculation (as defined in Section 4.1), the Bandwidth Metric MUST be automatically calculated per the procedures defined in Section 4.1. If the Link Bandwidth is not advertised for a link, the link MUST be pruned for the Flex-Algorithm calculations. no bandwidth info, no entry to the party ๐Ÿšซ
  4. In IS-IS, for Flex-Algorithm purposes, the Link Bandwidth is advertised as a sub-sub-TLV 9 of the Flex-Algorithm-specific ASLA sub-TLV. It is also possible to advertise the link bandwidth or Flex-Algorithm in sub-TLV 9 of TLVs 22/222/23/223/141 [RFC5305] together with the L-flag set in the Flex-Algorithm-specific ASLA advertisement. In the absence of both of these advertisements, the bandwidth of the link is not available for Flex-Algorithm purposes. two routes to the same bandwidth, pick your favorite ๐Ÿงš

6. Calculation of Flex-Algorithm Paths ๐Ÿ’…

Two new rules get added on top of the existing Flex-Algorithm calculation rules in Section 13 of [RFC9350], so here they are, boxed up and ready to go โœจ

|  6.  Check if any exclude FAEMB rule is part of the Flex-Algorithm
|      definition.  If such exclude rule exists and the link has
|      Maximum Link Bandwidth advertised, check if the link bandwidth
|      satisfies the FAEMB rule.  If the link does not satisfy the
|      FAEMB rule, the link MUST be pruned from the Flex-Algorithm
|      computation.
|
|  7.  Check if any exclude FAEMD rule is part of the Flex-Algorithm
|      definition.  If such exclude rule exists and the link has Min
|      Unidirectional link delay advertised, check if the link delay
|      satisfies the FAEMD rule.  If the link does not satisfy the
|      FAEMD rule, the link MUST be pruned from the Flex-Algorithm
|      computation.

7. Backward Compatibility ๐ŸŒธ

This extension brings no new backward-compatibility issues ๐Ÿซถ This document defines new FAD constraints in Sections 3, 4.1.3, and 4.1.4. As described in [RFC9350], any node that does not understand sub-TLVs in a FAD TLV stops participation in the corresponding Flex-Algorithm. The new extensions can be deployed among the nodes that are upgraded to understand them, without affecting the nodes that aren't upgraded yet ๐Ÿฆ‹

This document also defines a new metric advertisement, as described in Section 2. As per Section 13 of [RFC9350], when the links do not advertise the metric-type specified by the selected FAD, the link is pruned from Flex-Algorithm calculations. The new metric-types, and the Flex-Algorithms that use them, can be deployed in the network without affecting existing deployments ๐ŸŒˆ


8. Security Considerations ๐Ÿ’€

This document inherits security considerations from [RFC9350]. Take those seriously, bestie, because the whole Flex-Algorithm machinery depends on them ๐Ÿ”ฅ


9. Operational Considerations ๐Ÿงš

The operational considerations defined in [RFC9350] generally apply to the extensions in this document as well ๐Ÿ’– This document defines a metric-type range for user-defined metrics. When user-defined metrics are used in an inter-area or inter-level network, all the domains should assign the same meaning to the particular metric-type ๐Ÿ‘‘ The YANG data models for Flex-Algorithm extensions are defined in the documents [OSPF-AUGMENTATION] and [ISIS-AUGMENTATION] โœจ

Before a router goes into maintenance, the traffic needs to be diverted away from it. This is done by setting the overload bit, or by setting link metrics on the router to a high value. For Generic Metric, the link metrics can be set to a Maximum usable metric for OSPF and IS-IS. The traffic will then be diverted away from the router onto a shorter available path. If there are no alternate paths available, traffic will stay on the router, because the links are not removed from the Flex-Algorithm calculation when they are set to a maximum metric per [RFC9350] ๐Ÿ™ˆ


10. IANA Considerations ๐Ÿงš

10.1. IGP Metric-Type Registry ๐Ÿ’–

okay so the "IGP Metric-Type" registry got a glow-up ๐Ÿ’…โœจ It now has an extra column that says whether each metric-type is allowed in the Generic Metric sub-TLV ๐Ÿฆ‹ The 128-255 range is also now user-defined, and it doesn't need a Standards Action [RFC8126]. no gatekeeping here ๐Ÿซถ

+=========+===========================+===========+================+
| Type    | Description               | Reference | Allowed in     |
|         |                           |           | Generic-Metric |
+=========+===========================+===========+================+
| 0       | IGP Metric                | Section   | No             |
|         |                           | 5.1 of    |                |
|         |                           | [RFC9350] |                |
+---------+---------------------------+-----------+----------------+
| 1       | Min Unidirectional Link   | Section   | No             |
|         | Delay as defined in       | 5.1 of    |                |
|         | [RFC8570], Section 4.2    | [RFC9350] |                |
|         | and [RFC7471],            |           |                |
|         | Section 4.2               |           |                |
+---------+---------------------------+-----------+----------------+
| 2       | Traffic Engineering       | Section   | No             |
|         | Default Metric as defined | 5.1 of    |                |
|         | in [RFC5305], Section 3.7 | [RFC9350] |                |
|         | and Traffic Engineering   |           |                |
|         | Metric as defined in      |           |                |
|         | [RFC3630], Section 2.5.5  |           |                |
+---------+---------------------------+-----------+----------------+
| 3       | Bandwidth Metric          | RFC 9843  | Yes            |
+---------+---------------------------+-----------+----------------+
| 128-255 | Reserved for User-Defined | RFC 9843  | Yes            |
|         | Metric                    |           |                |
+---------+---------------------------+-----------+----------------+

Table 1: IGP Metric-Type Registry

10.2. IS-IS Sub-Sub-TLVs for Flexible Algorithm Definition Sub-TLV ๐ŸŒธ

the "IS-IS Sub-Sub-TLVs for Flexible Algorithm Definition Sub-TLV" registry lives in the "IS-IS TLV Codepoints" registry group ๐Ÿงš here's what's in it:

Type:  6
Description:  IS-IS Exclude Minimum Bandwidth
Reference:  RFC 9843, Section 3.1.1

Type:  7
Description:  IS-IS Exclude Maximum Delay
Reference:  RFC 9843, Section 3.1.2

Type:  8
Description:  IS-IS Reference Bandwidth
Reference:  RFC 9843, Section 4.1.3.1

Type:  9
Description:  IS-IS Bandwidth Threshold
Reference:  RFC 9843, Section 4.1.3.2

10.3. OSPF Sub-TLVs for Flexible Algorithm Definition Sub-TLV ๐Ÿฆ‹

the "OSPF Flexible Algorithm Definition TLV Sub-TLVs" registry is part of the "Open Shortest Path First (OSPF) Parameters" registry group โœจ same vibe, different protocol:

Type:  6
Description:  OSPF Exclude Minimum Bandwidth
Reference:  RFC 9843, Section 3.2.1

Type:  7
Description:  OSPF Exclude Maximum Delay
Reference:  RFC 9843, Section 3.2.2

Type:  8
Description:  OSPF Reference Bandwidth
Reference:  RFC 9843, Section 4.1.4.1

Type:  9
Description:  OSPF Bandwidth Threshold
Reference:  RFC 9843, Section 4.1.4.2

10.4. IS-IS Sub-TLVs for TLVs Advertising Neighbor Information ๐ŸŒˆ

the "IS-IS Sub-TLVs for TLVs Advertising Neighbor Information" registry is part of the "IS-IS TLV Codepoints" registry group ๐Ÿ’œ the Generic Metric entry is the star of the show:

Type:  17
Description:  Generic Metric
TLVs set to "Y":  22, 23, 25, 141, 222, and 223
Reference:  RFC 9843, Section 2.1

the "IS-IS Sub-Sub-TLV Codepoints for Application-Specific Link Attributes" registry is part of the "IS-IS TLV Codepoints" registry group, and Generic Metric shows up here too ๐Ÿ“

Type:  17
Description:  Generic Metric
Reference:  RFC 9843, Section 2.1

the "OSPFv2 Extended Link TLV Sub-TLVs" registry is part of the "Open Shortest Path First v2 (OSPFv2) Parameters" registry group ๐ŸŒธ

Value:  25
Description:  Generic Metric
L2BM:  Y
Reference:  RFC 9843, Section 2.2

the "Types for sub-TLVs of TE Link TLV (Value 2)" registry is part of the "Open Shortest Path First (OSPF) Traffic Engineering TLVs" registry group โœจ

Value:  36
Description:  Generic Metric
Reference:  RFC 9843, Section 2.2

10.8. OSPFv3 Extended-LSA Sub-TLVs ๐Ÿ‘‘

the "OSPFv3 Extended-LSA Sub-TLVs" registry is part of the "Open Shortest Path First v3 (OSPFv3) Parameters" registry group ๐Ÿซถ

Value:  34
Description:  Generic Metric
L2BM:  Y
Reference:  RFC 9843, Section 2.2

11. References ๐Ÿ“š

11.1. Normative References ๐Ÿ”ฅ

these are the normative refs, the ones you actually need to read, bestie ๐Ÿ™ˆ

[IEEE754-2019] IEEE, "IEEE Standard for Floating-Point Arithmetic", IEEE Std 754-2019, DOI 10.1109/ieeestd.2019.8766229, 22 July 2019, <https://doi.org/10.1109/ieeestd.2019.8766229>.

[RFC1195] Callon, R., "Use of OSI IS-IS for routing in TCP/IP and dual environments", RFC 1195, DOI 10.17487/RFC1195, December 1990, <https://www.rfc-editor.org/info/rfc1195>.

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC2328] Moy, J., "OSPF Version 2", STD 54, RFC 2328, DOI 10.17487/RFC2328, April 1998, <https://www.rfc-editor.org/info/rfc2328>.

[RFC3630] Katz, D., Kompella, K., and D. Yeung, "Traffic Engineering (TE) Extensions to OSPF Version 2", RFC 3630, DOI 10.17487/RFC3630, September 2003, <https://www.rfc-editor.org/info/rfc3630>.

[RFC5305] Li, T. and H. Smit, "IS-IS Extensions for Traffic Engineering", RFC 5305, DOI 10.17487/RFC5305, October 2008, <https://www.rfc-editor.org/info/rfc5305>.

[RFC5329] Ishiguro, K., Manral, V., Davey, A., and A. Lindem, Ed., "Traffic Engineering Extensions to OSPF Version 3", RFC 5329, DOI 10.17487/RFC5329, September 2008, <https://www.rfc-editor.org/info/rfc5329>.

[RFC5392] Chen, M., Zhang, R., and X. Duan, "OSPF Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering", RFC 5392, DOI 10.17487/RFC5392, January 2009, <https://www.rfc-editor.org/info/rfc5392>.

[RFC7684] Psenak, P., Gredler, H., Shakir, R., Henderickx, W., Tantsura, J., and A. Lindem, "OSPFv2 Prefix/Link Attribute Advertisement", RFC 7684, DOI 10.17487/RFC7684, November 2015, <https://www.rfc-editor.org/info/rfc7684>.

[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017, <https://www.rfc-editor.org/info/rfc8126>.

[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8362] Lindem, A., Roy, A., Goethals, D., Reddy Vallem, V., and F. Baker, "OSPFv3 Link State Advertisement (LSA) Extensibility", RFC 8362, DOI 10.17487/RFC8362, April 2018, <https://www.rfc-editor.org/info/rfc8362>.

[RFC8668] Ginsberg, L., Ed., Bashandy, A., Filsfils, C., Nanduri, M., and E. Aries, "Advertising Layer 2 Bundle Member Link Attributes in IS-IS", RFC 8668, DOI 10.17487/RFC8668, December 2019, <https://www.rfc-editor.org/info/rfc8668>.

[RFC9350] Psenak, P., Ed., Hegde, S., Filsfils, C., Talaulikar, K., and A. Gulko, "IGP Flexible Algorithm", RFC 9350, DOI 10.17487/RFC9350, February 2023, <https://www.rfc-editor.org/info/rfc9350>.

[RFC9356] Talaulikar, K., Ed. and P. Psenak, "Advertising Layer 2 Bundle Member Link Attributes in OSPF", RFC 9356, DOI 10.17487/RFC9356, January 2023, <https://www.rfc-editor.org/info/rfc9356>.

[RFC9479] Ginsberg, L., Psenak, P., Previdi, S., Henderickx, W., and J. Drake, "IS-IS Application-Specific Link Attributes", RFC 9479, DOI 10.17487/RFC9479, October 2023, <https://www.rfc-editor.org/info/rfc9479>.

[RFC9492] Psenak, P., Ed., Ginsberg, L., Henderickx, W., Tantsura, J., and J. Drake, "OSPF Application-Specific Link Attributes", RFC 9492, DOI 10.17487/RFC9492, October 2023, <https://www.rfc-editor.org/info/rfc9492>.

11.2. Informative References โœจ

[ISIS-AUGMENTATION] Lindem, A., Qu, Y., and S. Litkowski, "IS-IS YANG Model Augmentations for Additional Features - Release 1", Work in Progress, Internet-Draft, draft-ietf-lsr-isis-yang-augmentation-v1-10, 6 July 2025, <https://datatracker.ietf.org/doc/html/draft-ietf-lsr-isis-yang-augmentation-v1-10>.

[OSPF-AUGMENTATION] Lindem, A. and Y. Qu, "OSPF YANG Model Augmentations for Additional Features - Release 1", Work in Progress, Internet-Draft, draft-ietf-lsr-ospf-yang-augmentation-v1-17, 6 July 2025, <https://datatracker.ietf.org/doc/html/draft-ietf-lsr-ospf-yang-augmentation-v1-17>.

[RFC4655] Farrel, A., Vasseur, J.-P., and J. Ash, "A Path Computation Element (PCE)-Based Architecture", RFC 4655, DOI 10.17487/RFC4655, August 2006, <https://www.rfc-editor.org/info/rfc4655>.

[RFC5120] Przygienda, T., Shen, N., and N. Sheth, "M-ISIS: Multi Topology (MT) Routing in Intermediate System to Intermediate Systems (IS-ISs)", RFC 5120, DOI 10.17487/RFC5120, February 2008, <https://www.rfc-editor.org/info/rfc5120>.

[RFC5311] McPherson, D., Ed., Ginsberg, L., Previdi, S., and M. Shand, "Simplified Extension of Link State PDU (LSP) Space for IS-IS", RFC 5311, DOI 10.17487/RFC5311, February 2009, <https://www.rfc-editor.org/info/rfc5311>.

[RFC5715] Shand, M. and S. Bryant, "A Framework for Loop-Free Convergence", RFC 5715, DOI 10.17487/RFC5715, January 2010, <https://www.rfc-editor.org/info/rfc5715>.

[RFC7471] Giacalone, S., Ward, D., Drake, J., Atlas, A., and S. Previdi, "OSPF Traffic Engineering (TE) Metric Extensions", RFC 7471, DOI 10.17487/RFC7471, March 2015, <https://www.rfc-editor.org/info/rfc7471>.

[RFC8570] Ginsberg, L., Ed., Previdi, S., Ed., Giacalone, S., Ward, D., Drake, J., and Q. Wu, "IS-IS Traffic Engineering (TE) Metric Extensions", RFC 8570, DOI 10.17487/RFC8570, March 2019, <https://www.rfc-editor.org/info/rfc8570>.

[RFC9346] Chen, M., Ginsberg, L., Previdi, S., and D. Xiaodong, "IS-IS Extensions in Support of Inter-Autonomous System (AS) MPLS and GMPLS Traffic Engineering", RFC 9346, DOI 10.17487/RFC9346, February 2023, <https://www.rfc-editor.org/info/rfc9346>.

[SR-LOOP-AVOID] Bashandy, A., Filsfils, C., Litkowski, S., Decraene, B., Francois, P., and P. Psenak, "Loop avoidance using Segment Routing", Work in Progress, Internet-Draft, draft-bashandy-rtgwg-segment-routing-uloop-17, 29 June 2024, <https://datatracker.ietf.org/doc/html/draft-bashandy-rtgwg-segment-routing-uloop-17>.


Okay bestie, this appendix is the whole cheat sheet of rules for pruning links from the Flex-Algorithm topology during the Flexible Algorithm calculation ๐Ÿงš. It includes the original rules from Section 13 of [RFC9350] plus the brand new rules 6 and 7 from this document ๐ŸŒธ.

For all links in the topology:

  1. Look at the Flex-Algorithm Definition and check for any exclude Administrative Group rule. If there's one, check whether any color in that exclude rule is also set on the link. If such a color is set, the link MUST be pruned from the computation ๐Ÿšซ.
  2. Check for any exclude SRLG rule in the Flex-Algorithm Definition. If there is one, check whether the link is part of any SRLG that also appears in that SRLG exclude rule. If it is, the link MUST be pruned from the computation ๐Ÿ™ˆ.
  3. Check for any include-any Administrative Group rule in the Flex-Algorithm Definition. If there is one, check whether any color in that include-any rule is also set on the link. If no such color is set, the link MUST be pruned from the computation ๐Ÿ’€.
  4. Check for any include-all Administrative Group rule in the Flex-Algorithm Definition. If there is one, check whether all of the colors in that include-all rule are set on the link. If the link doesn't have all of those colors set, the link MUST be pruned from the computation โœจ.
  5. If the Flex-Algorithm Definition uses something other than the IGP metric (Section 5 of [RFC9350]), and that metric isn't advertised for the link in the topology the computation is being done for, the link MUST be pruned from the computation. A metric of value 0 MUST NOT be assumed in that case ๐Ÿ“.
  6. Check for any exclude FAEMB rule in the Flex-Algorithm Definition. If there is one and the link has Maximum Link Bandwidth advertised, check whether the link bandwidth satisfies the FAEMB rule. If the link does not satisfy the FAEMB rule, the link MUST be pruned from the Flex-Algorithm computation ๐ŸŽ€.
  7. Check for any exclude FAEMD rule in the Flex-Algorithm Definition. If there is one and the link has Min Unidirectional Link Delay advertised, check whether the link delay satisfies the FAEMD rule. If the link does not satisfy the FAEMD rule, the link MUST be pruned from the Flex-Algorithm computation ๐Ÿ‘‘.

Acknowledgements ๐Ÿซถ

Many thanks to Chris Bowers, Krzysztof Szarcowitz, Julian Lucek, Ram Santhanakrishnan, Ketan Talaulikar, and Acee Lindem for the discussions and input ๐Ÿ’œ.

Contributors ๐Ÿฆ‹

Salih K.A. Juniper Networks Email: salih@juniper.net

Authors' Addresses ๐ŸŒˆ

Shraddha Hegde Juniper Networks Inc. Exora Business Park Bangalore 560103 Karnataka India Email: shraddha@juniper.net

William Britto Juniper Networks Inc. Email: bwilliam@juniper.net

Rajesh Shetty Juniper Networks Inc. Email: mrajesh@juniper.net

Bruno Decraene Orange Email: bruno.decraene@orange.com

Peter Psenak Cisco Systems Email: ppsenak@cisco.com

Tony Li Juniper Networks Inc. Email: tony.li@tony.li

๐Ÿ“ฆ where this page comes from