glusterd/common-utils: move hostname helper functions to common-utils
Change-Id: If47e209cb61ea0eb74ee2d6ef9e9342b2d6ee13a BUG: 980838 Signed-off-by: Krishnan Parthasarathi <kparthas@redhat.com> Reviewed-on: http://review.gluster.org/5261 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
This commit is contained in:
parent
b3cc221844
commit
78ee0265db
@ -45,6 +45,7 @@
|
||||
#include "globals.h"
|
||||
#include "lkowner.h"
|
||||
#include "syscall.h"
|
||||
#include <ifaddrs.h>
|
||||
|
||||
#ifndef AI_ADDRCONFIG
|
||||
#define AI_ADDRCONFIG 0
|
||||
@ -2565,3 +2566,234 @@ gf_get_hostname_from_ip (char *client_ip, char **hostname)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
gf_boolean_t
|
||||
gf_interface_search (char *ip)
|
||||
{
|
||||
int32_t ret = -1;
|
||||
gf_boolean_t found = _gf_false;
|
||||
struct ifaddrs *ifaddr, *ifa;
|
||||
int family;
|
||||
char host[NI_MAXHOST];
|
||||
xlator_t *this = NULL;
|
||||
char *pct = NULL;
|
||||
|
||||
this = THIS;
|
||||
|
||||
ret = getifaddrs (&ifaddr);
|
||||
|
||||
if (ret != 0) {
|
||||
gf_log (this->name, GF_LOG_ERROR, "getifaddrs() failed: %s\n",
|
||||
gai_strerror(ret));
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
|
||||
if (!ifa->ifa_addr) {
|
||||
/*
|
||||
* This seemingly happens if an interface hasn't
|
||||
* been bound to a particular protocol (seen with
|
||||
* TUN devices).
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
family = ifa->ifa_addr->sa_family;
|
||||
|
||||
if (family != AF_INET && family != AF_INET6)
|
||||
continue;
|
||||
|
||||
ret = getnameinfo (ifa->ifa_addr,
|
||||
(family == AF_INET) ? sizeof(struct sockaddr_in) :
|
||||
sizeof(struct sockaddr_in6),
|
||||
host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
|
||||
|
||||
if (ret != 0) {
|
||||
gf_log (this->name, GF_LOG_ERROR,
|
||||
"getnameinfo() failed: %s\n",
|
||||
gai_strerror(ret));
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sometimes the address comes back as addr%eth0 or
|
||||
* similar. Since % is an invalid character, we can
|
||||
* strip it out with confidence that doing so won't
|
||||
* harm anything.
|
||||
*/
|
||||
pct = index(host,'%');
|
||||
if (pct) {
|
||||
*pct = '\0';
|
||||
}
|
||||
|
||||
if (strncmp (ip, host, NI_MAXHOST) == 0) {
|
||||
gf_log (this->name, GF_LOG_DEBUG,
|
||||
"%s is local address at interface %s",
|
||||
ip, ifa->ifa_name);
|
||||
found = _gf_true;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
out:
|
||||
if(ifaddr)
|
||||
freeifaddrs (ifaddr);
|
||||
return found;
|
||||
}
|
||||
|
||||
char *
|
||||
get_ip_from_addrinfo (struct addrinfo *addr, char **ip)
|
||||
{
|
||||
char buf[64];
|
||||
void *in_addr = NULL;
|
||||
struct sockaddr_in *s4 = NULL;
|
||||
struct sockaddr_in6 *s6 = NULL;
|
||||
|
||||
switch (addr->ai_family)
|
||||
{
|
||||
case AF_INET:
|
||||
s4 = (struct sockaddr_in *)addr->ai_addr;
|
||||
in_addr = &s4->sin_addr;
|
||||
break;
|
||||
|
||||
case AF_INET6:
|
||||
s6 = (struct sockaddr_in6 *)addr->ai_addr;
|
||||
in_addr = &s6->sin6_addr;
|
||||
break;
|
||||
|
||||
default:
|
||||
gf_log ("glusterd", GF_LOG_ERROR, "Invalid family");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!inet_ntop(addr->ai_family, in_addr, buf, sizeof(buf))) {
|
||||
gf_log ("glusterd", GF_LOG_ERROR, "String conversion failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*ip = strdup (buf);
|
||||
return *ip;
|
||||
}
|
||||
|
||||
gf_boolean_t
|
||||
gf_is_loopback_localhost (const struct sockaddr *sa, char *hostname)
|
||||
{
|
||||
GF_ASSERT (sa);
|
||||
|
||||
gf_boolean_t is_local = _gf_false;
|
||||
const struct in_addr *addr4 = NULL;
|
||||
const struct in6_addr *addr6 = NULL;
|
||||
uint8_t *ap = NULL;
|
||||
struct in6_addr loopbackaddr6 = IN6ADDR_LOOPBACK_INIT;
|
||||
|
||||
switch (sa->sa_family) {
|
||||
case AF_INET:
|
||||
addr4 = &(((struct sockaddr_in *)sa)->sin_addr);
|
||||
ap = (uint8_t*)&addr4->s_addr;
|
||||
if (ap[0] == 127)
|
||||
is_local = _gf_true;
|
||||
break;
|
||||
|
||||
case AF_INET6:
|
||||
addr6 = &(((struct sockaddr_in6 *)sa)->sin6_addr);
|
||||
if (memcmp (addr6, &loopbackaddr6,
|
||||
sizeof (loopbackaddr6)) == 0)
|
||||
is_local = _gf_true;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (hostname)
|
||||
gf_log ("glusterd", GF_LOG_ERROR,
|
||||
"unknown address family %d for %s",
|
||||
sa->sa_family, hostname);
|
||||
break;
|
||||
}
|
||||
|
||||
return is_local;
|
||||
}
|
||||
|
||||
gf_boolean_t
|
||||
gf_is_local_addr (char *hostname)
|
||||
{
|
||||
int32_t ret = -1;
|
||||
struct addrinfo *result = NULL;
|
||||
struct addrinfo *res = NULL;
|
||||
gf_boolean_t found = _gf_false;
|
||||
char *ip = NULL;
|
||||
xlator_t *this = NULL;
|
||||
|
||||
this = THIS;
|
||||
ret = getaddrinfo (hostname, NULL, NULL, &result);
|
||||
|
||||
if (ret != 0) {
|
||||
gf_log (this->name, GF_LOG_ERROR, "error in getaddrinfo: %s\n",
|
||||
gai_strerror(ret));
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (res = result; res != NULL; res = res->ai_next) {
|
||||
gf_log (this->name, GF_LOG_DEBUG, "%s ",
|
||||
get_ip_from_addrinfo (res, &ip));
|
||||
|
||||
found = gf_is_loopback_localhost (res->ai_addr, hostname)
|
||||
|| gf_interface_search (ip);
|
||||
if (found)
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
if (result)
|
||||
freeaddrinfo (result);
|
||||
|
||||
if (!found)
|
||||
gf_log (this->name, GF_LOG_DEBUG, "%s is not local", hostname);
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
gf_boolean_t
|
||||
gf_is_same_address (char *name1, char *name2)
|
||||
{
|
||||
struct addrinfo *addr1 = NULL;
|
||||
struct addrinfo *addr2 = NULL;
|
||||
struct addrinfo *p = NULL;
|
||||
struct addrinfo *q = NULL;
|
||||
gf_boolean_t ret = _gf_false;
|
||||
int gai_err = 0;
|
||||
|
||||
gai_err = getaddrinfo(name1,NULL,NULL,&addr1);
|
||||
if (gai_err != 0) {
|
||||
gf_log (name1, GF_LOG_WARNING,
|
||||
"error in getaddrinfo: %s\n", gai_strerror(gai_err));
|
||||
goto out;
|
||||
}
|
||||
|
||||
gai_err = getaddrinfo(name2,NULL,NULL,&addr2);
|
||||
if (gai_err != 0) {
|
||||
gf_log (name2, GF_LOG_WARNING,
|
||||
"error in getaddrinfo: %s\n", gai_strerror(gai_err));
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (p = addr1; p; p = p->ai_next) {
|
||||
for (q = addr2; q; q = q->ai_next) {
|
||||
if (p->ai_addrlen != q->ai_addrlen) {
|
||||
continue;
|
||||
}
|
||||
if (memcmp(p->ai_addr,q->ai_addr,p->ai_addrlen)) {
|
||||
continue;
|
||||
}
|
||||
ret = _gf_true;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
if (addr1) {
|
||||
freeaddrinfo(addr1);
|
||||
}
|
||||
if (addr2) {
|
||||
freeaddrinfo(addr2);
|
||||
}
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
@ -582,5 +582,7 @@ char *gf_get_reserved_ports();
|
||||
int gf_process_reserved_ports (gf_boolean_t ports[]);
|
||||
gf_boolean_t gf_ports_reserved (char *blocked_port, gf_boolean_t *ports);
|
||||
int gf_get_hostname_from_ip (char *client_ip, char **hostname);
|
||||
gf_boolean_t gf_is_local_addr (char *hostname);
|
||||
gf_boolean_t gf_is_same_address (char *host1, char *host2);
|
||||
|
||||
#endif /* _COMMON_UTILS_H */
|
||||
|
@ -809,10 +809,10 @@ __glusterd_handle_cli_probe (rpcsvc_request_t *req)
|
||||
&bind_name) == 0) {
|
||||
gf_log ("glusterd", GF_LOG_DEBUG,
|
||||
"only checking probe address vs. bind address");
|
||||
ret = glusterd_is_same_address (bind_name, hostname);
|
||||
ret = gf_is_same_address (bind_name, hostname);
|
||||
}
|
||||
else {
|
||||
ret = glusterd_is_local_addr (hostname);
|
||||
ret = gf_is_local_addr (hostname);
|
||||
}
|
||||
if (ret) {
|
||||
glusterd_xfer_cli_probe_resp (req, 0, GF_PROBE_LOCALHOST,
|
||||
@ -1695,7 +1695,7 @@ __glusterd_handle_sync_volume (rpcsvc_request_t *req)
|
||||
gf_log (this->name, GF_LOG_INFO, "Received volume sync req "
|
||||
"for volume %s", (flags & GF_CLI_SYNC_ALL) ? "all" : volname);
|
||||
|
||||
if (glusterd_is_local_addr (hostname)) {
|
||||
if (gf_is_local_addr (hostname)) {
|
||||
ret = -1;
|
||||
snprintf (msg, sizeof (msg), "sync from localhost"
|
||||
" not allowed");
|
||||
|
@ -253,7 +253,7 @@ __server_getspec (rpcsvc_request_t *req)
|
||||
*tmp = '\0';
|
||||
|
||||
/* we trust the local admin */
|
||||
if (glusterd_is_local_addr (addrstr)) {
|
||||
if (gf_is_local_addr (addrstr)) {
|
||||
|
||||
ret = build_volfile_path (volume, filename,
|
||||
sizeof (filename),
|
||||
|
@ -828,7 +828,7 @@ glusterd_op_stage_sync_volume (dict_t *dict, char **op_errstr)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (glusterd_is_local_addr (hostname)) {
|
||||
if (gf_is_local_addr (hostname)) {
|
||||
//volname is not present in case of sync all
|
||||
ret = dict_get_str (dict, "volname", &volname);
|
||||
if (!ret) {
|
||||
@ -1731,7 +1731,7 @@ glusterd_op_sync_volume (dict_t *dict, char **op_errstr,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!glusterd_is_local_addr (hostname)) {
|
||||
if (!gf_is_local_addr (hostname)) {
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
|
@ -441,7 +441,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,
|
||||
}
|
||||
}
|
||||
|
||||
if (glusterd_is_local_addr (src_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (src_brickinfo->hostname)) {
|
||||
gf_log (this->name, GF_LOG_DEBUG,
|
||||
"I AM THE SOURCE HOST");
|
||||
if (src_brickinfo->port && rsp_dict) {
|
||||
@ -518,7 +518,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,
|
||||
}
|
||||
|
||||
if (!glusterd_is_rb_ongoing (volinfo) &&
|
||||
glusterd_is_local_addr (host)) {
|
||||
gf_is_local_addr (host)) {
|
||||
ret = glusterd_validate_and_create_brickpath (dst_brickinfo,
|
||||
volinfo->volume_id,
|
||||
op_errstr, is_force);
|
||||
@ -526,7 +526,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!glusterd_is_local_addr (host)) {
|
||||
if (!gf_is_local_addr (host)) {
|
||||
ret = glusterd_friend_find (NULL, host, &peerinfo);
|
||||
if (ret) {
|
||||
snprintf (msg, sizeof (msg), "%s, is not a friend",
|
||||
@ -553,7 +553,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,
|
||||
}
|
||||
|
||||
if (replace_op == GF_REPLACE_OP_START &&
|
||||
glusterd_is_local_addr (volinfo->rep_brick.dst_brick->hostname)) {
|
||||
gf_is_local_addr (volinfo->rep_brick.dst_brick->hostname)) {
|
||||
port = pmap_registry_alloc (THIS);
|
||||
if (!port) {
|
||||
gf_log (THIS->name, GF_LOG_CRITICAL,
|
||||
@ -1414,7 +1414,7 @@ rb_update_srcbrick_port (glusterd_brickinfo_t *src_brickinfo, dict_t *rsp_dict,
|
||||
if (src_port)
|
||||
src_brickinfo->port = src_port;
|
||||
|
||||
if (glusterd_is_local_addr (src_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (src_brickinfo->hostname)) {
|
||||
gf_log ("", GF_LOG_INFO,
|
||||
"adding src-brick port no");
|
||||
|
||||
@ -1468,7 +1468,7 @@ rb_update_dstbrick_port (glusterd_brickinfo_t *dst_brickinfo, dict_t *rsp_dict,
|
||||
dst_brickinfo->port = dst_port;
|
||||
|
||||
|
||||
if (glusterd_is_local_addr (dst_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (dst_brickinfo->hostname)) {
|
||||
gf_log ("", GF_LOG_INFO,
|
||||
"adding dst-brick port no");
|
||||
|
||||
@ -1676,7 +1676,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)
|
||||
uuid_parse (task_id_str, volinfo->rep_brick.rb_id);
|
||||
}
|
||||
|
||||
if (glusterd_is_local_addr (dst_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (dst_brickinfo->hostname)) {
|
||||
gf_log (this->name, GF_LOG_INFO,
|
||||
"I AM THE DESTINATION HOST");
|
||||
if (!glusterd_is_rb_paused (volinfo)) {
|
||||
@ -1696,7 +1696,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)
|
||||
}
|
||||
|
||||
|
||||
if (glusterd_is_local_addr (src_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (src_brickinfo->hostname)) {
|
||||
ret = rb_src_brick_restart (volinfo, src_brickinfo,
|
||||
1);
|
||||
if (ret) {
|
||||
@ -1706,7 +1706,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)
|
||||
}
|
||||
}
|
||||
|
||||
if (glusterd_is_local_addr (dst_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (dst_brickinfo->hostname)) {
|
||||
gf_log (this->name, GF_LOG_INFO,
|
||||
"adding dst-brick port no");
|
||||
|
||||
@ -1737,7 +1737,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)
|
||||
/* fall through */
|
||||
case GF_REPLACE_OP_COMMIT_FORCE:
|
||||
{
|
||||
if (glusterd_is_local_addr (dst_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (dst_brickinfo->hostname)) {
|
||||
gf_log (this->name, GF_LOG_DEBUG,
|
||||
"I AM THE DESTINATION HOST");
|
||||
ret = rb_kill_destination_brick (volinfo,
|
||||
@ -1818,7 +1818,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)
|
||||
}
|
||||
}
|
||||
|
||||
if (glusterd_is_local_addr (src_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (src_brickinfo->hostname)) {
|
||||
ret = rb_src_brick_restart (volinfo, src_brickinfo,
|
||||
0);
|
||||
if (ret) {
|
||||
@ -1829,7 +1829,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)
|
||||
}
|
||||
}
|
||||
|
||||
if (glusterd_is_local_addr (dst_brickinfo->hostname)) {
|
||||
if (gf_is_local_addr (dst_brickinfo->hostname)) {
|
||||
gf_log (this->name, GF_LOG_INFO,
|
||||
"I AM THE DESTINATION HOST");
|
||||
ret = rb_kill_destination_brick (volinfo, dst_brickinfo);
|
||||
|
@ -49,7 +49,6 @@
|
||||
#include <unistd.h>
|
||||
#include <fnmatch.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <ifaddrs.h>
|
||||
|
||||
#ifdef GF_LINUX_HOST_OS
|
||||
#include <mntent.h>
|
||||
@ -137,189 +136,6 @@ glusterd_is_fuse_available ()
|
||||
return _gf_false;
|
||||
}
|
||||
|
||||
gf_boolean_t
|
||||
glusterd_is_loopback_localhost (const struct sockaddr *sa, char *hostname)
|
||||
{
|
||||
GF_ASSERT (sa);
|
||||
|
||||
gf_boolean_t is_local = _gf_false;
|
||||
const struct in_addr *addr4 = NULL;
|
||||
const struct in6_addr *addr6 = NULL;
|
||||
uint8_t *ap = NULL;
|
||||
struct in6_addr loopbackaddr6 = IN6ADDR_LOOPBACK_INIT;
|
||||
|
||||
switch (sa->sa_family) {
|
||||
case AF_INET:
|
||||
addr4 = &(((struct sockaddr_in *)sa)->sin_addr);
|
||||
ap = (uint8_t*)&addr4->s_addr;
|
||||
if (ap[0] == 127)
|
||||
is_local = _gf_true;
|
||||
break;
|
||||
|
||||
case AF_INET6:
|
||||
addr6 = &(((struct sockaddr_in6 *)sa)->sin6_addr);
|
||||
if (memcmp (addr6, &loopbackaddr6,
|
||||
sizeof (loopbackaddr6)) == 0)
|
||||
is_local = _gf_true;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (hostname)
|
||||
gf_log ("glusterd", GF_LOG_ERROR,
|
||||
"unknown address family %d for %s",
|
||||
sa->sa_family, hostname);
|
||||
break;
|
||||
}
|
||||
|
||||
return is_local;
|
||||
}
|
||||
|
||||
char *
|
||||
get_ip_from_addrinfo (struct addrinfo *addr, char **ip)
|
||||
{
|
||||
char buf[64];
|
||||
void *in_addr = NULL;
|
||||
struct sockaddr_in *s4 = NULL;
|
||||
struct sockaddr_in6 *s6 = NULL;
|
||||
|
||||
switch (addr->ai_family)
|
||||
{
|
||||
case AF_INET:
|
||||
s4 = (struct sockaddr_in *)addr->ai_addr;
|
||||
in_addr = &s4->sin_addr;
|
||||
break;
|
||||
|
||||
case AF_INET6:
|
||||
s6 = (struct sockaddr_in6 *)addr->ai_addr;
|
||||
in_addr = &s6->sin6_addr;
|
||||
break;
|
||||
|
||||
default:
|
||||
gf_log ("glusterd", GF_LOG_ERROR, "Invalid family");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!inet_ntop(addr->ai_family, in_addr, buf, sizeof(buf))) {
|
||||
gf_log ("glusterd", GF_LOG_ERROR, "String conversion failed");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*ip = strdup (buf);
|
||||
return *ip;
|
||||
}
|
||||
|
||||
gf_boolean_t
|
||||
glusterd_interface_search (char *ip)
|
||||
{
|
||||
int32_t ret = -1;
|
||||
gf_boolean_t found = _gf_false;
|
||||
struct ifaddrs *ifaddr, *ifa;
|
||||
int family;
|
||||
char host[NI_MAXHOST];
|
||||
xlator_t *this = NULL;
|
||||
char *pct = NULL;
|
||||
|
||||
this = THIS;
|
||||
|
||||
ret = getifaddrs (&ifaddr);
|
||||
|
||||
if (ret != 0) {
|
||||
gf_log (this->name, GF_LOG_ERROR, "getifaddrs() failed: %s\n",
|
||||
gai_strerror(ret));
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
|
||||
if (!ifa->ifa_addr) {
|
||||
/*
|
||||
* This seemingly happens if an interface hasn't
|
||||
* been bound to a particular protocol (seen with
|
||||
* TUN devices).
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
family = ifa->ifa_addr->sa_family;
|
||||
|
||||
if (family != AF_INET && family != AF_INET6)
|
||||
continue;
|
||||
|
||||
ret = getnameinfo (ifa->ifa_addr,
|
||||
(family == AF_INET) ? sizeof(struct sockaddr_in) :
|
||||
sizeof(struct sockaddr_in6),
|
||||
host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
|
||||
|
||||
if (ret != 0) {
|
||||
gf_log (this->name, GF_LOG_ERROR,
|
||||
"getnameinfo() failed: %s\n",
|
||||
gai_strerror(ret));
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sometimes the address comes back as addr%eth0 or
|
||||
* similar. Since % is an invalid character, we can
|
||||
* strip it out with confidence that doing so won't
|
||||
* harm anything.
|
||||
*/
|
||||
pct = index(host,'%');
|
||||
if (pct) {
|
||||
*pct = '\0';
|
||||
}
|
||||
|
||||
if (strncmp (ip, host, NI_MAXHOST) == 0) {
|
||||
gf_log (this->name, GF_LOG_DEBUG,
|
||||
"%s is local address at interface %s",
|
||||
ip, ifa->ifa_name);
|
||||
found = _gf_true;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
out:
|
||||
if(ifaddr)
|
||||
freeifaddrs (ifaddr);
|
||||
return found;
|
||||
}
|
||||
|
||||
|
||||
gf_boolean_t
|
||||
glusterd_is_local_addr (char *hostname)
|
||||
{
|
||||
int32_t ret = -1;
|
||||
struct addrinfo *result = NULL;
|
||||
struct addrinfo *res = NULL;
|
||||
gf_boolean_t found = _gf_false;
|
||||
char *ip = NULL;
|
||||
xlator_t *this = NULL;
|
||||
|
||||
this = THIS;
|
||||
ret = getaddrinfo (hostname, NULL, NULL, &result);
|
||||
|
||||
if (ret != 0) {
|
||||
gf_log (this->name, GF_LOG_ERROR, "error in getaddrinfo: %s\n",
|
||||
gai_strerror(ret));
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (res = result; res != NULL; res = res->ai_next) {
|
||||
gf_log (this->name, GF_LOG_DEBUG, "%s ",
|
||||
get_ip_from_addrinfo (res, &ip));
|
||||
|
||||
found = glusterd_is_loopback_localhost (res->ai_addr, hostname)
|
||||
|| glusterd_interface_search (ip);
|
||||
if (found)
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
if (result)
|
||||
freeaddrinfo (result);
|
||||
|
||||
if (!found)
|
||||
gf_log (this->name, GF_LOG_DEBUG, "%s is not local", hostname);
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
int32_t
|
||||
glusterd_lock (uuid_t uuid)
|
||||
{
|
||||
@ -4226,7 +4042,7 @@ glusterd_get_brickinfo (xlator_t *this, const char *brickname, int port,
|
||||
list_for_each_entry (volinfo, &priv->volumes, vol_list) {
|
||||
list_for_each_entry (tmpbrkinfo, &volinfo->bricks,
|
||||
brick_list) {
|
||||
if (localhost && !glusterd_is_local_addr (tmpbrkinfo->hostname))
|
||||
if (localhost && !gf_is_local_addr (tmpbrkinfo->hostname))
|
||||
continue;
|
||||
if (!strcmp(tmpbrkinfo->path, brickname) &&
|
||||
(tmpbrkinfo->port == port)) {
|
||||
@ -4893,7 +4709,7 @@ glusterd_hostname_to_uuid (char *hostname, uuid_t uuid)
|
||||
|
||||
ret = glusterd_friend_find_by_hostname (hostname, &peerinfo);
|
||||
if (ret) {
|
||||
if (glusterd_is_local_addr (hostname)) {
|
||||
if (gf_is_local_addr (hostname)) {
|
||||
uuid_copy (uuid, MY_UUID);
|
||||
ret = 0;
|
||||
} else {
|
||||
@ -7510,54 +7326,6 @@ glusterd_copy_uuid_to_dict (uuid_t uuid, dict_t *dict, char *key)
|
||||
return 0;
|
||||
}
|
||||
|
||||
gf_boolean_t
|
||||
glusterd_is_same_address (char *name1, char *name2)
|
||||
{
|
||||
struct addrinfo *addr1 = NULL;
|
||||
struct addrinfo *addr2 = NULL;
|
||||
struct addrinfo *p = NULL;
|
||||
struct addrinfo *q = NULL;
|
||||
gf_boolean_t ret = _gf_false;
|
||||
int gai_err = 0;
|
||||
|
||||
gai_err = getaddrinfo(name1,NULL,NULL,&addr1);
|
||||
if (gai_err != 0) {
|
||||
gf_log (name1, GF_LOG_WARNING,
|
||||
"error in getaddrinfo: %s\n", gai_strerror(gai_err));
|
||||
goto out;
|
||||
}
|
||||
|
||||
gai_err = getaddrinfo(name2,NULL,NULL,&addr2);
|
||||
if (gai_err != 0) {
|
||||
gf_log (name2, GF_LOG_WARNING,
|
||||
"error in getaddrinfo: %s\n", gai_strerror(gai_err));
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (p = addr1; p; p = p->ai_next) {
|
||||
for (q = addr2; q; q = q->ai_next) {
|
||||
if (p->ai_addrlen != q->ai_addrlen) {
|
||||
continue;
|
||||
}
|
||||
if (memcmp(p->ai_addr,q->ai_addr,p->ai_addrlen)) {
|
||||
continue;
|
||||
}
|
||||
ret = _gf_true;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
if (addr1) {
|
||||
freeaddrinfo(addr1);
|
||||
}
|
||||
if (addr2) {
|
||||
freeaddrinfo(addr2);
|
||||
}
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
_update_volume_op_versions (dict_t *this, char *key, data_t *value, void *data)
|
||||
{
|
||||
|
@ -151,9 +151,6 @@ glusterd_volume_brickinfo_get_by_brick (char *brick,
|
||||
glusterd_volinfo_t *volinfo,
|
||||
glusterd_brickinfo_t **brickinfo);
|
||||
|
||||
gf_boolean_t
|
||||
glusterd_is_local_addr (char *hostname);
|
||||
|
||||
int32_t
|
||||
glusterd_build_volume_dict (dict_t **vols);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user