Import Upstream version 1.2.2
[quagga-debian.git] / ospf6d / ospf6_interface.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 OSPF6_INTERFACE_H
23 #define OSPF6_INTERFACE_H
24
25 #include "if.h"
26
27 /* Debug option */
28 extern unsigned char conf_debug_ospf6_interface;
29 #define OSPF6_DEBUG_INTERFACE_ON() \
30   (conf_debug_ospf6_interface = 1)
31 #define OSPF6_DEBUG_INTERFACE_OFF() \
32   (conf_debug_ospf6_interface = 0)
33 #define IS_OSPF6_DEBUG_INTERFACE \
34   (conf_debug_ospf6_interface)
35
36 /* Interface structure */
37 struct ospf6_interface
38 {
39   /* IF info from zebra */
40   struct interface *interface;
41
42   /* back pointer */
43   struct ospf6_area *area;
44
45   /* list of ospf6 neighbor */
46   struct list *neighbor_list;
47
48   /* linklocal address of this I/F */
49   struct in6_addr *linklocal_addr;
50
51   /* Interface ID; use interface->ifindex */
52
53   /* ospf6 instance id */
54   u_char instance_id;
55
56   /* I/F transmission delay */
57   u_int32_t transdelay;
58
59   /* Network Type */
60   u_char type;
61
62   /* Router Priority */
63   u_char priority;
64
65   /* Time Interval */
66   u_int16_t hello_interval;
67   u_int16_t dead_interval;
68   u_int32_t rxmt_interval;
69
70   u_int32_t state_change;
71
72   /* Cost */
73   u_int32_t cost;
74
75   /* I/F MTU */
76   u_int32_t ifmtu;
77
78   /* Interface State */
79   u_char state;
80
81   /* Interface socket setting trial counter, resets on success */
82   u_char sso_try_cnt;
83
84   /* OSPF6 Interface flag */
85   char flag;
86
87   /* MTU mismatch check */
88   u_char mtu_ignore;
89
90   /* Decision of DR Election */
91   u_int32_t drouter;
92   u_int32_t bdrouter;
93   u_int32_t prev_drouter;
94   u_int32_t prev_bdrouter;
95
96   /* Linklocal LSA Database: includes Link-LSA */
97   struct ospf6_lsdb *lsdb;
98   struct ospf6_lsdb *lsdb_self;
99
100   struct ospf6_lsdb *lsupdate_list;
101   struct ospf6_lsdb *lsack_list;
102
103   /* Ongoing Tasks */
104   struct thread *thread_send_hello;
105   struct thread *thread_send_lsupdate;
106   struct thread *thread_send_lsack;
107
108   struct thread *thread_network_lsa;
109   struct thread *thread_link_lsa;
110   struct thread *thread_intra_prefix_lsa;
111
112   struct ospf6_route_table *route_connected;
113
114   /* prefix-list name to filter connected prefix */
115   char *plist_name;
116 };
117
118 /* interface state */
119 #define OSPF6_INTERFACE_NONE             0
120 #define OSPF6_INTERFACE_DOWN             1
121 #define OSPF6_INTERFACE_LOOPBACK         2
122 #define OSPF6_INTERFACE_WAITING          3
123 #define OSPF6_INTERFACE_POINTTOPOINT     4
124 #define OSPF6_INTERFACE_DROTHER          5
125 #define OSPF6_INTERFACE_BDR              6
126 #define OSPF6_INTERFACE_DR               7
127 #define OSPF6_INTERFACE_MAX              8
128
129 extern const char *ospf6_interface_state_str[];
130
131 /* flags */
132 #define OSPF6_INTERFACE_DISABLE      0x01
133 #define OSPF6_INTERFACE_PASSIVE      0x02
134 #define OSPF6_INTERFACE_NOAUTOCOST   0x04
135
136 /* default values */
137 #define OSPF6_INTERFACE_HELLO_INTERVAL 10
138 #define OSPF6_INTERFACE_DEAD_INTERVAL  40
139 #define OSPF6_INTERFACE_RXMT_INTERVAL  5
140 #define OSPF6_INTERFACE_COST           1
141 #define OSPF6_INTERFACE_PRIORITY       1
142 #define OSPF6_INTERFACE_TRANSDELAY     1
143 #define OSPF6_INTERFACE_INSTANCE_ID    0
144 #define OSPF6_INTERFACE_BANDWIDTH      10000   /* Kbps */
145 #define OSPF6_REFERENCE_BANDWIDTH      100000  /* Kbps */
146 #define OSPF6_INTERFACE_SSO_RETRY_INT  1
147 #define OSPF6_INTERFACE_SSO_RETRY_MAX  5
148
149
150 /* Function Prototypes */
151
152 extern struct ospf6_interface *ospf6_interface_lookup_by_ifindex (int);
153 extern struct ospf6_interface *ospf6_interface_create (struct interface *);
154 extern void ospf6_interface_delete (struct ospf6_interface *);
155
156 extern void ospf6_interface_enable (struct ospf6_interface *);
157 extern void ospf6_interface_disable (struct ospf6_interface *);
158
159 extern void ospf6_interface_if_add (struct interface *);
160 extern void ospf6_interface_state_update (struct interface *);
161 extern void ospf6_interface_connected_route_update (struct interface *);
162
163 /* interface event */
164 extern int interface_up (struct thread *);
165 extern int interface_down (struct thread *);
166 extern int wait_timer (struct thread *);
167 extern int backup_seen (struct thread *);
168 extern int neighbor_change (struct thread *);
169
170 extern void ospf6_interface_init (void);
171
172 extern void install_element_ospf6_clear_interface (void);
173
174 extern int config_write_ospf6_debug_interface (struct vty *vty);
175 extern void install_element_ospf6_debug_interface (void);
176
177 #endif /* OSPF6_INTERFACE_H */