]>
git.proxmox.com Git - mirror_frr.git/blob - isisd/isis_spf.h
2 * IS-IS Rout(e)ing protocol - isis_spf.h
3 * IS-IS Shortest Path First algorithm
5 * Copyright (C) 2001,2002 Sampo Saaristo
6 * Tampere University of Technology
7 * Institute of Communications Engineering
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public Licenseas published by the Free
11 * Software Foundation; either version 2 of the License, or (at your option)
14 * This program is distributed in the hope that it will be useful,but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
19 * You should have received a copy of the GNU General Public License along
20 * with this program; see the file COPYING; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #ifndef _ZEBRA_ISIS_SPF_H
25 #define _ZEBRA_ISIS_SPF_H
27 #include "isisd/isis_lfa.h"
39 uint8_t id
[ISIS_SYS_ID_LEN
+ 1];
40 struct isis_adjacency
*adj
;
42 struct isis_ext_subtlvs
*subtlvs
;
45 uint8_t desig_is_id
[ISIS_SYS_ID_LEN
+ 1];
48 #define F_ISIS_SPF_ADJ_BROADCAST 0x01
49 #define F_ISIS_SPF_ADJ_OLDMETRIC 0x02
50 #define F_ISIS_SPF_ADJ_METRIC_INFINITY 0x04
53 struct isis_spftree
*isis_spftree_new(struct isis_area
*area
,
54 struct lspdb_head
*lspdb
,
55 const uint8_t *sysid
, int level
,
56 enum spf_tree_id tree_id
,
57 enum spf_type type
, uint8_t flags
);
58 struct isis_vertex
*isis_spf_prefix_sid_lookup(struct isis_spftree
*spftree
,
59 struct isis_prefix_sid
*psid
);
60 void isis_spf_invalidate_routes(struct isis_spftree
*tree
);
61 void isis_spf_verify_routes(struct isis_area
*area
,
62 struct isis_spftree
**trees
);
63 void isis_spf_switchover_routes(struct isis_area
*area
,
64 struct isis_spftree
**trees
, int family
,
65 union g_addr
*nexthop_ip
, ifindex_t ifindex
,
67 void isis_spftree_del(struct isis_spftree
*spftree
);
68 void spftree_area_init(struct isis_area
*area
);
69 void spftree_area_del(struct isis_area
*area
);
70 struct isis_lsp
*isis_root_system_lsp(struct lspdb_head
*lspdb
,
71 const uint8_t *sysid
);
72 #define isis_spf_schedule(area, level) \
73 _isis_spf_schedule((area), (level), __func__, \
75 int _isis_spf_schedule(struct isis_area
*area
, int level
,
76 const char *func
, const char *file
, int line
);
77 void isis_print_spftree(struct vty
*vty
, struct isis_spftree
*spftree
);
78 void isis_print_routes(struct vty
*vty
, struct isis_spftree
*spftree
,
79 bool prefix_sid
, bool backup
);
80 void isis_spf_init(void);
81 void isis_spf_print(struct isis_spftree
*spftree
, struct vty
*vty
);
82 void isis_spf_print_json(struct isis_spftree
*spftree
,
83 struct json_object
*json
);
84 void isis_run_spf(struct isis_spftree
*spftree
);
85 struct isis_spftree
*isis_run_hopcount_spf(struct isis_area
*area
,
87 struct isis_spftree
*spftree
);
89 void isis_spf_timer_free(void *run
);
90 #endif /* _ZEBRA_ISIS_SPF_H */