From 769263ad422e3c1069de0994ff2274044982b242 Mon Sep 17 00:00:00 2001 From: Mohit Agrawal Date: Sun, 1 Sep 2019 12:01:09 +0530 Subject: [PATCH 292/297] rpc: Update address family if it is not provide in cmd-line arguments Problem: After enabling transport-type to inet6 and passed ipv6 transport.socket.bind-address in glusterd.vol clients are not started. Solution: Need to update address-family based on remote-address for all gluster client process > Change-Id: Iaa3588cd87cebc45231bfd675745c1a457dc9b31 > Fixes: bz#1747746 > Credits: Amgad Saleh > Signed-off-by: Mohit Agrawal > (Cherry picked from commit 80b8cfe3f1386606bada97a76a0cad7acdf6b877) > (Reviewed on upstream link https://review.gluster.org/#/c/glusterfs/+/23340/) Change-Id: Iaa3588cd87cebc45231bfd675745c1a457dc9b31 BUG: 1750241 Signed-off-by: Mohit Agrawal Reviewed-on: https://code.engineering.redhat.com/gerrit/181184 Tested-by: Mohit Agrawal Tested-by: RHGS Build Bot Reviewed-by: Sunil Kumar Heggodu Gopala Acharya --- rpc/rpc-transport/socket/src/name.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rpc/rpc-transport/socket/src/name.c b/rpc/rpc-transport/socket/src/name.c index 7f18cc4..b473f3b 100644 --- a/rpc/rpc-transport/socket/src/name.c +++ b/rpc/rpc-transport/socket/src/name.c @@ -214,6 +214,7 @@ af_inet_client_get_remote_sockaddr(rpc_transport_t *this, uint16_t remote_port = 0; struct addrinfo *addr_info = NULL; int32_t ret = 0; + struct in6_addr serveraddr; remote_host_data = dict_get(options, "remote-host"); if (remote_host_data == NULL) { @@ -249,6 +250,13 @@ af_inet_client_get_remote_sockaddr(rpc_transport_t *this, goto err; } + /* Need to update transport-address family if address-family is not provide + to command-line arguments + */ + if (inet_pton(AF_INET6, remote_host, &serveraddr)) { + sockaddr->sa_family = AF_INET6; + } + /* TODO: gf_resolve is a blocking call. kick in some non blocking dns techniques */ ret = gf_resolve_ip6(remote_host, remote_port, sockaddr->sa_family, @@ -522,7 +530,10 @@ socket_client_get_remote_sockaddr(rpc_transport_t *this, ret = -1; } - if (*sa_family == AF_UNSPEC) { + /* Address-family is updated based on remote_host in + af_inet_client_get_remote_sockaddr + */ + if (*sa_family != sockaddr->sa_family) { *sa_family = sockaddr->sa_family; } -- 1.8.3.1