ZAPI server-side (forcusing ZEBRA_ROUTE_ADD )
$ cat lib/zclient.h | grep " Zebra message types" -A 15
/* Zebra message types. * /
typedef enum {
ZEBRA_INTERFACE_ADD,
ZEBRA_INTERFACE_DELETE,
ZEBRA_INTERFACE_ADDRESS_ADD,
ZEBRA_INTERFACE_ADDRESS_DELETE,
ZEBRA_INTERFACE_UP,
ZEBRA_INTERFACE_DOWN,
ZEBRA_INTERFACE_SET_MASTER,
ZEBRA_INTERFACE_SET_PROTODOWN,
ZEBRA_ROUTE_ADD,
ZEBRA_ROUTE_DELETE,
ZEBRA_ROUTE_NOTIFY_OWNER,
ZEBRA_REDISTRIBUTE_ADD,
ZEBRA_REDISTRIBUTE_DELETE,
ZEBRA_REDISTRIBUTE_DEFAULT_ADD,
$ cat zebra/zapi_msg.c | grep " void (\*zserv_handlers" -A 10
void (* zserv_handlers[])(ZAPI_HANDLER_ARGS) = {
[ZEBRA_ROUTER_ID_ADD] = zread_router_id_add,
[ZEBRA_ROUTER_ID_DELETE] = zread_router_id_delete,
[ZEBRA_INTERFACE_ADD] = zread_interface_add,
[ZEBRA_INTERFACE_DELETE] = zread_interface_delete,
[ZEBRA_INTERFACE_SET_PROTODOWN] = zread_interface_set_protodown,
[ZEBRA_ROUTE_ADD] = zread_route_add,
[ZEBRA_ROUTE_DELETE] = zread_route_del,
[ZEBRA_REDISTRIBUTE_ADD] = zebra_redistribute_add,
[ZEBRA_REDISTRIBUTE_DELETE] = zebra_redistribute_delete,
[ZEBRA_REDISTRIBUTE_DEFAULT_ADD] = zebra_redistribute_default_add,
$ cat zebra/zapi_msg.c | grep " static void zread_route_add" -A 10
static void zread_route_add(ZAPI_HANDLER_ARGS)
{
struct stream * s;
struct zapi_route api;
struct zapi_nexthop * api_nh;
afi_t afi;
struct prefix_ipv6 * src_p = NULL;
struct route_entry * re;
struct nexthop * nexthop = NULL;
int i, ret;
vrf_id_t vrf_id = 0;
...
}
$ cat zebra/zserv.h | grep ZAPI_HANDLER_ARGS -A2
# define ZAPI_HANDLER_ARGS \
struct zserv * client, struct zmsghdr * hdr, \
struct stream * msg, struct zebra_vrf * zvrf
$ cat lib/zclient.h | grep " struct zmsghdr {" -A7
struct zmsghdr {
uint16_t length;
/* Always set to 255 in new zserv * /
uint8_t marker;
uint8_t version;
vrf_id_t vrf_id;
uint16_t command ;
};
ZAPI client-side (forcusing ZEBRA_ROUTE_ADD )
$ cat static_zebra.c | grep " extern void static_zebra_route_add(" -A10000 | less
extern void static_zebra_route_add(struct route_node * rn,
struct static_route * si_changed,
vrf_id_t vrf_id, safi_t safi, bool install)
{
struct static_route * si = rn-> info;
const struct prefix * p, * src_pp;
struct static_route * si = rn-> info;
const struct prefix * p, * src_pp;
struct zapi_nexthop * api_nh;
struct zapi_route api;
uint32_t nh_num = 0;
...(snip)...
zclient_route_send(install ?
ZEBRA_ROUTE_ADD : ZEBRA_ROUTE_DELETE,
zclient, & api);
}
$ cat lib/zclient.c | grep zclient_route_send -A6
int zclient_route_send(uint8_t cmd, struct zclient * zclient,
struct zapi_route * api)
{
if (zapi_route_encode(cmd, zclient-> obuf, api) < 0)
return -1;
return zclient_send_message(zclient);
}
./configure \
--prefix=/usr --includedir=\$ {prefix}/include \
--enable-exampledir=\$ {prefix}/share/doc/frr/examples \
--bindir=\$ {prefix}/bin --sbindir=\$ {prefix}/lib/frr \
--libdir=\$ {prefix}/lib/frr --libexecdir=\$ {prefix}/lib/frr \
--localstatedir=/var/run/frr --sysconfdir=/etc/frr \
--with-moduledir=\$ {prefix}/lib/frr/modules \
--with-libyang-pluginsdir=\$ {prefix}/lib/frr/libyang_plugins \
--enable-configfile-mask=0640 --enable-logfile-mask=0640 \
--enable-snmp=agentx --enable-multipath=64 --enable-user=frr \
--enable-group=frr --enable-vty-group=frrvty --with-pkg-git-version \
--disable-ripd --disable-ripngd --disable-ospfd --disable-ospf6d \
--disable-ldpd --disable-nhrpd --disable-eigrpd --disable-babeld \
--disable-isisd --disable-pimd --disable-pbrd --disable-fabricd \
--disable-vrrpd
bgpd=no
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no
pimd=no
ldpd=no
nhrpd=no
eigrpd=no
babeld=no
sharpd=no
pbrd=no
bfdd=no
fabricd=no
vrrpd=no
vtysh_enable=yes
zebra_options=" -A 127.0.0.1 -s 90000000"
bgpd_options=" -A 127.0.0.1"
ospfd_options=" -A 127.0.0.1"
ospf6d_options=" -A ::1"
ripd_options=" -A 127.0.0.1"
ripngd_options=" -A ::1"
isisd_options=" -A 127.0.0.1"
pimd_options=" -A 127.0.0.1"
ldpd_options=" -A 127.0.0.1"
nhrpd_options=" -A 127.0.0.1"
eigrpd_options=" -A 127.0.0.1"
babeld_options=" -A 127.0.0.1"
sharpd_options=" -A 127.0.0.1"
pbrd_options=" -A 127.0.0.1"
staticd_options="-A 127.0.0.1"
bfdd_options=" -A 127.0.0.1"
fabricd_options="-A 127.0.0.1"
vrrpd_options=" -A 127.0.0.1"