RFC 9843
IGP Flexible Algorithms: Bandwidth, Delay, Metrics, and Constraints
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 Notice ๐
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 ๐:
- Reference bandwidth method
- 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:
- 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. ๐ญ
- 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. ๐ธ
- 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. ๐
- 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. ๐ง
- 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 ๐
- 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 ๐
- 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.
- 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.
- 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. - 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" ๐
- 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 ๐ฅ
- 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 ๐คทโโ๏ธ
- 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 ๐ซ
- 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
10.5. Sub-Sub-TLV Codepoints for Application-Specific Link Attributes ๐
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
10.6. OSPFv2 Extended Link TLV Sub-TLVs ๐ง
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
10.7. Types for Sub-TLVs of TE Link TLV (Value 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>.
Appendix A. Updated List of Rules for Pruning Links in Flex-Algorithm Topology ๐
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:
- 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 ๐ซ.
- 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 ๐.
- 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 ๐.
- 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 โจ.
- 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 ๐.
- 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 ๐.
- 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
- ietf: rfc9843 2025-09
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms