From 29397ec1abb6068b5cb847a7d7a18b0c5a699b59 Mon Sep 17 00:00:00 2001 From: Rafael Zalamena Date: Tue, 18 Aug 2020 12:36:56 -0300 Subject: [PATCH] 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 --- bfdd/bfd.c | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) 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); -- 2.39.5