]> git.proxmox.com Git - mirror_frr.git/commitdiff
bfdd: register to interfaces from other vrfs
authorPhilippe Guibert <philippe.guibert@6wind.com>
Tue, 26 Mar 2019 11:13:38 +0000 (12:13 +0100)
committerPhilippe Guibert <philippe.guibert@6wind.com>
Tue, 7 May 2019 13:53:07 +0000 (15:53 +0200)
registration for new interfaces is done.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
bfdd/bfd.c
bfdd/bfd.h
bfdd/ptm_adapter.c

index 308de241748aa54431e3e078349e25b72aff9852..8acf7796604527458c1266876dbd4a6fe7124d4d 100644 (file)
@@ -1502,6 +1502,9 @@ static int bfd_vrf_enable(struct vrf *vrf)
        if (!bvrf->bg_ev[5])
                thread_add_read(master, bfd_recv_cb, bvrf, bvrf->bg_echov6,
                                &bvrf->bg_ev[5]);
+
+       if (vrf->vrf_id != VRF_DEFAULT)
+               bfdd_zclient_register(vrf->vrf_id);
        return 0;
 }
 
@@ -1512,6 +1515,10 @@ static int bfd_vrf_disable(struct vrf *vrf)
        if (!vrf->info)
                return 0;
        bvrf = vrf->info;
+
+       if (vrf->vrf_id != VRF_DEFAULT)
+               bfdd_zclient_unregister(vrf->vrf_id);
+
        log_debug("VRF disable %s id %d", vrf->name, vrf->vrf_id);
        /* Close all descriptors. */
        socket_close(&bvrf->bg_echo);
index d194851d7ab335f21ee86d8a9a9b57c7203454bc..c94b9a637188893a73bf61e9994ac9f004441dad 100644 (file)
@@ -586,6 +586,8 @@ void bfdd_vty_init(void);
  */
 void bfdd_zclient_init(struct zebra_privs_t *bfdd_priv);
 void bfdd_zclient_stop(void);
+void bfdd_zclient_unregister(vrf_id_t vrf_id);
+void bfdd_zclient_register(vrf_id_t vrf_id);
 
 int ptm_bfd_notify(struct bfd_session *bs);
 
index 606faa7cdf4f832e68d73757a4c106699cd72f85..a98d19aa2f595c2a067c7c6dfbf2ca8699f09270 100644 (file)
@@ -716,6 +716,20 @@ void bfdd_zclient_init(struct zebra_privs_t *bfdd_priv)
        zclient->interface_address_delete = bfdd_interface_address_update;
 }
 
+void bfdd_zclient_register(vrf_id_t vrf_id)
+{
+       if (!zclient || zclient->sock < 0)
+               return;
+       zclient_send_reg_requests(zclient, vrf_id);
+}
+
+void bfdd_zclient_unregister(vrf_id_t vrf_id)
+{
+       if (!zclient || zclient->sock < 0)
+               return;
+       zclient_send_dereg_requests(zclient, vrf_id);
+}
+
 void bfdd_zclient_stop(void)
 {
        zclient_stop(zclient);