[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