]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zserv.h
zebra: reorganize zserv, batch i/o
[mirror_frr.git] / zebra / zserv.h
index 7d5f6b45437f203c23c6b3f7d1e8e1e27239cb11..a055a28c0100addf4f59dfa99456916124934d65 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "zebra/zebra_ns.h"
 #include "zebra/zebra_pw.h"
+//#include "zebra/zebra_pbr.h"
 
 /* Default port information. */
 #define ZEBRA_VTY_PORT                2601
@@ -46,8 +47,12 @@ struct zserv {
        int sock;
 
        /* Input/output buffer to the client. */
-       struct stream *ibuf;
-       struct stream *obuf;
+       struct stream_fifo *ibuf_fifo;
+       struct stream_fifo *obuf_fifo;
+
+       /* Private I/O buffers */
+       struct stream *ibuf_work;
+       struct stream *obuf_work;
 
        /* Buffer of data waiting to be written to client. */
        struct buffer *wb;
@@ -128,6 +133,19 @@ struct zserv {
        int last_write_cmd;
 };
 
+/* ZAPI protocol structs */
+struct zmsghdr {
+       uint16_t length;
+       uint8_t marker;
+       uint8_t version;
+       uint32_t vrf_id;
+       uint16_t command;
+};
+
+#define ZAPI_HANDLER_ARGS                                                      \
+       struct zserv *client, struct zmsghdr *hdr, struct stream *msg,         \
+               struct zebra_vrf *zvrf
+
 /* Zebra instance */
 struct zebra_t {
        /* Thread master */
@@ -137,15 +155,15 @@ struct zebra_t {
        /* default table */
        u_int32_t rtm_table_default;
 
-       /* rib work queue */
-       #define ZEBRA_RIB_PROCESS_HOLD_TIME 10
+/* rib work queue */
+#define ZEBRA_RIB_PROCESS_HOLD_TIME 10
        struct work_queue *ribq;
        struct meta_queue *mq;
 
        /* LSP work queue */
        struct work_queue *lsp_process_q;
 
-       #define ZEBRA_ZAPI_PACKETS_TO_PROCESS 10
+#define ZEBRA_ZAPI_PACKETS_TO_PROCESS 10
        u_int32_t packets_to_process;
 };
 extern struct zebra_t zebrad;
@@ -175,13 +193,16 @@ extern int zsend_interface_vrf_update(struct zserv *, struct interface *,
 extern int zsend_interface_link_params(struct zserv *, struct interface *);
 extern int zsend_pw_update(struct zserv *, struct zebra_pw *);
 
-extern int zsend_route_notify_owner(u_char proto, u_short instance,
-                                   vrf_id_t vrf_id, struct prefix *p,
+extern int zsend_route_notify_owner(struct route_entry *re, struct prefix *p,
                                    enum zapi_route_notify_owner note);
 
+struct zebra_pbr_rule;
+extern void zsend_rule_notify_owner(struct zebra_pbr_rule *rule,
+                                   enum zapi_rule_notify_owner note);
+
 extern void zserv_nexthop_num_warn(const char *, const struct prefix *,
                                   const unsigned int);
-extern int zebra_server_send_message(struct zserv *client);
+extern int zebra_server_send_message(struct zserv *client, struct stream *msg);
 
 extern struct zserv *zebra_find_client(u_char proto, u_short instance);