]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Allow failed hostname lookup to continue in bmp 5399/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 21 Nov 2019 00:13:09 +0000 (19:13 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 4 Dec 2019 19:17:05 +0000 (14:17 -0500)
Add a bit of code to allow hostname lookup failure to
not stall bmp communication.

Fixes: #5382
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
bgpd/bgp_bmp.c

index 9f1fe648135c24c984df3b15ab48902aba2d489f..b8862c60498f54832df87972822f471ec770d6bd 100644 (file)
@@ -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);
 }