summaryrefslogtreecommitdiffstats
path: root/lib/zclient.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/zclient.h')
-rw-r--r--lib/zclient.h63
1 files changed, 40 insertions, 23 deletions
diff --git a/lib/zclient.h b/lib/zclient.h
index a51b3def..19b4f0ea 100644
--- a/lib/zclient.h
+++ b/lib/zclient.h
@@ -28,11 +28,14 @@
/* For struct interface and struct connected. */
#include "if.h"
+/* For vrf_bitmap_t. */
+#include "vrf.h"
+
/* For input/output buffer to zebra. */
#define ZEBRA_MAX_PACKET_SIZ 4096
/* Zebra header size. */
-#define ZEBRA_HEADER_SIZE 6
+#define ZEBRA_HEADER_SIZE 8
/* Structure for the zebra client. */
struct zclient
@@ -65,23 +68,24 @@ struct zclient
/* Redistribute information. */
u_char redist_default;
- u_char redist[ZEBRA_ROUTE_MAX];
+ vrf_bitmap_t redist[ZEBRA_ROUTE_MAX];
/* Redistribute defauilt. */
- u_char default_information;
+ vrf_bitmap_t default_information;
/* Pointer to the callback functions. */
- int (*router_id_update) (int, struct zclient *, uint16_t);
- int (*interface_add) (int, struct zclient *, uint16_t);
- int (*interface_delete) (int, struct zclient *, uint16_t);
- int (*interface_up) (int, struct zclient *, uint16_t);
- int (*interface_down) (int, struct zclient *, uint16_t);
- int (*interface_address_add) (int, struct zclient *, uint16_t);
- int (*interface_address_delete) (int, struct zclient *, uint16_t);
- int (*ipv4_route_add) (int, struct zclient *, uint16_t);
- int (*ipv4_route_delete) (int, struct zclient *, uint16_t);
- int (*ipv6_route_add) (int, struct zclient *, uint16_t);
- int (*ipv6_route_delete) (int, struct zclient *, uint16_t);
+ void (*zebra_connected) (struct zclient *);
+ int (*router_id_update) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*interface_add) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*interface_delete) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*interface_up) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*interface_down) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*interface_address_add) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*interface_address_delete) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*ipv4_route_add) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*ipv4_route_delete) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*ipv6_route_add) (int, struct zclient *, uint16_t, vrf_id_t);
+ int (*ipv6_route_delete) (int, struct zclient *, uint16_t, vrf_id_t);
};
/* Zebra API message flag. */
@@ -98,7 +102,8 @@ struct zserv_header
* always set to 255 in new zserv.
*/
uint8_t version;
-#define ZSERV_VERSION 2
+#define ZSERV_VERSION 3
+ vrf_id_t vrf_id;
uint16_t command;
};
@@ -122,6 +127,8 @@ struct zapi_ipv4
u_char distance;
u_int32_t metric;
+
+ vrf_id_t vrf_id;
};
/* Prototypes of zebra client service functions. */
@@ -136,25 +143,33 @@ extern int zclient_socket_connect (struct zclient *);
extern void zclient_serv_path_set (char *path);
extern const char *zclient_serv_path_get (void);
+extern void zclient_send_requests (struct zclient *, vrf_id_t);
+
/* Send redistribute command to zebra daemon. Do not update zclient state. */
-extern int zebra_redistribute_send (int command, struct zclient *, int type);
+extern int zebra_redistribute_send (int command, struct zclient *, int type,
+ vrf_id_t vrf_id);
/* If state has changed, update state and call zebra_redistribute_send. */
-extern void zclient_redistribute (int command, struct zclient *, int type);
+extern void zclient_redistribute (int command, struct zclient *, int type,
+ vrf_id_t vrf_id);
/* If state has changed, update state and send the command to zebra. */
-extern void zclient_redistribute_default (int command, struct zclient *);
+extern void zclient_redistribute_default (int command, struct zclient *,
+ vrf_id_t vrf_id);
/* Send the message in zclient->obuf to the zebra daemon (or enqueue it).
Returns 0 for success or -1 on an I/O error. */
extern int zclient_send_message(struct zclient *);
/* create header for command, length to be filled in by user later */
-extern void zclient_create_header (struct stream *, uint16_t);
-
-extern struct interface *zebra_interface_add_read (struct stream *);
-extern struct interface *zebra_interface_state_read (struct stream *s);
-extern struct connected *zebra_interface_address_read (int, struct stream *);
+extern void zclient_create_header (struct stream *, uint16_t, vrf_id_t);
+
+extern struct interface *zebra_interface_add_read (struct stream *,
+ vrf_id_t);
+extern struct interface *zebra_interface_state_read (struct stream *,
+ vrf_id_t);
+extern struct connected *zebra_interface_address_read (int, struct stream *,
+ vrf_id_t);
extern void zebra_interface_if_set_value (struct stream *, struct interface *);
extern void zebra_router_id_update_read (struct stream *s, struct prefix *rid);
extern int zapi_ipv4_route (u_char, struct zclient *, struct prefix_ipv4 *,
@@ -182,6 +197,8 @@ struct zapi_ipv6
u_char distance;
u_int32_t metric;
+
+ vrf_id_t vrf_id;
};
extern int zapi_ipv6_route (u_char cmd, struct zclient *zclient,