CSPF Tiebreakers
Load mpls.te.base.config.with.ospf.cfg
Configure two separate TE tunnels from R8 to XR11, and two separate TE tunnels from XR11 to R8.
Each tunnel should reserve 200M of bandwidth.
The only path-option should be dynamic.
Find a way to ensure that the R8 → XR11 tunnels take the same path, and the XR11 → R8 tunnels take the same path. Do not manipulate TE/IGP cost in the network.
Answer
Explanation
CSPF must always choose one single path. ECMP is never an option. When ECMP routes are found by CSPF, the following tiebreaker takes place:
Choose the path that has the least used bandwidth. This will balance TE tunnels among paths as each new TE tunnel is setup.
If there is still a tie, choose the path with the least number of hops.
If there is still a tie, choose a path at random.
We can control the first tiebreaker with the following command:
The default is min-fill. By using max-fill, we instead choose the path that has the most used bandwidth. This will end up filling up a path with TE tunnels first, loading one path completely until putting new TE tunnels on a second path.
By using random, we bypass the bandwidth evaluation completely, not caring about how much available bandwidth is on the ECMP paths, and instead just always choosing one path at random.
To solve this lab, we can set the path-selection to use max-fill. This will cause all LSPs to always take the same path, if that path has enough bandwidth, because the router is trying to load a single path as much as possible before using alternate ECMP paths.
Verification
First, before changing the default path-selection, we setup the two TE tunnels one-by-one on R8. First tun1 is setup.
This tunnel was setup with the path: R8-R9-XR12-XR11
We’ll now setup tunnel2. By default, it should use a path with the least-filled bandwidth, so it should not go over R9 and XR12.
This second tunnel is setup over the path: R8-R6-R10-XR11. The reason is that R8 has two ECMP paths to XR11. The R9-XR12 path already has reserved bandwidth (200M), so 800M is available. The R6-R10 has 1000M available, so that path has the min-fill bandwidth.
We can change this by shutting down the tunnels, setting the tiebreaker to use max-fill, and re-signalling the tunnels.
Both tunnels now take the same path:
We’ll now do the same on XR11. Before changing the default tiebreaker, we’ll setup tun1 and then tun2. First, we have to bring down the R8 tunnels, because the R9-XR12 path has very high bandwidth load.
Notice that IOS-XR has the same default behavior (min-fill). The two TE tunnels are balanced between two paths. First R6-R8 is loaded by random. Then for tunnel-te2, the R6-R8 path has 800M available, while the XR12-R9 path has 1000M available, so the XR12-R9 path is choosen due to least-fill.
We can change this behavior by bringing down the tunnels and re-calculating them using max-fill.
Notice that the two TE tunnels now take the same path. First, R6-R10 is used by random. Then for tunnel-te2, R6-R10 has the most used bandwidth, so it is used again.
Shortest Hop Count
We can test the shortest hop count tiebreaker by artificially changing IGP metrics. The OSPF ref BW has been changed so that each link has a cost of 10. The link costs have then be manually manipulated to produce a 5 hop path from R8-R9-R2-R5-XR11 with cost 28, and a 4 hop path from R8-R6-R12-XR11 with cost 28.
We have removed the max-fill tunnel-selection, so it is back to min-fill. When we signal the first path, it takes the R8-R6-XR12-XR11 path due to the shortest hop count.
Next, we signal tunnel2. It uses the R8-R9-R2-R5-XR11 path, because it is now less filled. Notice that the router shows that the R8-R6-XR12-XR11 path is still the “shortest” path, even though tunnel2 was signaled through the longer hop path through R2.
Last updated