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