]> git.proxmox.com Git - mirror_frr.git/blobdiff - ripd/rip_zebra.c
ripd: embed BFD YANG models
[mirror_frr.git] / ripd / rip_zebra.c
index 4a58d1225e99e6439513ad7b2c757ae8fcdc40fc..5bf51c2f15284bc171fcc044cf371a2704a0fce9 100644 (file)
@@ -13,6 +13,7 @@
 #include "zclient.h"
 #include "log.h"
 #include "vrf.h"
+#include "bfd.h"
 #include "ripd/ripd.h"
 #include "ripd/rip_debug.h"
 #include "ripd/rip_interface.h"
@@ -29,7 +30,7 @@ static void rip_zebra_ipv4_send(struct rip *rip, struct route_node *rp,
        struct zapi_nexthop *api_nh;
        struct listnode *listnode = NULL;
        struct rip_info *rinfo = NULL;
-       int count = 0;
+       uint32_t count = 0;
 
        memset(&api, 0, sizeof(api));
        api.vrf_id = rip->vrf->vrf_id;
@@ -38,7 +39,7 @@ static void rip_zebra_ipv4_send(struct rip *rip, struct route_node *rp,
 
        SET_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP);
        for (ALL_LIST_ELEMENTS_RO(list, listnode, rinfo)) {
-               if (count >= MULTIPATH_NUM)
+               if (count >= zebra_ecmp_count)
                        break;
                api_nh = &api.nexthops[count];
                api_nh->vrf_id = rip->vrf->vrf_id;
@@ -196,6 +197,7 @@ void rip_zebra_vrf_register(struct vrf *vrf)
                           vrf->name, vrf->vrf_id);
 
        zclient_send_reg_requests(zclient, vrf->vrf_id);
+       bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER, vrf->vrf_id);
 }
 
 void rip_zebra_vrf_deregister(struct vrf *vrf)
@@ -208,11 +210,13 @@ void rip_zebra_vrf_deregister(struct vrf *vrf)
                           vrf->name, vrf->vrf_id);
 
        zclient_send_dereg_requests(zclient, vrf->vrf_id);
+       bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_DEREGISTER, vrf->vrf_id);
 }
 
 static void rip_zebra_connected(struct zclient *zclient)
 {
        zclient_send_reg_requests(zclient, VRF_DEFAULT);
+       bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER, VRF_DEFAULT);
 }
 
 zclient_handler *const rip_handlers[] = {
@@ -223,13 +227,19 @@ zclient_handler *const rip_handlers[] = {
        [ZEBRA_REDISTRIBUTE_ROUTE_DEL] = rip_zebra_read_route,
 };
 
-void rip_zclient_init(struct thread_master *master)
+static void rip_zebra_capabilities(struct zclient_capabilities *cap)
+{
+       zebra_ecmp_count = MIN(cap->ecmp, zebra_ecmp_count);
+}
+
+void rip_zclient_init(struct event_loop *master)
 {
        /* Set default value to the zebra client structure. */
        zclient = zclient_new(master, &zclient_options_default, rip_handlers,
                              array_size(rip_handlers));
        zclient_init(zclient, ZEBRA_ROUTE_RIP, 0, &ripd_privs);
        zclient->zebra_connected = rip_zebra_connected;
+       zclient->zebra_capabilities = rip_zebra_capabilities;
 }
 
 void rip_zclient_stop(void)