]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zserv.h
zebra: check at startup if the kernel supports MPLS
[mirror_frr.git] / zebra / zserv.h
index 90e85f689e57e9f121c2ef664f9795e7f2628dab..ce243dd6ac8a2d94670aa5179fd272c629923914 100644 (file)
 #define _ZEBRA_ZSERV_H
 
 #include "rib.h"
-
+#include "if.h"
+#include "workqueue.h"
+#include "routemap.h"
+#include "vty.h"
+#include "zclient.h"
+#include "vrf.h"
+
+#include "zebra/zebra_ns.h"
 /* Default port information. */
-#define ZEBRA_PORT                    2600
 #define ZEBRA_VTY_PORT                2601
 
 /* Default configuration filename. */
 #define DEFAULT_CONFIG_FILE "zebra.conf"
 
+#define ZEBRA_RMAP_DEFAULT_UPDATE_TIMER 5 /* disabled by default */
+
 /* Client structure. */
 struct zserv
 {
@@ -41,21 +49,72 @@ struct zserv
   struct stream *ibuf;
   struct stream *obuf;
 
+  /* Buffer of data waiting to be written to client. */
+  struct buffer *wb;
+
   /* Threads for read/write. */
   struct thread *t_read;
   struct thread *t_write;
 
+  /* Thread for delayed close. */
+  struct thread *t_suicide;
+
   /* default routing table this client munges */
   int rtm_table;
 
   /* This client's redistribute flag. */
-  u_char redist[ZEBRA_ROUTE_MAX];
+  struct redist_proto mi_redist[AFI_MAX][ZEBRA_ROUTE_MAX];
+  vrf_bitmap_t redist[AFI_MAX][ZEBRA_ROUTE_MAX];
 
   /* Redistribute default route flag. */
-  u_char redist_default;
+  vrf_bitmap_t redist_default;
 
   /* Interface information. */
-  u_char ifinfo;
+  vrf_bitmap_t ifinfo;
+
+  /* Router-id information. */
+  vrf_bitmap_t ridinfo;
+
+  /* client's protocol */
+  u_char proto;
+  u_short instance;
+
+  /* Statistics */
+  u_int32_t redist_v4_add_cnt;
+  u_int32_t redist_v4_del_cnt;
+  u_int32_t redist_v6_add_cnt;
+  u_int32_t redist_v6_del_cnt;
+  u_int32_t v4_route_add_cnt;
+  u_int32_t v4_route_upd8_cnt;
+  u_int32_t v4_route_del_cnt;
+  u_int32_t v6_route_add_cnt;
+  u_int32_t v6_route_del_cnt;
+  u_int32_t v6_route_upd8_cnt;
+  u_int32_t connected_rt_add_cnt;
+  u_int32_t connected_rt_del_cnt;
+  u_int32_t ifup_cnt;
+  u_int32_t ifdown_cnt;
+  u_int32_t ifadd_cnt;
+  u_int32_t ifdel_cnt;
+  u_int32_t if_bfd_cnt;
+  u_int32_t bfd_peer_add_cnt;
+  u_int32_t bfd_peer_upd8_cnt;
+  u_int32_t bfd_peer_del_cnt;
+  u_int32_t bfd_peer_replay_cnt;
+  u_int32_t vrfadd_cnt;
+  u_int32_t vrfdel_cnt;
+  u_int32_t if_vrfchg_cnt;
+  u_int32_t bfd_client_reg_cnt;
+
+  time_t connect_time;
+  time_t last_read_time;
+  time_t last_write_time;
+  time_t nh_reg_time;
+  time_t nh_dereg_time;
+  time_t nh_last_upd_time;
+
+  int last_read_cmd;
+  int last_write_cmd;
 };
 
 /* Zebra instance */
@@ -63,37 +122,58 @@ struct zebra_t
 {
   /* Thread master */
   struct thread_master *master;
-  list client_list;
+  struct list *client_list;
 
   /* default table */
-  int rtm_table_default;
-  
-};
+  u_int32_t rtm_table_default;
+
+  /* rib work queue */
+  struct work_queue *ribq;
+  struct meta_queue *mq;
 
-/* Count prefix size from mask length */
-#define PSIZE(a) (((a) + 7) / (8))
+  /* LSP work queue */
+  struct work_queue *lsp_process_q;
+};
+extern struct zebra_t zebrad;
 
 /* Prototypes. */
-void zebra_init ();
-void zebra_if_init ();
-void hostinfo_get ();
-void rib_init ();
-void interface_list ();
-void kernel_init ();
-void route_read ();
-void rtadv_init ();
-void zebra_snmp_init ();
-
-int zsend_interface_add (struct zserv *, struct interface *);
-#if (defined(RTM_IFANNOUNCE) || defined(HAVE_NETLINK))
-int zsend_interface_delete (struct zserv *, struct interface *);
-#endif
-int zsend_interface_address (int, struct zserv *, struct interface *,
-                             struct connected *);
-int zsend_interface_update (int, struct zserv *, struct interface *);
-int zsend_route_multipath (int, struct zserv *, struct prefix *, struct rib *);
+extern void zebra_init (void);
+extern void zebra_if_init (void);
+extern void zebra_zserv_socket_init (char *path);
+extern void hostinfo_get (void);
+extern void rib_init (void);
+extern void interface_list (struct zebra_ns *);
+extern void route_read (struct zebra_ns *);
+extern void kernel_init (struct zebra_ns *);
+extern void kernel_terminate (struct zebra_ns *);
+extern void zebra_route_map_init (void);
+extern void zebra_snmp_init (void);
+extern void zebra_vty_init (void);
+
+extern int zsend_vrf_add (struct zserv *, struct zebra_vrf *);
+extern int zsend_vrf_delete (struct zserv *, struct zebra_vrf *);
+
+extern int zsend_interface_add (struct zserv *, struct interface *);
+extern int zsend_interface_delete (struct zserv *, struct interface *);
+extern int zsend_interface_addresses (struct zserv *, struct interface *);
+extern int zsend_interface_address (int, struct zserv *, struct interface *,
+                                    struct connected *);
+extern void nbr_connected_add_ipv6 (struct interface *, struct in6_addr *);
+extern void nbr_connected_delete_ipv6 (struct interface *, struct in6_addr *);
+extern int zsend_interface_update (int, struct zserv *, struct interface *);
+extern int zsend_redistribute_route (int, struct zserv *, struct prefix *,
+                                    struct rib *);
+extern int zsend_router_id_update (struct zserv *, struct prefix *,
+                                   vrf_id_t);
+extern int zsend_interface_vrf_update (struct zserv *, struct interface *,
+                                       vrf_id_t);
+
+extern int zsend_interface_link_params (struct zserv *, struct interface *);
 
 extern pid_t pid;
-extern pid_t old_pid;
+
+extern void zserv_create_header(struct stream *s, uint16_t cmd, vrf_id_t vrf_id);
+extern void zserv_nexthop_num_warn(const char *, const struct prefix *, const unsigned int);
+extern int zebra_server_send_message(struct zserv *client);
 
 #endif /* _ZEBRA_ZEBRA_H */