]> git.proxmox.com Git - mirror_frr.git/blob - isisd/isis_spf.h
Merge pull request #13649 from donaldsharp/unlock_the_node_or_else
[mirror_frr.git] / isisd / isis_spf.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * IS-IS Rout(e)ing protocol - isis_spf.h
4 * IS-IS Shortest Path First algorithm
5 *
6 * Copyright (C) 2001,2002 Sampo Saaristo
7 * Tampere University of Technology
8 * Institute of Communications Engineering
9 */
10
11 #ifndef _ZEBRA_ISIS_SPF_H
12 #define _ZEBRA_ISIS_SPF_H
13
14 #include "isisd/isis_lfa.h"
15 #include "lib/json.h"
16
17 struct isis_spftree;
18
19 enum spf_type {
20 SPF_TYPE_FORWARD = 1,
21 SPF_TYPE_REVERSE,
22 SPF_TYPE_RLFA,
23 SPF_TYPE_TI_LFA,
24 };
25
26 struct isis_spf_adj {
27 uint8_t id[ISIS_SYS_ID_LEN + 1];
28 struct isis_adjacency *adj;
29 uint32_t metric;
30 struct isis_ext_subtlvs *subtlvs;
31 struct isis_lsp *lsp;
32 struct {
33 uint8_t desig_is_id[ISIS_SYS_ID_LEN + 1];
34 } lan;
35 uint8_t flags;
36 #define F_ISIS_SPF_ADJ_BROADCAST 0x01
37 #define F_ISIS_SPF_ADJ_OLDMETRIC 0x02
38 #define F_ISIS_SPF_ADJ_METRIC_INFINITY 0x04
39 };
40
41 struct isis_spftree *
42 isis_spftree_new(struct isis_area *area, struct lspdb_head *lspdb,
43 const uint8_t *sysid, int level, enum spf_tree_id tree_id,
44 enum spf_type type, uint8_t flags, uint8_t algorithm);
45 struct isis_vertex *isis_spf_prefix_sid_lookup(struct isis_spftree *spftree,
46 struct isis_prefix_sid *psid);
47 void isis_spf_invalidate_routes(struct isis_spftree *tree);
48 void isis_spf_verify_routes(struct isis_area *area, struct isis_spftree **trees,
49 int tree);
50 void isis_spf_switchover_routes(struct isis_area *area,
51 struct isis_spftree **trees, int family,
52 union g_addr *nexthop_ip, ifindex_t ifindex,
53 int level);
54 void isis_spftree_del(struct isis_spftree *spftree);
55 void spftree_area_init(struct isis_area *area);
56 void spftree_area_del(struct isis_area *area);
57 struct isis_lsp *isis_root_system_lsp(struct lspdb_head *lspdb,
58 const uint8_t *sysid);
59 #define isis_spf_schedule(area, level) \
60 _isis_spf_schedule((area), (level), __func__, \
61 __FILE__, __LINE__)
62 int _isis_spf_schedule(struct isis_area *area, int level,
63 const char *func, const char *file, int line);
64 void isis_print_spftree(struct vty *vty, struct isis_spftree *spftree);
65 void isis_print_routes(struct vty *vty, struct isis_spftree *spftree,
66 json_object **json, bool prefix_sid, bool backup);
67 void isis_spf_init(void);
68 void isis_spf_print(struct isis_spftree *spftree, struct vty *vty);
69 void isis_spf_print_json(struct isis_spftree *spftree,
70 struct json_object *json);
71 void isis_run_spf(struct isis_spftree *spftree);
72 struct isis_spftree *isis_run_hopcount_spf(struct isis_area *area,
73 uint8_t *sysid,
74 struct isis_spftree *spftree);
75
76 void isis_spf_timer_free(void *run);
77 #endif /* _ZEBRA_ISIS_SPF_H */