diff options
author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2008-06-04 17:12:57 +1000 |
---|---|---|
committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2008-06-04 17:12:57 +1000 |
commit | d8433cacb2735368f9ca1c7e1554045b52e9311c (patch) | |
tree | 3d2bb8e92bf4edd3934efdc68af7f81bd144828e /ctdb/common/ctdb_util.c | |
parent | 598fba7fadfeaf984acba8b53287522ce3a980b4 (diff) | |
download | samba-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.c | 25 |
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; } |