Import Upstream version 1.2.2
[quagga-debian.git] / zebra / zserv.h
1 /* Zebra daemon server header.
2  * Copyright (C) 1997, 98 Kunihiro Ishiguro
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 Free
18  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
19  * 02111-1307, USA.  
20  */
21
22 #ifndef _ZEBRA_ZSERV_H
23 #define _ZEBRA_ZSERV_H
24
25 #include "rib.h"
26 #include "if.h"
27 #include "workqueue.h"
28 #include "vrf.h"
29
30 /* Default port information. */
31 #define ZEBRA_VTY_PORT                2601
32
33 /* Default configuration filename. */
34 #define DEFAULT_CONFIG_FILE "zebra.conf"
35
36 /* Client structure. */
37 struct zserv
38 {
39   /* Client file descriptor. */
40   int sock;
41
42   /* Input/output buffer to the client. */
43   struct stream *ibuf;
44   struct stream *obuf;
45
46   /* Buffer of data waiting to be written to client. */
47   struct buffer *wb;
48
49   /* Threads for read/write. */
50   struct thread *t_read;
51   struct thread *t_write;
52
53   /* Thread for delayed close. */
54   struct thread *t_suicide;
55
56   /* default routing table this client munges */
57   int rtm_table;
58
59   /* This client's redistribute flag. */
60   vrf_bitmap_t redist[ZEBRA_ROUTE_MAX];
61
62   /* Redistribute default route flag. */
63   vrf_bitmap_t redist_default;
64
65   /* Interface information. */
66   vrf_bitmap_t ifinfo;
67
68   /* Router-id information. */
69   vrf_bitmap_t ridinfo;
70
71   /* client's protocol */
72   u_char proto;
73
74   /* Statistics */
75   u_int32_t redist_v4_add_cnt;
76   u_int32_t redist_v4_del_cnt;
77   u_int32_t redist_v6_add_cnt;
78   u_int32_t redist_v6_del_cnt;
79   u_int32_t v4_route_add_cnt;
80   u_int32_t v4_route_upd8_cnt;
81   u_int32_t v4_route_del_cnt;
82   u_int32_t v6_route_add_cnt;
83   u_int32_t v6_route_del_cnt;
84   u_int32_t v6_route_upd8_cnt;
85   u_int32_t connected_rt_add_cnt;
86   u_int32_t connected_rt_del_cnt;
87   u_int32_t ifup_cnt;
88   u_int32_t ifdown_cnt;
89   u_int32_t ifadd_cnt;
90   u_int32_t ifdel_cnt;
91
92   time_t connect_time;
93   time_t last_read_time;
94   time_t last_write_time;
95   time_t nh_reg_time;
96   time_t nh_dereg_time;
97   time_t nh_last_upd_time;
98
99   int last_read_cmd;
100   int last_write_cmd;
101 };
102
103 /* Zebra instance */
104 struct zebra_t
105 {
106   /* Thread master */
107   struct thread_master *master;
108   struct list *client_list;
109
110   /* default table */
111   int rtm_table_default;
112
113   /* rib work queue */
114   struct work_queue *ribq;
115   struct meta_queue *mq;
116 };
117
118 /* Prototypes. */
119 extern void zebra_init (void);
120 extern void zebra_if_init (void);
121 extern void zebra_zserv_socket_init (char *path);
122 extern void hostinfo_get (void);
123 extern void rib_init (void);
124 extern void interface_list (struct zebra_vrf *);
125 extern void route_read (struct zebra_vrf *);
126 extern void kernel_init (struct zebra_vrf *);
127 extern void kernel_terminate (struct zebra_vrf *);
128 extern void zebra_route_map_init (void);
129 extern void zebra_snmp_init (void);
130 extern void zebra_vty_init (void);
131
132 extern int zsend_interface_add (struct zserv *, struct interface *);
133 extern int zsend_interface_delete (struct zserv *, struct interface *);
134 extern int zsend_interface_address (int, struct zserv *, struct interface *,
135                                     struct connected *);
136 extern int zsend_interface_update (int, struct zserv *, struct interface *);
137 extern int zsend_route_multipath (int, struct zserv *, struct prefix *, 
138                                   struct rib *);
139 extern int zsend_router_id_update (struct zserv *, struct prefix *,
140                                    vrf_id_t);
141
142 extern int zsend_interface_link_params (struct zserv *, struct interface *);
143
144 extern pid_t pid;
145
146 extern void zserv_create_header(struct stream *s, uint16_t cmd, vrf_id_t);
147 extern int zebra_server_send_message(struct zserv *client);
148
149 #endif /* _ZEBRA_ZEBRA_H */