From: Philippe Guibert Date: Tue, 26 Mar 2019 11:13:38 +0000 (+0100) Subject: bfdd: register to interfaces from other vrfs X-Git-Tag: base_7.2~355^2~12 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=54aadda13d7d2ff7edaae4128f0bf027abb3a711;p=mirror%2Ffrr.git bfdd: register to interfaces from other vrfs registration for new interfaces is done. Signed-off-by: Philippe Guibert --- 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);