summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Guibert <philippe.guibert@6wind.com>2019-03-26 12:13:38 +0100
committerPhilippe Guibert <philippe.guibert@6wind.com>2019-05-07 15:53:07 +0200
commit54aadda13d7d2ff7edaae4128f0bf027abb3a711 (patch)
tree4ab98e9691b482fb5c70cc6085f65771d27db8bb
parent45b000d085c6f8cc40a48c13154d83aada99df67 (diff)
bfdd: register to interfaces from other vrfs
registration for new interfaces is done. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
-rw-r--r--bfdd/bfd.c7
-rw-r--r--bfdd/bfd.h2
-rw-r--r--bfdd/ptm_adapter.c14
3 files changed, 23 insertions, 0 deletions
diff --git a/bfdd/bfd.c b/bfdd/bfd.c
index 308de24174..8acf779660 100644
--- a/bfdd/bfd.c
+++ b/bfdd/bfd.c
@@ -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);
diff --git a/bfdd/bfd.h b/bfdd/bfd.h
index d194851d7a..c94b9a6371 100644
--- a/bfdd/bfd.h
+++ b/bfdd/bfd.h
@@ -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);
diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c
index 606faa7cdf..a98d19aa2f 100644
--- a/bfdd/ptm_adapter.c
+++ b/bfdd/ptm_adapter.c
@@ -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);