On Wed, Mar 28, Olaf Hering wrote: > > How can libvirt tell whether this is a misconfiguration of DNS or host's > > interfaces? > By simply cycling through the 'runp' list to see if any bind() succeeds? This change fixes /etc/sysconfig/network/ifcfg-br0:BOOTPROTO='dhcp4' for me. Just keep going in virNetSocketNewListenTCP: Apr 11 22:18:02 macintyre-old libvirtd[8017]: 2018-04-11 20:18:02.553+0000: 8021: error : virNetSocketNewListenTCP:323 : virNetSocketNewListenTCP: macintyre-old.arch.suse.de 49152 0: Success Apr 11 22:18:02 macintyre-old libvirtd[8017]: 2018-04-11 20:18:02.555+0000: 8021: error : virNetSocketNewListenTCP:394 : virNetSocketNewListenTCP: bind to '10.161.8.197': Ok: Success Apr 11 22:18:02 macintyre-old libvirtd[8017]: 2018-04-11 20:18:02.555+0000: 8021: error : virNetSocketNewListenTCP:394 : virNetSocketNewListenTCP: bind to '2620:113:80c0:8000:10:161:8:197': Ok: Cannot assign requested address You get the idea. Olaf --- src/rpc/virnetsocket.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -320,6 +320,7 @@ int virNetSocketNewListenTCP(const char *nodename, *retsocks = NULL; *nretsocks = 0; + virReportSystemError(errno, "%s: %s %s %d", __func__, nodename, service, family); memset(&hints, 0, sizeof(hints)); hints.ai_family = family; hints.ai_flags = AI_PASSIVE; @@ -383,12 +384,17 @@ int virNetSocketNewListenTCP(const char *nodename, } } #endif - - if (bind(fd, runp->ai_addr, runp->ai_addrlen) < 0) { - if (errno != EADDRINUSE) { - virReportSystemError(errno, "%s", _("Unable to bind to port")); - goto error; - } + e = bind(fd, runp->ai_addr, runp->ai_addrlen); + { + char hostname[123]; + int r, oe = errno; + memset(hostname, 0, sizeof(hostname)); + r = getnameinfo(runp->ai_addr,runp->ai_addrlen,hostname, sizeof(hostname), NULL, 0, NI_NUMERICHOST); + errno = oe; + virReportSystemError(errno, "%s: bind to '%s': %s", __func__, hostname, r ? gai_strerror(r) : "Ok"); + } + if (e < 0) { + if (errno == EADDRINUSE) addrInUse = true; VIR_FORCE_CLOSE(fd); runp = runp->ai_next; @@ -412,14 +418,14 @@ int virNetSocketNewListenTCP(const char *nodename, fd = -1; } - if (nsocks == 0 && familyNotSupported) { - virReportSystemError(EAFNOSUPPORT, "%s", _("Unable to bind to port")); - goto error; - } - - if (nsocks == 0 && - addrInUse) { - virReportSystemError(EADDRINUSE, "%s", _("Unable to bind to port")); + if (nsocks == 0) { + if (familyNotSupported) + errno = EAFNOSUPPORT; + else if(addrInUse) + errno = EADDRINUSE; + else + errno = EDESTADDRREQ; + virReportSystemError(errno, "%s", _("Unable to bind to port")); goto error; }
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list