summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2012-02-06 11:01:47 +0100
committerMichael Adam <obnox@samba.org>2012-02-13 16:20:12 +0100
commit5e3b13a32adaf5c06bac8e48e4522b633431c29d (patch)
tree0b47aaf3861f203b683ec284997fce45508eeecc
parentcb44ebbc951b0fdd2b5afdf31633136ed418a5ab (diff)
downloadsamba-5e3b13a32adaf5c06bac8e48e4522b633431c29d.tar.gz
samba-5e3b13a32adaf5c06bac8e48e4522b633431c29d.tar.xz
samba-5e3b13a32adaf5c06bac8e48e4522b633431c29d.zip
FreeBSD does not define s6_addr32, only s6_addr
Signed-off-by: Michael Adam <obnox@samba.org> (This used to be ctdb commit d657af4fb68ce3f7c462856f2934f6bf169e120b)
-rw-r--r--ctdb/common/ctdb_util.c2
-rw-r--r--ctdb/server/ctdb_takeover.c35
-rw-r--r--ctdb/tools/ctdb.c12
3 files changed, 29 insertions, 20 deletions
diff --git a/ctdb/common/ctdb_util.c b/ctdb/common/ctdb_util.c
index 1ff4c1f9aa..bb32b6a345 100644
--- a/ctdb/common/ctdb_util.c
+++ b/ctdb/common/ctdb_util.c
@@ -522,7 +522,7 @@ void ctdb_canonicalize_ip(const ctdb_sock_addr *ip, ctdb_sock_addr *cip)
#endif
cip->ip.sin_family = AF_INET;
cip->ip.sin_port = ip->ip6.sin6_port;
- memcpy(&cip->ip.sin_addr, &ip->ip6.sin6_addr.s6_addr32[3], 4);
+ memcpy(&cip->ip.sin_addr, &ip->ip6.sin6_addr.s6_addr[12], 4);
}
}
diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c
index 87e1b0001d..830b751b03 100644
--- a/ctdb/server/ctdb_takeover.c
+++ b/ctdb/server/ctdb_takeover.c
@@ -1222,12 +1222,14 @@ static uint32_t *ip_key(ctdb_sock_addr *ip)
case AF_INET:
key[3] = htonl(ip->ip.sin_addr.s_addr);
break;
- case AF_INET6:
- key[0] = htonl(ip->ip6.sin6_addr.s6_addr32[0]);
- key[1] = htonl(ip->ip6.sin6_addr.s6_addr32[1]);
- key[2] = htonl(ip->ip6.sin6_addr.s6_addr32[2]);
- key[3] = htonl(ip->ip6.sin6_addr.s6_addr32[3]);
+ case AF_INET6: {
+ uint32_t *s6_a32 = (uint32_t *)&(ip->ip6.sin6_addr.s6_addr);
+ key[0] = htonl(s6_a32[0]);
+ key[1] = htonl(s6_a32[1]);
+ key[2] = htonl(s6_a32[2]);
+ key[3] = htonl(s6_a32[3]);
break;
+ }
default:
DEBUG(DEBUG_ERR, (__location__ " ERROR, unknown family passed :%u\n", ip->sa.sa_family));
return key;
@@ -2800,18 +2802,23 @@ static uint32_t *killtcp_key(ctdb_sock_addr *src, ctdb_sock_addr *dst)
key[2] = dst->ip.sin_port;
key[3] = src->ip.sin_port;
break;
- case AF_INET6:
- key[0] = dst->ip6.sin6_addr.s6_addr32[3];
- key[1] = src->ip6.sin6_addr.s6_addr32[3];
- key[2] = dst->ip6.sin6_addr.s6_addr32[2];
- key[3] = src->ip6.sin6_addr.s6_addr32[2];
- key[4] = dst->ip6.sin6_addr.s6_addr32[1];
- key[5] = src->ip6.sin6_addr.s6_addr32[1];
- key[6] = dst->ip6.sin6_addr.s6_addr32[0];
- key[7] = src->ip6.sin6_addr.s6_addr32[0];
+ case AF_INET6: {
+ uint32_t *dst6_addr32 =
+ (uint32_t *)&(dst->ip6.sin6_addr.s6_addr);
+ uint32_t *src6_addr32 =
+ (uint32_t *)&(src->ip6.sin6_addr.s6_addr);
+ key[0] = dst6_addr32[3];
+ key[1] = src6_addr32[3];
+ key[2] = dst6_addr32[2];
+ key[3] = src6_addr32[2];
+ key[4] = dst6_addr32[1];
+ key[5] = src6_addr32[1];
+ key[6] = dst6_addr32[0];
+ key[7] = src6_addr32[0];
key[8] = dst->ip6.sin6_port;
key[9] = src->ip6.sin6_port;
break;
+ }
default:
DEBUG(DEBUG_ERR, (__location__ " ERROR, unknown family passed :%u\n", src->sa.sa_family));
return key;
diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c
index aeb14c951b..a9fbddcf78 100644
--- a/ctdb/tools/ctdb.c
+++ b/ctdb/tools/ctdb.c
@@ -1601,12 +1601,14 @@ static uint32_t *ip_key(ctdb_sock_addr *ip)
case AF_INET:
key[0] = ip->ip.sin_addr.s_addr;
break;
- case AF_INET6:
- key[0] = ip->ip6.sin6_addr.s6_addr32[3];
- key[1] = ip->ip6.sin6_addr.s6_addr32[2];
- key[2] = ip->ip6.sin6_addr.s6_addr32[1];
- key[3] = ip->ip6.sin6_addr.s6_addr32[0];
+ case AF_INET6: {
+ uint32_t *s6_a32 = (uint32_t *)&(ip->ip6.sin6_addr.s6_addr);
+ key[0] = s6_a32[3];
+ key[1] = s6_a32[2];
+ key[2] = s6_a32[1];
+ key[3] = s6_a32[0];
break;
+ }
default:
DEBUG(DEBUG_ERR, (__location__ " ERROR, unknown family passed :%u\n", ip->sa.sa_family));
return key;