zclient.h
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:4k
源码类别:

网络

开发平台:

Unix_Linux

  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. #ifndef _ZEBRA_ZCLIENT_H
  22. #define _ZEBRA_ZCLIENT_H
  23. /* For struct interface and struct connected. */
  24. #include "if.h"
  25. /* For input/output buffer to zebra. */
  26. #define ZEBRA_MAX_PACKET_SIZ          4096
  27. /* Zebra header size. */
  28. #define ZEBRA_HEADER_SIZE                3
  29. /* Structure for the zebra client. */
  30. struct zclient
  31. {
  32.   /* Socket to zebra daemon. */
  33.   int sock;
  34.   /* Flag of communication to zebra is enabled or not.  Default is on.
  35.      This flag is disabled by `no router zebra' statement. */
  36.   int enable;
  37.   /* Connection failure count. */
  38.   int fail;
  39.   /* Input buffer for zebra message. */
  40.   struct stream *ibuf;
  41.   /* Output buffer for zebra message. */
  42.   struct stream *obuf;
  43.   /* Read and connect thread. */
  44.   struct thread *t_read;
  45.   struct thread *t_connect;
  46.   /* Redistribute information. */
  47.   u_char redist_default;
  48.   u_char redist[ZEBRA_ROUTE_MAX];
  49.   /* Redistribute defauilt. */
  50.   u_char default_information;
  51.   /* Pointer to the callback functions. */
  52.   int (*interface_add) (int, struct zclient *, zebra_size_t);
  53.   int (*interface_delete) (int, struct zclient *, zebra_size_t);
  54.   int (*interface_up) (int, struct zclient *, zebra_size_t);
  55.   int (*interface_down) (int, struct zclient *, zebra_size_t);
  56.   int (*interface_address_add) (int, struct zclient *, zebra_size_t);
  57.   int (*interface_address_delete) (int, struct zclient *, zebra_size_t);
  58.   int (*ipv4_route_add) (int, struct zclient *, zebra_size_t);
  59.   int (*ipv4_route_delete) (int, struct zclient *, zebra_size_t);
  60.   int (*ipv6_route_add) (int, struct zclient *, zebra_size_t);
  61.   int (*ipv6_route_delete) (int, struct zclient *, zebra_size_t);
  62. };
  63. /* Zebra API message flag. */
  64. #define ZAPI_MESSAGE_NEXTHOP  0x01
  65. #define ZAPI_MESSAGE_IFINDEX  0x02
  66. #define ZAPI_MESSAGE_DISTANCE 0x04
  67. #define ZAPI_MESSAGE_METRIC   0x08
  68. /* Zebra IPv4 route message API. */
  69. struct zapi_ipv4
  70. {
  71.   u_char type;
  72.   u_char flags;
  73.   u_char message;
  74.   u_char nexthop_num;
  75.   struct in_addr **nexthop;
  76.   u_char ifindex_num;
  77.   unsigned int *ifindex;
  78.   u_char distance;
  79.   u_int32_t metric;
  80. };
  81. int
  82. zapi_ipv4_add (struct zclient *, struct prefix_ipv4 *, struct zapi_ipv4 *);
  83. int
  84. zapi_ipv4_delete (struct zclient *, struct prefix_ipv4 *, struct zapi_ipv4 *);
  85. /* Prototypes of zebra client service functions. */
  86. struct zclient *zclient_new (void);
  87. void zclient_free (struct zclient *);
  88. void zclient_init (struct zclient *, int);
  89. int zclient_start (struct zclient *);
  90. void zclient_stop (struct zclient *);
  91. void zclient_reset (struct zclient *);
  92. int zclient_socket ();
  93. int zclient_socket_un (char *);
  94. void zclient_redistribute_set (struct zclient *, int);
  95. void zclient_redistribute_unset (struct zclient *, int);
  96. void zclient_redistribute_default_set (struct zclient *);
  97. void zclient_redistribute_default_unset (struct zclient *);
  98. /* struct zebra *zebra_new (); */
  99. int zebra_redistribute_send (int, int, int);
  100. struct interface *zebra_interface_add_read (struct stream *);
  101. struct interface *zebra_interface_state_read (struct stream *s);
  102. struct connected *zebra_interface_address_add_read (struct stream *);
  103. struct connected *zebra_interface_address_delete_read (struct stream *);
  104. #ifdef HAVE_IPV6
  105. /* IPv6 prefix add and delete function prototype. */
  106. struct zapi_ipv6
  107. {
  108.   u_char type;
  109.   u_char flags;
  110.   u_char message;
  111.   u_char nexthop_num;
  112.   struct in6_addr **nexthop;
  113.   u_char ifindex_num;
  114.   unsigned int *ifindex;
  115.   u_char distance;
  116.   u_int32_t metric;
  117. };
  118. int
  119. zapi_ipv6_add (struct zclient *zclient, struct prefix_ipv6 *p,
  120.        struct zapi_ipv6 *api);
  121. int
  122. zapi_ipv6_delete (struct zclient *zclient, struct prefix_ipv6 *p,
  123.   struct zapi_ipv6 *api);
  124. #endif /* HAVE_IPV6 */
  125. #endif /* _ZEBRA_ZCLIENT_H */