Import Upstream version 1.2.2
[quagga-debian.git] / ospf6d / ospf6_area.h
1 /*
2  * Copyright (C) 2003 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 OSPF_AREA_H
23 #define OSPF_AREA_H
24
25 #include "ospf6_top.h"
26
27 struct ospf6_area
28 {
29   /* Reference to Top data structure */
30   struct ospf6 *ospf6;
31
32   /* Area-ID */
33   u_int32_t area_id;
34
35   /* Area-ID string */
36   char name[16];
37
38   /* flag */
39   u_char flag;
40
41   /* OSPF Option */
42   u_char options[3];
43
44   /* Summary routes to be originated (includes Configured Address Ranges) */
45   struct ospf6_route_table *range_table;
46   struct ospf6_route_table *summary_prefix;
47   struct ospf6_route_table *summary_router;
48
49   /* OSPF interface list */
50   struct list *if_list;
51
52   struct ospf6_lsdb *lsdb;
53   struct ospf6_lsdb *lsdb_self;
54
55   struct ospf6_route_table *spf_table;
56   struct ospf6_route_table *route_table;
57
58   struct thread  *thread_spf_calculation;
59   struct thread  *thread_route_calculation;
60   u_int32_t spf_calculation;    /* SPF calculation count */
61
62   struct thread *thread_router_lsa;
63   struct thread *thread_intra_prefix_lsa;
64   u_int32_t router_lsa_size_limit;
65
66   /* Area announce list */
67   struct
68   {
69     char *name;
70     struct access_list *list;
71   } _export;
72 #define EXPORT_NAME(A)  (A)->_export.name
73 #define EXPORT_LIST(A)  (A)->_export.list
74
75   /* Area acceptance list */
76   struct
77   {
78     char *name;
79     struct access_list *list;
80   } import;
81 #define IMPORT_NAME(A)  (A)->import.name
82 #define IMPORT_LIST(A)  (A)->import.list
83
84   /* Type 3 LSA Area prefix-list */
85   struct
86   {
87     char *name;
88     struct prefix_list *list;
89   } plist_in;
90 #define PREFIX_NAME_IN(A)  (A)->plist_in.name
91 #define PREFIX_LIST_IN(A)  (A)->plist_in.list
92
93   struct
94   {
95     char *name;
96     struct prefix_list *list;
97   } plist_out;
98 #define PREFIX_NAME_OUT(A)  (A)->plist_out.name
99 #define PREFIX_LIST_OUT(A)  (A)->plist_out.list
100
101 };
102
103 #define OSPF6_AREA_ENABLE     0x01
104 #define OSPF6_AREA_ACTIVE     0x02
105 #define OSPF6_AREA_TRANSIT    0x04 /* TransitCapability */
106 #define OSPF6_AREA_STUB       0x08
107
108 #define IS_AREA_ENABLED(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_ENABLE))
109 #define IS_AREA_ACTIVE(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_ACTIVE))
110 #define IS_AREA_TRANSIT(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_TRANSIT))
111 #define IS_AREA_STUB(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_STUB))
112
113 /* prototypes */
114 extern int ospf6_area_cmp (void *va, void *vb);
115
116 extern struct ospf6_area *ospf6_area_create (u_int32_t, struct ospf6 *);
117 extern void ospf6_area_delete (struct ospf6_area *);
118 extern struct ospf6_area *ospf6_area_lookup (u_int32_t, struct ospf6 *);
119
120 extern void ospf6_area_enable (struct ospf6_area *);
121 extern void ospf6_area_disable (struct ospf6_area *);
122
123 extern void ospf6_area_show (struct vty *, struct ospf6_area *);
124
125 extern void ospf6_area_config_write (struct vty *vty);
126 extern void ospf6_area_init (void);
127
128 #endif /* OSPF_AREA_H */