summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalaxyGorilla <sascha@netdef.org>2020-11-20 13:56:33 +0000
committerGalaxyGorilla <sascha@netdef.org>2021-01-19 15:32:13 +0000
commit3e94c9a4a3372b78c44c7d532fae9025a5c11067 (patch)
tree8fca90a58b4ff277bbcbbdb69d30bf09372b30f3
parentbdcfd34a414662d22957ae0ca9bbc0423478a5db (diff)
doc: Add TI-LFA developer docs
Signed-off-by: GalaxyGorilla <sascha@netdef.org>
-rw-r--r--doc/developer/ospf-sr.rst66
-rw-r--r--doc/user/ospfd.rst2
2 files changed, 68 insertions, 0 deletions
diff --git a/doc/developer/ospf-sr.rst b/doc/developer/ospf-sr.rst
index efe9b1b12f..263db9dfb9 100644
--- a/doc/developer/ospf-sr.rst
+++ b/doc/developer/ospf-sr.rst
@@ -17,6 +17,7 @@ Supported Features
* Automatic provisioning of MPLS table
* Equal Cost Multi-Path (ECMP)
* Static route configuration with label stack up to 32 labels
+* TI-LFA (for P2P interfaces only)
Interoperability
----------------
@@ -182,6 +183,71 @@ called. Once check the validity of labels, they are send to ZEBRA layer through
command for deletion. This is completed by a new labelled route through
`ZEBRA_ROUTE_ADD` command, respectively `ZEBRA_ROUTE_DELETE` command.
+TI-LFA
+^^^^^^
+
+Experimental support for Topology Independent LFA (Loop-Free Alternate), see
+for example 'draft-bashandy-rtgwg-segment-routing-ti-lfa-05'. The related
+files are `ospf_ti_lfa.c/h`.
+
+The current implementation is rather naive and does not support the advanced
+optimizations suggested in e.g. RFC7490 or RFC8102. It focuses on providing
+the essential infrastructure which can also later be used to enhance the
+algorithmic aspects.
+
+Supported features:
+
+* Link and node protection
+* Intra-area support
+* Proper use of Prefix- and Adjacency-SIDs in label stacks
+* Asymmetric weights (using reverse SPF)
+* Non-adjacent P/Q spaces
+* Protection of Prefix-SIDs
+
+If configured for every SPF run the routing table is enriched with additional
+backup paths for every prefix. The corresponding Prefix-SIDs are updated with
+backup paths too within the OSPF SR update task.
+
+Informal High-Level Algorithm Description:
+
+::
+
+ p_spaces = empty_list()
+
+ for every protected_resource (link or node):
+ p_space = generate_p_space(protected_resource)
+ p_space.q_spaces = empty_list()
+
+ for every destination that is affected by the protected_resource:
+ q_space = generate_q_space(destination)
+
+ # The label stack is stored in q_space
+ generate_label_stack(p_space, q_space)
+
+ # The p_space collects all its q_spaces
+ p_spaces.q_spaces.add(q_space)
+
+ p_spaces.add(p_space)
+
+ adjust_routing_table(p_spaces)
+
+Possible Performance Improvements:
+
+* Improve overall datastructures, get away from linked lists for vertices
+* Don't calculate a Q space for every destination, but for a minimum set of
+ backup paths that cover all destinations in the post-convergence SPF. The
+ thinking here is that once a backup path is known that it is also a backup
+ path for all nodes on the path themselves. This can be done by using the
+ leafs of a trimmed minimum spanning tree generated out of the post-
+ convergence SPF tree for that particular P space.
+* For an alternative (maybe better) optimization look at
+ https://tools.ietf.org/html/rfc7490#section-5.2.1.3 which describes using
+ the Q space of the node which is affected by e.g. a link failure. Note that
+ this optimization is topology dependent.
+
+It is highly recommended to read e.g. `Segment Routing I/II` by Filsfils to
+understand the basics of Ti-LFA.
+
Configuration
-------------
diff --git a/doc/user/ospfd.rst b/doc/user/ospfd.rst
index 9a40f080f9..ee02a9dae5 100644
--- a/doc/user/ospfd.rst
+++ b/doc/user/ospfd.rst
@@ -1245,6 +1245,8 @@ TI-LFA requires a proper Segment Routing configuration.
Configured on the router level. Activates TI-LFA for all interfaces.
+ Note that so far only P2P interfaces are supported.
+
Debugging OSPF
==============