summaryrefslogtreecommitdiffstats
path: root/ctdb/common/ctdb_util.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2008-06-04 17:12:57 +1000
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2008-06-04 17:12:57 +1000
commitd8433cacb2735368f9ca1c7e1554045b52e9311c (patch)
tree3d2bb8e92bf4edd3934efdc68af7f81bd144828e /ctdb/common/ctdb_util.c
parent598fba7fadfeaf984acba8b53287522ce3a980b4 (diff)
downloadsamba-d8433cacb2735368f9ca1c7e1554045b52e9311c.tar.gz
samba-d8433cacb2735368f9ca1c7e1554045b52e9311c.tar.xz
samba-d8433cacb2735368f9ca1c7e1554045b52e9311c.zip
first cut to convert takeover_callback_state{}
to use ctdb_sock_addr instead of sockaddr_in (This used to be ctdb commit 5444ebd0815e335a75ef4857546e23f490a22338)
Diffstat (limited to 'ctdb/common/ctdb_util.c')
-rw-r--r--ctdb/common/ctdb_util.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/ctdb/common/ctdb_util.c b/ctdb/common/ctdb_util.c
index a92a53f195..6856c178a0 100644
--- a/ctdb/common/ctdb_util.c
+++ b/ctdb/common/ctdb_util.c
@@ -408,18 +408,39 @@ bool parse_ip_mask(const char *s, struct sockaddr_in *ip, unsigned *mask)
/*
compare two sockaddr_in structures - matching only on IP
*/
-bool ctdb_same_ip(const struct sockaddr_in *ip1, const struct sockaddr_in *ip2)
+bool ctdb_same_ipv4(const struct sockaddr_in *ip1, const struct sockaddr_in *ip2)
{
return ip1->sin_family == ip2->sin_family &&
ip1->sin_addr.s_addr == ip2->sin_addr.s_addr;
}
+bool ctdb_same_ip(ctdb_sock_addr *ip1, ctdb_sock_addr *ip2)
+{
+ if (ip1->sa.sa_family != ip2->sa.sa_family) {
+ return false;
+ }
+
+ switch (ip1->sa.sa_family) {
+ case AF_INET:
+ return ip1->ip.sin_addr.s_addr == ip2->ip.sin_addr.s_addr;
+ case AF_INET6:
+ return !memcmp(&ip1->ip6.sin6_addr.s6_addr[0],
+ &ip2->ip6.sin6_addr.s6_addr[0],
+ 16);
+ default:
+ DEBUG(DEBUG_ERR, (__location__ " CRITICAL Can not compare sockaddr structures of type %u\n", ip1->sa.sa_family));
+ return false;
+ }
+
+ return true;
+}
+
/*
compare two sockaddr_in structures
*/
bool ctdb_same_sockaddr(const struct sockaddr_in *ip1, const struct sockaddr_in *ip2)
{
- return ctdb_same_ip(ip1, ip2) && ip1->sin_port == ip2->sin_port;
+ return ctdb_same_ipv4(ip1, ip2) && ip1->sin_port == ip2->sin_port;
}