File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / lib / zclient.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:12 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_20_1, v0_99_20, HEAD
quagga

    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>