blob: de50e94a8a545784ff61c13094ed2b15be3c93b2 [file] [log] [blame]
paul718e3742002-12-13 20:15:29 +00001/*
2 * Copyright (C) 1999 Yasuhiro Ohara
3 *
4 * This file is part of GNU Zebra.
5 *
6 * GNU Zebra is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
9 * later version.
10 *
11 * GNU Zebra is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with GNU Zebra; see the file COPYING. If not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
22#ifndef OSPF6_SPF_H
23#define OSPF6_SPF_H
24
25#include "prefix.h"
26
27/* Transit Vertex */
28struct ospf6_vertex
29{
30 /* type of this vertex */
31 u_int8_t type;
32
33 /* Vertex Identifier */
34 struct prefix_ls vertex_id;
35
36 /* Identifier String */
37 char string[128];
38
39 /* Associated LSA */
40 struct ospf6_lsa *lsa;
41
42 /* Distance from Root (Cost) */
43 u_int16_t distance;
44
45 /* Depth of this node */
46 u_char depth;
47
48 /* nexthops to this node */
49 struct linklist *nexthop_list;
50
51 /* upper nodes in spf tree */
52 list parent_list;
53
54 /* lower nodes in spf tree */
55 list path_list;
56
57 /* capability bits */
58 u_char capability_bits;
59
60 /* Optional capabilities */
61 u_char opt_capability[3];
62};
63
64#define OSPF6_VERTEX_TYPE_ROUTER 0x01
65#define OSPF6_VERTEX_TYPE_NETWORK 0x02
66
67struct ospf6_spftree
68{
69 /* calculation thread */
70 struct thread *t_spf_calculation;
71
72 /* root of this tree */
73 struct ospf6_vertex *root;
74
75 /* list for search */
76 list list;
77
78 /* statistics */
79 u_int32_t timerun;
80
81 struct timeval runtime_total;
82 struct timeval runtime_min;
83 struct timeval runtime_max;
84
85 struct timeval updated_time;
86 struct timeval interval_total;
87 struct timeval interval_min;
88 struct timeval interval_max;
89};
90
91int ospf6_spf_calculate_route (void *);
92
93void
94ospf6_spf_calculation_schedule (u_int32_t area_id);
95struct ospf6_spftree *ospf6_spftree_create ();
96void
97ospf6_spf_statistics_show (struct vty *vty, struct ospf6_spftree *spf_tree);
98void ospf6_spftree_delete (struct ospf6_spftree *spf_tree);
99
100void ospf6_spf_database_hook (struct ospf6_lsa *old, struct ospf6_lsa *new);
101
102void ospf6_spf_init ();
103
104#endif /* OSPF6_SPF_H */
105