[SCM] SAMBA-CTDB repository - branch v3-2-ctdb updated - build_3.2.7_ctdb.54-31-gfa7a49f

Michael Adam obnox at samba.org
Mon Jan 19 22:22:32 GMT 2009


The branch, v3-2-ctdb has been updated
       via  fa7a49f9298c0044419947d2863aedb64e398811 (commit)
       via  67c6def39fe0d3fa7dc4dba690e6ab94e01fe114 (commit)
      from  0a648c520756fdd6f25b60c69b1e19a1a58dd03a (commit)

http://gitweb.samba.org/?p=obnox/samba-ctdb.git;a=shortlog;h=v3-2-ctdb


- Log -----------------------------------------------------------------
commit fa7a49f9298c0044419947d2863aedb64e398811
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jan 14 12:09:46 2009 +0100

    s3:cluster: fix ctdb ipv6 support
    
    We need to use CTDB_CONTROL_TCP_CLIENT instead of CTDB_CONTROL_TCP_ADD.
    
    CTDB_CONTROL_TCP_CLIENT has support for 2 modes in newer ctdb versions:
    
    - with struct ctdb_control_tcp it only supports ipv4.
    - with struct ctdb_control_tcp_addr it supports ipv4 and ipv6.
    
    You need new header files which defines struct ctdb_control_tcp_addr,
    but at runtime it should be fine to work against older
    ctdb versions (<= 1.0.68).
    
    metze
    (cherry picked from commit dc6edf1ab4ae8e3fb3ef40b93135ff0ef5407e12)
    (cherry picked from commit c07bcd6efd3383fc3a46fce35fd34df85ab221c9)
    (cherry picked from commit 9a5aee97cf6ec1514225e3060b0a083e9afdab32)
    
    Signed-off-by: Michael Adam <obnox at samba.org>

commit 67c6def39fe0d3fa7dc4dba690e6ab94e01fe114
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Jan 15 12:49:06 2009 +0100

    s3:cluster: register the client connection via CTDB_CONTROL_TCP_ADD
    
    This means we correctly pass IPv6 addresses too.
    (CTDB_CONTROL_TCP_CLIENT was IPv4 only)
    
    metze
    (cherry picked from commit 465176b7e2fc1370dded850a80a8fe8519e79db8)
    (cherry picked from commit 6d5b415c5a0d7e0b7aae2f20ee7989ca58ec2f81)
    (cherry picked from commit 0d9563329967838b3c91728a7ed8e88872d5047b)
    
    Signed-off-by: Michael Adam <obnox at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source/include/ctdbd_conn.h |    4 ++--
 source/lib/ctdbd_conn.c     |   40 +++++++++++++++++++++++++++++++---------
 source/smbd/server.c        |    5 +++--
 3 files changed, 36 insertions(+), 13 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/ctdbd_conn.h b/source/include/ctdbd_conn.h
index 39f50c2..d721235 100644
--- a/source/include/ctdbd_conn.h
+++ b/source/include/ctdbd_conn.h
@@ -57,8 +57,8 @@ NTSTATUS ctdbd_traverse(uint32 db_id,
 			void *private_data);
 
 NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
-			    const struct sockaddr_in *server,
-			    const struct sockaddr_in *client,
+			    const struct sockaddr_storage *server,
+			    const struct sockaddr_storage *client,
 			    void (*release_ip_handler)(const char *ip_addr,
 						       void *private_data),
 			    void *private_data);
diff --git a/source/lib/ctdbd_conn.c b/source/lib/ctdbd_conn.c
index 1ae23bc..3c602c8 100644
--- a/source/lib/ctdbd_conn.c
+++ b/source/lib/ctdbd_conn.c
@@ -1175,13 +1175,22 @@ NTSTATUS ctdbd_traverse(uint32 db_id,
  */
 
 NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
-			    const struct sockaddr_in *server,
-			    const struct sockaddr_in *client,
+			    const struct sockaddr_storage *server,
+			    const struct sockaddr_storage *client,
 			    void (*release_ip_handler)(const char *ip_addr,
 						       void *private_data),
 			    void *private_data)
 {
-	struct ctdb_control_tcp p;
+	struct sockaddr *sock = (struct sockaddr *)client;
+	/*
+	 * we still use ctdb_control_tcp for ipv4
+	 * because we want to work against older ctdb
+	 * versions at runtime
+	 */
+	struct ctdb_control_tcp p4;
+#ifdef HAVE_IPV6
+	struct ctdb_control_tcp_addr p;
+#endif
 	TDB_DATA data;
 	NTSTATUS status;
 
@@ -1190,6 +1199,25 @@ NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
 	 */
 	SMB_ASSERT(conn->release_ip_handler == NULL);
 
+	switch (sock->sa_family) {
+	case AF_INET:
+		p4.dest = *(struct sockaddr_in *)server;
+		p4.src = *(struct sockaddr_in *)client;
+		data.dptr = (uint8_t *)&p4;
+		data.dsize = sizeof(p4);
+		break;
+#ifdef HAVE_IPV6
+	case AF_INET6:
+		p.dest.ip6 = *(struct sockaddr_in6 *)server;
+		p.src.ip6 = *(struct sockaddr_in6 *)client;
+		data.dptr = (uint8_t *)&p;
+		data.dsize = sizeof(p);
+		break;
+#endif
+	default:
+		return NT_STATUS_INTERNAL_ERROR;
+	}
+
 	conn->release_ip_handler = release_ip_handler;
 
 	/*
@@ -1201,17 +1229,11 @@ NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
 		return status;
 	}
 
-	p.dest = *server;
-	p.src = *client;
-
 	/*
 	 * inform ctdb of our tcp connection, so if IP takeover happens ctdb
 	 * can send an extra ack to trigger a reset for our client, so it
 	 * immediately reconnects
 	 */
-	data.dptr = (uint8_t *)&p;
-	data.dsize = sizeof(p);
-
 	return ctdbd_control(conn, CTDB_CURRENT_NODE, 
 			     CTDB_CONTROL_TCP_CLIENT, 0,
 			     CTDB_CTRL_FLAG_NOREPLY, data, NULL, NULL, NULL);
diff --git a/source/smbd/server.c b/source/smbd/server.c
index d380a76..9dd5c4e 100644
--- a/source/smbd/server.c
+++ b/source/smbd/server.c
@@ -59,7 +59,8 @@ int get_client_fd(void)
 	return server_fd;
 }
 
-int client_get_tcp_info(struct sockaddr_in *server, struct sockaddr_in *client)
+static int client_get_tcp_info(struct sockaddr_storage *server,
+			       struct sockaddr_storage *client)
 {
 	socklen_t length;
 	if (server_fd == -1) {
@@ -1438,7 +1439,7 @@ extern void build_options(bool screen);
 		 * client.
 		 */
 
-		struct sockaddr_in srv, clnt;
+		struct sockaddr_storage srv, clnt;
 
 		if (client_get_tcp_info(&srv, &clnt) == 0) {
 


-- 
SAMBA-CTDB repository


More information about the samba-cvs mailing list