summaryrefslogtreecommitdiff
path: root/isisd/isis_spf.h
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2020-08-20 19:55:42 -0300
committerRenato Westphal <renato@opensourcerouting.org>2020-10-14 16:27:37 -0300
commitc951ee6eeeace451f89bfafbbf2ce9e9d554c22f (patch)
treecf49bde9d5a593120c7c900b925458c95624a856 /isisd/isis_spf.h
parented5d70327989fe8dd9e72f011de04a9a56fe7db6 (diff)
isisd: add support for Topology Independent LFA (TI-LFA)
TI-LFA is a modern fast-reroute (FRR) solution that leverages Segment Routing to pre-compute backup nexthops for all destinations in the network, helping to reduce traffic restoration times whenever a failure occurs. The backup nexthops are expected to be installed in the FIB so that they can be activated as soon as a failure is detected, making sub-50ms recovery possible (assuming an hierarchical FIB). TI-LFA is a huge step forward compared to prior IP-FRR solutions, like classic LFA and Remote LFA, as it guarantees 100% coverage for all destinations. This is possible thanks to the source routing capabilities of SR, which allows the backup nexthops to steer traffic around the failures (using as many SIDs as necessary). In addition to that, the repair paths always follow the post-convergence SPF tree, which prevents transient congestions and suboptimal routing from happening. Deploying TI-LFA is very simple as it only requires a single configuration command for each interface that needs to be protected (both link protection and node protection are available). In addition to IPv4 and IPv6 routes, SR Prefix-SIDs and Adj-SIDs are also protected by the backup nexthops computed by the TI-LFA algorithms. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'isisd/isis_spf.h')
-rw-r--r--isisd/isis_spf.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/isisd/isis_spf.h b/isisd/isis_spf.h
index b2dc23496f..5d07c80d20 100644
--- a/isisd/isis_spf.h
+++ b/isisd/isis_spf.h
@@ -24,11 +24,14 @@
#ifndef _ZEBRA_ISIS_SPF_H
#define _ZEBRA_ISIS_SPF_H
+#include "isisd/isis_lfa.h"
+
struct isis_spftree;
enum spf_type {
SPF_TYPE_FORWARD = 1,
SPF_TYPE_REVERSE,
+ SPF_TYPE_TI_LFA,
};
struct isis_spf_adj {
@@ -56,17 +59,21 @@ void isis_spf_verify_routes(struct isis_area *area,
void isis_spftree_del(struct isis_spftree *spftree);
void spftree_area_init(struct isis_area *area);
void spftree_area_del(struct isis_area *area);
+struct isis_lsp *isis_root_system_lsp(struct lspdb_head *lspdb,
+ const uint8_t *sysid);
#define isis_spf_schedule(area, level) \
_isis_spf_schedule((area), (level), __func__, \
__FILE__, __LINE__)
int _isis_spf_schedule(struct isis_area *area, int level,
const char *func, const char *file, int line);
void isis_print_spftree(struct vty *vty, struct isis_spftree *spftree);
-void isis_print_routes(struct vty *vty, struct isis_spftree *spftree);
+void isis_print_routes(struct vty *vty, struct isis_spftree *spftree,
+ bool backup);
void isis_spf_init(void);
void isis_spf_print(struct isis_spftree *spftree, struct vty *vty);
void isis_run_spf(struct isis_spftree *spftree);
struct isis_spftree *isis_run_hopcount_spf(struct isis_area *area,
uint8_t *sysid,
struct isis_spftree *spftree);
+
#endif /* _ZEBRA_ISIS_SPF_H */