version 1.1, 2012/02/21 17:26:12
|
version 1.1.1.3, 2016/11/02 10:09:10
|
Line 22
|
Line 22
|
#ifndef _ZEBRA_ZCLIENT_H |
#ifndef _ZEBRA_ZCLIENT_H |
#define _ZEBRA_ZCLIENT_H |
#define _ZEBRA_ZCLIENT_H |
|
|
|
/* For struct zapi_ipv{4,6}. */ |
|
#include "prefix.h" |
|
|
/* For struct interface and struct connected. */ |
/* For struct interface and struct connected. */ |
#include "if.h" |
#include "if.h" |
|
|
|
/* For vrf_bitmap_t. */ |
|
#include "vrf.h" |
|
|
/* For input/output buffer to zebra. */ |
/* For input/output buffer to zebra. */ |
#define ZEBRA_MAX_PACKET_SIZ 4096 |
#define ZEBRA_MAX_PACKET_SIZ 4096 |
|
|
/* Zebra header size. */ |
/* Zebra header size. */ |
#define ZEBRA_HEADER_SIZE 6 | #define ZEBRA_HEADER_SIZE 8 |
|
|
/* Structure for the zebra client. */ |
/* Structure for the zebra client. */ |
struct zclient |
struct zclient |
{ |
{ |
|
/* The thread master we schedule ourselves on */ |
|
struct thread_master *master; |
|
|
/* Socket to zebra daemon. */ |
/* Socket to zebra daemon. */ |
int sock; |
int sock; |
|
|
Line 62 struct zclient
|
Line 71 struct zclient
|
|
|
/* Redistribute information. */ |
/* Redistribute information. */ |
u_char redist_default; |
u_char redist_default; |
u_char redist[ZEBRA_ROUTE_MAX]; | vrf_bitmap_t redist[ZEBRA_ROUTE_MAX]; |
|
|
/* Redistribute defauilt. */ |
/* Redistribute defauilt. */ |
u_char default_information; | vrf_bitmap_t default_information; |
|
|
/* Pointer to the callback functions. */ |
/* Pointer to the callback functions. */ |
int (*router_id_update) (int, struct zclient *, uint16_t); | void (*zebra_connected) (struct zclient *); |
int (*interface_add) (int, struct zclient *, uint16_t); | int (*router_id_update) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*interface_delete) (int, struct zclient *, uint16_t); | int (*interface_add) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*interface_up) (int, struct zclient *, uint16_t); | int (*interface_delete) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*interface_down) (int, struct zclient *, uint16_t); | int (*interface_up) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*interface_address_add) (int, struct zclient *, uint16_t); | int (*interface_down) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*interface_address_delete) (int, struct zclient *, uint16_t); | int (*interface_address_add) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*ipv4_route_add) (int, struct zclient *, uint16_t); | int (*interface_address_delete) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*ipv4_route_delete) (int, struct zclient *, uint16_t); | int (*ipv4_route_add) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*ipv6_route_add) (int, struct zclient *, uint16_t); | int (*ipv4_route_delete) (int, struct zclient *, uint16_t, vrf_id_t); |
int (*ipv6_route_delete) (int, struct zclient *, uint16_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. */ |
/* Zebra API message flag. */ |
Line 86 struct zclient
|
Line 96 struct zclient
|
#define ZAPI_MESSAGE_IFINDEX 0x02 |
#define ZAPI_MESSAGE_IFINDEX 0x02 |
#define ZAPI_MESSAGE_DISTANCE 0x04 |
#define ZAPI_MESSAGE_DISTANCE 0x04 |
#define ZAPI_MESSAGE_METRIC 0x08 |
#define ZAPI_MESSAGE_METRIC 0x08 |
|
#define ZAPI_MESSAGE_MTU 0x10 |
|
|
/* Zserv protocol message header */ |
/* Zserv protocol message header */ |
struct zserv_header |
struct zserv_header |
Line 95 struct zserv_header
|
Line 106 struct zserv_header
|
* always set to 255 in new zserv. |
* always set to 255 in new zserv. |
*/ |
*/ |
uint8_t version; |
uint8_t version; |
#define ZSERV_VERSION 1 | #define ZSERV_VERSION 3 |
| vrf_id_t vrf_id; |
uint16_t command; |
uint16_t command; |
}; |
}; |
|
|
Line 108 struct zapi_ipv4
|
Line 120 struct zapi_ipv4
|
|
|
u_char message; |
u_char message; |
|
|
|
safi_t safi; |
|
|
u_char nexthop_num; |
u_char nexthop_num; |
struct in_addr **nexthop; |
struct in_addr **nexthop; |
|
|
u_char ifindex_num; |
u_char ifindex_num; |
unsigned int *ifindex; | ifindex_t *ifindex; |
|
|
u_char distance; |
u_char distance; |
|
|
u_int32_t metric; |
u_int32_t metric; |
|
|
|
u_int32_t mtu; |
|
|
|
vrf_id_t vrf_id; |
}; |
}; |
|
|
/* Prototypes of zebra client service functions. */ |
/* Prototypes of zebra client service functions. */ |
extern struct zclient *zclient_new (void); | extern struct zclient *zclient_new (struct thread_master *); |
extern void zclient_init (struct zclient *, int); |
extern void zclient_init (struct zclient *, int); |
extern int zclient_start (struct zclient *); |
extern int zclient_start (struct zclient *); |
extern void zclient_stop (struct zclient *); |
extern void zclient_stop (struct zclient *); |
extern void zclient_reset (struct zclient *); |
extern void zclient_reset (struct zclient *); |
extern void zclient_free (struct zclient *); |
extern void zclient_free (struct zclient *); |
|
|
/* Get TCP socket connection to zebra daemon at loopback address. */ | extern int zclient_socket_connect (struct zclient *); |
extern int zclient_socket (void); | extern void zclient_serv_path_set (char *path); |
| extern const char *zclient_serv_path_get (void); |
|
|
/* Get unix stream socket connection to zebra daemon at given path. */ | extern void zclient_send_requests (struct zclient *, vrf_id_t); |
extern int zclient_socket_un (const char *); | |
|
|
/* Send redistribute command to zebra daemon. Do not update zclient state. */ |
/* 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. */ |
/* 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. */ |
/* 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). |
/* Send the message in zclient->obuf to the zebra daemon (or enqueue it). |
Returns 0 for success or -1 on an I/O error. */ |
Returns 0 for success or -1 on an I/O error. */ |
extern int zclient_send_message(struct zclient *); |
extern int zclient_send_message(struct zclient *); |
|
|
/* create header for command, length to be filled in by user later */ |
/* create header for command, length to be filled in by user later */ |
extern void zclient_create_header (struct stream *, uint16_t); | extern void zclient_create_header (struct stream *, uint16_t, vrf_id_t); |
| extern int zclient_read_header (struct stream *s, int sock, u_int16_t *size, |
| u_char *marker, u_char *version, |
| u_int16_t *vrf_id, u_int16_t *cmd); |
|
|
extern struct interface *zebra_interface_add_read (struct stream *); | extern struct interface *zebra_interface_add_read (struct stream *, |
extern struct interface *zebra_interface_state_read (struct stream *s); | vrf_id_t); |
extern struct connected *zebra_interface_address_read (int, struct stream *); | 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_interface_if_set_value (struct stream *, struct interface *); |
extern void zebra_router_id_update_read (struct stream *s, struct prefix *rid); |
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 *, |
extern int zapi_ipv4_route (u_char, struct zclient *, struct prefix_ipv4 *, |
Line 168 struct zapi_ipv6
|
Line 195 struct zapi_ipv6
|
|
|
u_char message; |
u_char message; |
|
|
|
safi_t safi; |
|
|
u_char nexthop_num; |
u_char nexthop_num; |
struct in6_addr **nexthop; |
struct in6_addr **nexthop; |
|
|
u_char ifindex_num; |
u_char ifindex_num; |
unsigned int *ifindex; | ifindex_t *ifindex; |
|
|
u_char distance; |
u_char distance; |
|
|
u_int32_t metric; |
u_int32_t metric; |
|
|
|
u_int32_t mtu; |
|
|
|
vrf_id_t vrf_id; |
}; |
}; |
|
|
extern int zapi_ipv6_route (u_char cmd, struct zclient *zclient, |
extern int zapi_ipv6_route (u_char cmd, struct zclient *zclient, |