From a3d04c32b897a6b288af794bfd4a672e2105ba4a Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 20 Nov 2019 19:13:09 -0500 Subject: [PATCH] bgpd: Allow failed hostname lookup to continue in bmp Add a bit of code to allow hostname lookup failure to not stall bmp communication. Fixes: #5382 Signed-off-by: Donald Sharp --- bgpd/bgp_bmp.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/bgpd/bgp_bmp.c b/bgpd/bgp_bmp.c index 9f1fe64813..b8862c6049 100644 --- a/bgpd/bgp_bmp.c +++ b/bgpd/bgp_bmp.c @@ -1669,18 +1669,26 @@ static void bmp_active_resolved(struct resolver_query *resq, int numaddrs, unsigned i; if (numaddrs <= 0) { - zlog_warn("bmp[%s]: hostname resolution failed", ba->hostname); - ba->curretry += ba->curretry / 2; - bmp_active_setup(ba); - return; - } - if (numaddrs > (int)array_size(ba->addrs)) - numaddrs = array_size(ba->addrs); + int ret; + + ba->addrpos = 0; + ba->addrtotal = 1; + ret = str2sockunion(ba->hostname, &ba->addrs[0]); + if (ret < 0) { + ba->addrtotal = 0; + ba->curretry += ba->curretry / 2; + bmp_active_setup(ba); + return; + } + } else { + if (numaddrs > (int)array_size(ba->addrs)) + numaddrs = array_size(ba->addrs); - ba->addrpos = 0; - ba->addrtotal = numaddrs; - for (i = 0; i < ba->addrtotal; i++) - memcpy(&ba->addrs[i], &addr[i], sizeof(ba->addrs[0])); + ba->addrpos = 0; + ba->addrtotal = numaddrs; + for (i = 0; i < ba->addrtotal; i++) + memcpy(&ba->addrs[i], &addr[i], sizeof(ba->addrs[0])); + } bmp_active_connect(ba); } -- 2.39.5