File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / lib / zclient.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Oct 9 09:22:28 2012 UTC (11 years, 9 months ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_22p0, v0_99_22, v0_99_21, 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 zapi_ipv{4,6}. */
   26: #include "prefix.h"
   27: 
   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;
  101: #define ZSERV_VERSION	2
  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: 
  114:   safi_t safi;
  115: 
  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: 
  135: extern int  zclient_socket_connect (struct zclient *);
  136: extern void zclient_serv_path_set  (char *path);
  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: 
  173:   safi_t safi;
  174: 
  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>