Annotation of embedaddon/quagga/lib/zclient.h, revision 1.1.1.3

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>