Re: [PATCH] rpc: 'getaddrinfo' function support both IPv4 and IPv6

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The commit summary is too generic.
How about:
rpc: getaddrinfo: also accept IPv4-mapped IPv6 addresses

On a Monday in 2020, Zhimin Feng wrote:
If only IPv6 is configured and nscd is started, getaddrinfo

Is ncsd required to reproduce this?

Looking at glibc source:
libvirt passes AI_ADDRCONFIG and if getifaddrs returs only one family,
it is placed into req->ai_family and the code below is hit.

function reture value is -9. So hints.ai_flags should include
the AI_V4MAPPED flag.

The following is the partial implementation of getaddrinfo(glibc):

   if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET)
       at->family = AF_INET;
   else if (req->ai_family == AF_INET6 && (req->ai_flags & AI_V4MAPPED))
   {
       at->addr[3] = at->addr[0];
	at->addr[2] = htonl (0xffff);
	at->addr[1] = 0;
	at->addr[0] = 0;
	at->family = AF_INET6;
   }
   else
   {
        result = -EAI_ADDRFAMILY;
        goto free_and_return;
   }

However small, I'd rather not include GPL code in our commit messages.
Proposed commit message:

If only IPv6 is configured on the host, getaddrinfo with AI_ADDRCONFIG
in hints would return EAI_ADDRFAMILY for nodenames that resolve to IPv4.

Also pass AI_V4MAPPED to accept IPv4-mapped addresses on IPv6-only
systems.


Signed-off-by: Zhimin Feng <fengzhimin1@xxxxxxxxxx>
---
src/rpc/virnetsocket.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
index a217404fa6..c547acefc0 100644
--- a/src/rpc/virnetsocket.c
+++ b/src/rpc/virnetsocket.c
@@ -575,7 +575,7 @@ int virNetSocketNewConnectTCP(const char *nodename,

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = family;
-    hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
+    hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG | AI_V4MAPPED;
    hints.ai_socktype = SOCK_STREAM;

    int e = getaddrinfo(nodename, service, &hints, &ai);

Reviewed-by: Ján Tomko <jtomko@xxxxxxxxxx>

Jano

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux