From: Rafael Zalamena Date: Tue, 18 Aug 2020 15:36:56 +0000 (-0300) Subject: bfdd: disable sockets when using distributed BFD X-Git-Tag: base_7.6~169^2~6 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=29397ec1abb6068b5cb847a7d7a18b0c5a699b59;p=matthieu%2Ffrr.git bfdd: disable sockets when using distributed BFD The current distributed BFD implementantion doesn't support falling back to software implementation in FRR, so to keep the code simple lets give the data plane full control of the BFD packet handling (helps running a software data plane for testing too otherwise it would fail with 'address in use' error). Signed-off-by: Rafael Zalamena --- diff --git a/bfdd/bfd.c b/bfdd/bfd.c index c77b5cd1a2..4b46a0e1d5 100644 --- a/bfdd/bfd.c +++ b/bfdd/bfd.c @@ -2028,6 +2028,16 @@ static int bfd_vrf_enable(struct vrf *vrf) bvrf = XCALLOC(MTYPE_BFDD_VRF, sizeof(struct bfd_vrf_global)); bvrf->vrf = vrf; vrf->info = (void *)bvrf; + + /* Disable sockets if using data plane. */ + if (bglobal.bg_use_dplane) { + bvrf->bg_shop = -1; + bvrf->bg_mhop = -1; + bvrf->bg_shop6 = -1; + bvrf->bg_mhop6 = -1; + bvrf->bg_echo = -1; + bvrf->bg_echov6 = -1; + } } else bvrf = vrf->info; @@ -2049,25 +2059,24 @@ static int bfd_vrf_enable(struct vrf *vrf) if (!bvrf->bg_echov6) bvrf->bg_echov6 = bp_echov6_socket(vrf); - /* Add descriptors to the event loop. */ - if (!bvrf->bg_ev[0]) - thread_add_read(master, bfd_recv_cb, bvrf, bvrf->bg_shop, - &bvrf->bg_ev[0]); - if (!bvrf->bg_ev[1]) - thread_add_read(master, bfd_recv_cb, bvrf, bvrf->bg_mhop, - &bvrf->bg_ev[1]); + if (!bvrf->bg_ev[0] && bvrf->bg_shop != -1) + thread_add_read(master, bfd_recv_cb, bvrf, + bvrf->bg_shop, &bvrf->bg_ev[0]); + if (!bvrf->bg_ev[1] && bvrf->bg_mhop != -1) + thread_add_read(master, bfd_recv_cb, bvrf, + bvrf->bg_mhop, &bvrf->bg_ev[1]); if (!bvrf->bg_ev[2] && bvrf->bg_shop6 != -1) - thread_add_read(master, bfd_recv_cb, bvrf, bvrf->bg_shop6, - &bvrf->bg_ev[2]); + thread_add_read(master, bfd_recv_cb, bvrf, + bvrf->bg_shop6, &bvrf->bg_ev[2]); if (!bvrf->bg_ev[3] && bvrf->bg_mhop6 != -1) - thread_add_read(master, bfd_recv_cb, bvrf, bvrf->bg_mhop6, - &bvrf->bg_ev[3]); - if (!bvrf->bg_ev[4]) - thread_add_read(master, bfd_recv_cb, bvrf, bvrf->bg_echo, - &bvrf->bg_ev[4]); + thread_add_read(master, bfd_recv_cb, bvrf, + bvrf->bg_mhop6, &bvrf->bg_ev[3]); + if (!bvrf->bg_ev[4] && bvrf->bg_echo != -1) + thread_add_read(master, bfd_recv_cb, bvrf, + bvrf->bg_echo, &bvrf->bg_ev[4]); if (!bvrf->bg_ev[5] && bvrf->bg_echov6 != -1) - thread_add_read(master, bfd_recv_cb, bvrf, bvrf->bg_echov6, - &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);