Annotation of embedaddon/quagga/lib/zclient.h, revision 1.1.1.2
1.1 misho 1: /* Zebra's client header.
2: * Copyright (C) 1999 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
8: * the Free Software Foundation; either version 2, or (at your option)
9: * any 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 _ZEBRA_ZCLIENT_H
23: #define _ZEBRA_ZCLIENT_H
24:
1.1.1.2 ! misho 25: /* For struct zapi_ipv{4,6}. */
! 26: #include "prefix.h"
! 27:
1.1 misho 28: /* For struct interface and struct connected. */
29: #include "if.h"
30:
31: /* For input/output buffer to zebra. */
32: #define ZEBRA_MAX_PACKET_SIZ 4096
33:
34: /* Zebra header size. */
35: #define ZEBRA_HEADER_SIZE 6
36:
37: /* Structure for the zebra client. */
38: struct zclient
39: {
40: /* Socket to zebra daemon. */
41: int sock;
42:
43: /* Flag of communication to zebra is enabled or not. Default is on.
44: This flag is disabled by `no router zebra' statement. */
45: int enable;
46:
47: /* Connection failure count. */
48: int fail;
49:
50: /* Input buffer for zebra message. */
51: struct stream *ibuf;
52:
53: /* Output buffer for zebra message. */
54: struct stream *obuf;
55:
56: /* Buffer of data waiting to be written to zebra. */
57: struct buffer *wb;
58:
59: /* Read and connect thread. */
60: struct thread *t_read;
61: struct thread *t_connect;
62:
63: /* Thread to write buffered data to zebra. */
64: struct thread *t_write;
65:
66: /* Redistribute information. */
67: u_char redist_default;
68: u_char redist[ZEBRA_ROUTE_MAX];
69:
70: /* Redistribute defauilt. */
71: u_char default_information;
72:
73: /* Pointer to the callback functions. */
74: int (*router_id_update) (int, struct zclient *, uint16_t);
75: int (*interface_add) (int, struct zclient *, uint16_t);
76: int (*interface_delete) (int, struct zclient *, uint16_t);
77: int (*interface_up) (int, struct zclient *, uint16_t);
78: int (*interface_down) (int, struct zclient *, uint16_t);
79: int (*interface_address_add) (int, struct zclient *, uint16_t);
80: int (*interface_address_delete) (int, struct zclient *, uint16_t);
81: int (*ipv4_route_add) (int, struct zclient *, uint16_t);
82: int (*ipv4_route_delete) (int, struct zclient *, uint16_t);
83: int (*ipv6_route_add) (int, struct zclient *, uint16_t);
84: int (*ipv6_route_delete) (int, struct zclient *, uint16_t);
85: };
86:
87: /* Zebra API message flag. */
88: #define ZAPI_MESSAGE_NEXTHOP 0x01
89: #define ZAPI_MESSAGE_IFINDEX 0x02
90: #define ZAPI_MESSAGE_DISTANCE 0x04
91: #define ZAPI_MESSAGE_METRIC 0x08
92:
93: /* Zserv protocol message header */
94: struct zserv_header
95: {
96: uint16_t length;
97: uint8_t marker; /* corresponds to command field in old zserv
98: * always set to 255 in new zserv.
99: */
100: uint8_t version;
1.1.1.2 ! misho 101: #define ZSERV_VERSION 2
1.1 misho 102: uint16_t command;
103: };
104:
105: /* Zebra IPv4 route message API. */
106: struct zapi_ipv4
107: {
108: u_char type;
109:
110: u_char flags;
111:
112: u_char message;
113:
1.1.1.2 ! misho 114: safi_t safi;
! 115:
1.1 misho 116: u_char nexthop_num;
117: struct in_addr **nexthop;
118:
119: u_char ifindex_num;
120: unsigned int *ifindex;
121:
122: u_char distance;
123:
124: u_int32_t metric;
125: };
126:
127: /* Prototypes of zebra client service functions. */
128: extern struct zclient *zclient_new (void);
129: extern void zclient_init (struct zclient *, int);
130: extern int zclient_start (struct zclient *);
131: extern void zclient_stop (struct zclient *);
132: extern void zclient_reset (struct zclient *);
133: extern void zclient_free (struct zclient *);
134:
1.1.1.2 ! misho 135: extern int zclient_socket_connect (struct zclient *);
! 136: extern void zclient_serv_path_set (char *path);
1.1 misho 137:
138: /* Send redistribute command to zebra daemon. Do not update zclient state. */
139: extern int zebra_redistribute_send (int command, struct zclient *, int type);
140:
141: /* If state has changed, update state and call zebra_redistribute_send. */
142: extern void zclient_redistribute (int command, struct zclient *, int type);
143:
144: /* If state has changed, update state and send the command to zebra. */
145: extern void zclient_redistribute_default (int command, struct zclient *);
146:
147: /* Send the message in zclient->obuf to the zebra daemon (or enqueue it).
148: Returns 0 for success or -1 on an I/O error. */
149: extern int zclient_send_message(struct zclient *);
150:
151: /* create header for command, length to be filled in by user later */
152: extern void zclient_create_header (struct stream *, uint16_t);
153:
154: extern struct interface *zebra_interface_add_read (struct stream *);
155: extern struct interface *zebra_interface_state_read (struct stream *s);
156: extern struct connected *zebra_interface_address_read (int, struct stream *);
157: extern void zebra_interface_if_set_value (struct stream *, struct interface *);
158: extern void zebra_router_id_update_read (struct stream *s, struct prefix *rid);
159: extern int zapi_ipv4_route (u_char, struct zclient *, struct prefix_ipv4 *,
160: struct zapi_ipv4 *);
161:
162: #ifdef HAVE_IPV6
163: /* IPv6 prefix add and delete function prototype. */
164:
165: struct zapi_ipv6
166: {
167: u_char type;
168:
169: u_char flags;
170:
171: u_char message;
172:
1.1.1.2 ! misho 173: safi_t safi;
! 174:
1.1 misho 175: u_char nexthop_num;
176: struct in6_addr **nexthop;
177:
178: u_char ifindex_num;
179: unsigned int *ifindex;
180:
181: u_char distance;
182:
183: u_int32_t metric;
184: };
185:
186: extern int zapi_ipv6_route (u_char cmd, struct zclient *zclient,
187: struct prefix_ipv6 *p, struct zapi_ipv6 *api);
188: #endif /* HAVE_IPV6 */
189:
190: #endif /* _ZEBRA_ZCLIENT_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>