#include "rib.h"
#include "if.h"
#include "workqueue.h"
+#include "vrf.h"
+#include "routemap.h"
+#include "vty.h"
+#include "zclient.h"
+#include "zebra/zebra_ns.h"
/* Default port information. */
#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
{
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. */
- u_char ridinfo;
+ 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 */
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;
+extern unsigned int multipath_num;
/* Prototypes. */
extern void zebra_init (void);
extern void zebra_zserv_socket_init (char *path);
extern void hostinfo_get (void);
extern void rib_init (void);
-extern void interface_list (void);
-extern void kernel_init (void);
-extern void route_read (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_route_multipath (int, struct zserv *, struct prefix *,
- struct rib *);
-extern int zsend_router_id_update(struct zserv *, struct prefix *);
+extern int zsend_redistribute_route (int, struct zserv *, struct prefix *,
+ 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 void zserv_create_header(struct stream *s, uint16_t cmd);
+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);
+extern struct zserv *zebra_find_client (u_char proto);
+
#endif /* _ZEBRA_ZEBRA_H */