From: Philippe Guibert Date: Wed, 19 Jun 2019 15:48:32 +0000 (+0200) Subject: bfdd: update vrf name of bfd session if necessary X-Git-Tag: base_7.3~353^2~5 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=f06e248c539d45a5a59e6839ffe12e5d3d9fba12;p=matthieu%2Ffrr.git bfdd: update vrf name of bfd session if necessary if the bfd session is already enabled, then dynamically change the vrf name if the vrf where bfd is executed changed its name. Signed-off-by: Philippe Guibert --- diff --git a/bfdd/bfd.c b/bfdd/bfd.c index a48dbb0ae2..0b157ddafc 100644 --- a/bfdd/bfd.c +++ b/bfdd/bfd.c @@ -1749,3 +1749,14 @@ struct bfd_vrf_global *bfd_vrf_look_by_session(struct bfd_session *bfd) return NULL; return bfd->vrf->info; } + +void bfd_session_update_vrf_name(struct bfd_session *bs, struct vrf *vrf) +{ + if (!vrf || !bs) + return; + /* update key */ + hash_release(bfd_key_hash, bs); + memset(bs->key.vrfname, 0, sizeof(bs->key.vrfname)); + strlcpy(bs->key.vrfname, vrf->name, sizeof(bs->key.vrfname)); + hash_get(bfd_key_hash, bs, hash_alloc_intern); +} diff --git a/bfdd/bfd.h b/bfdd/bfd.h index 10aeb3e52c..cdec78d122 100644 --- a/bfdd/bfd.h +++ b/bfdd/bfd.h @@ -630,6 +630,7 @@ void bfdd_zclient_unregister(vrf_id_t vrf_id); void bfdd_zclient_register(vrf_id_t vrf_id); void bfdd_sessions_enable_vrf(struct vrf *vrf); void bfdd_sessions_disable_vrf(struct vrf *vrf); +void bfd_session_update_vrf_name(struct bfd_session *bs, struct vrf *vrf); int ptm_bfd_notify(struct bfd_session *bs); diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c index 553033abfb..ae6d04e77d 100644 --- a/bfdd/ptm_adapter.c +++ b/bfdd/ptm_adapter.c @@ -630,6 +630,11 @@ void bfdd_sessions_enable_vrf(struct vrf *vrf) /* it may affect configs without interfaces */ TAILQ_FOREACH(bso, &bglobal.bg_obslist, bso_entry) { bs = bso->bso_bs; + /* update name */ + if (bs->vrf && bs->vrf == vrf) { + if (!strmatch(bs->key.vrfname, vrf->name)) + bfd_session_update_vrf_name(bs, vrf); + } if (bs->vrf) continue; if (bs->key.vrfname[0] &&