SRv6 Flexible Algorithm


SRv6 Flexible Algorithm (Flex-Algo) allows operators to define custom routing paths based on classic constraints like link metrics and administrative groups and new constraints like minimum bandwidth, maximum delay, and reverse affinity. This feature optimizes path selection in light of different service requirements.
Our test verified  Flex Algorithm over SRv6, using two key metrics:  Delay metric (FA 128) and  Traffic Engineering (TE) metric (FA 129). To measure link delay dynamically, certain nodes were equipped with  TWAMP (Two-Way Active Measurement Protocol), while others relied on  statically configured delay values.

During testing, we encountered cases where a node did not act as a TWAMP sender, but its connected peer was still able to respond to TWAMP probes, allowing for successful delay measurement. However, the response mechanism failed in other scenarios because some TWAMP receivers required a fixed source port for TWAMP responses, which is not RFC 5357 compliant and thus not always provided by RFC 5357 compliant TWAMP implementations at TWAMP sources.   

Another issue observed was that some nodes failed to compute a route to a PE because the PE did not advertise its IPv6 neighbor address. In SRv6-based path calculation — including scenarios that use Flex-Algo — the Extended IS Reachability IPv6 Neighbor sub-TLV (#13), defined in RFC 6119, is mandatory to enable TE-based computations. Without this advertisement, nodes lack the necessary IPv6 neighbor information to establish a valid constraint-based path, leading to routing failures.
This requirement is particularly important in the context of Flex-Algo, which can be considered a distributed form of Traffic Engineering. As described in RFC 9350 (Section 1):
"It allows the operator to define constraint-based routing computations (using metrics and link attributes) without relying on complex, centralized Traffic Engineering controllers."
Therefore, although explicit SR policies or manual TE paths were not deployed, the use of Flex-Algo involves TE-like computations based on constraints and link attributes. 

Figure 96

Figure 96:  Flexible Algorithm over SRv6

Channelized Sub-Interfaces Mapped to Flexible Algorithms

Channelized sub-interfaces are logical segments created from a single physical interface, each assigned dedicated bandwidth and resource isolation. This configuration allows operators to build hard slices within the network, ensuring predictable traffic handling and strict service guarantees.
In this demonstration, channelized sub-interfaces were configured between two Huawei DUTs, each with a different bandwidth allocation — one sub-interface provisioned with higher bandwidth and another with lower bandwidth.
These sub-interfaces were then added into Flex-Algo topologies to validate the isolation and resource assurance mechanisms. Flex-Algo 128 was calculated based on the delay metric and mapped to the lower-bandwidth, low-delay sub-interface. Flex-Algo 129 was calculated using the TE metric and mapped to the higher-bandwidth sub-interface.
Congested traffic was introduced on the physical links between DUTs to test performance under stress. Traffic streams were sent over both algorithms, with multiple egress PEs involved. During the test, Flex-Algo 129 consistently delivered traffic without impact, demonstrating the guaranteed resource allocation. In contrast, traffic mapped to Flex-Algo 128 experienced congestion and packet loss as the streams exceeded the sub-interface’s lower bandwidth capacity.

Figure 97

Figure 97: Hard-slice interfaces with mapped flex algorithms over SRv6

PETraffic Generator

Ciena 5134,
Ciena 8140 Coherent Metro Router,
H3C CR16000-M1A,
H3C CR16003E-F,
Huawei ATN 910D-A,
Huawei NetEngine A821,
Juniper MX204,
Juniper MX304,
Juniper PTX10002-36QDD,
Keysight IxNetwork,
Nokia 7250 IXR-e2,
Nokia 7750 SR-1

Keysight IxNetwork

Table 51: SRv6 Flexible Algorithm - µSID

PETraffic Generator

Huawei ATN 910D-A,
Huawei NetEngine A821

Keysight IxNetwork

Table 52: SRv6 Flexible Algorithm - µSID-Channelized Sub-Interface