FreeBSD does not define s6_addr32, only s6_addr
authorVolker Lendecke <vl@samba.org>
Mon, 6 Feb 2012 10:01:47 +0000 (11:01 +0100)
committerMichael Adam <obnox@samba.org>
Mon, 13 Feb 2012 15:20:12 +0000 (16:20 +0100)
Signed-off-by: Michael Adam <obnox@samba.org>
common/ctdb_util.c
server/ctdb_takeover.c
tools/ctdb.c

index 1ff4c1f9aa2052cb97b46c54af6c579ab9ed430f..bb32b6a34591ae670300d7da84147430f69480a3 100644 (file)
@@ -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);
        }
 }
 
index 87e1b0001d6da31f137e3a45ccea4bd4bb5c4b67..830b751b03625efd20ab5f0ca9f78515c440c62e 100644 (file)
@@ -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;
index aeb14c951ba8ff5fc8ae2c28b848c01c1e17a794..a9fbddcf78852f45151fe2d1a279762acbe893ee 100644 (file)
@@ -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;