diff options
| author | Philippe Guibert <philippe.guibert@6wind.com> | 2019-03-26 12:13:38 +0100 |
|---|---|---|
| committer | Philippe Guibert <philippe.guibert@6wind.com> | 2019-05-07 15:53:07 +0200 |
| commit | 54aadda13d7d2ff7edaae4128f0bf027abb3a711 (patch) | |
| tree | 4ab98e9691b482fb5c70cc6085f65771d27db8bb | |
| parent | 45b000d085c6f8cc40a48c13154d83aada99df67 (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.c | 7 | ||||
| -rw-r--r-- | bfdd/bfd.h | 2 | ||||
| -rw-r--r-- | bfdd/ptm_adapter.c | 14 |
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); |
