summaryrefslogtreecommitdiffstats
path: root/ctdb/ib/ibwrapper.c
diff options
context:
space:
mode:
authorPeter Somogyi <psomogyi@gamax.hu>2007-02-14 18:58:20 +0100
committerPeter Somogyi <psomogyi@gamax.hu>2007-02-14 18:58:20 +0100
commit1c8bcd6f5718a675f8a382d143d82871aac85296 (patch)
treecd39c6231d97526ee9027209c1d9ff0fe0406d55 /ctdb/ib/ibwrapper.c
parent8b6f1c39e7b8b423e28fbfed09577d8e7f9d1de0 (diff)
downloadsamba-1c8bcd6f5718a675f8a382d143d82871aac85296.tar.gz
samba-1c8bcd6f5718a675f8a382d143d82871aac85296.tar.xz
samba-1c8bcd6f5718a675f8a382d143d82871aac85296.zip
ib: a trivial approach of integration
TODO: bugfix (not yet complete, something happens differently than expected at tcpip when connection is refused in the beginning) (This used to be ctdb commit 330d76fb91f717d4fb8d1be29c11ddf8c25a4f1c)
Diffstat (limited to 'ctdb/ib/ibwrapper.c')
-rw-r--r--ctdb/ib/ibwrapper.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/ctdb/ib/ibwrapper.c b/ctdb/ib/ibwrapper.c
index 2f8dd256f9..fef312678a 100644
--- a/ctdb/ib/ibwrapper.c
+++ b/ctdb/ib/ibwrapper.c
@@ -420,6 +420,7 @@ static void ibw_event_handler_cm(struct event_context *ev,
switch (event->event) {
case RDMA_CM_EVENT_ADDR_RESOLVED:
+ DEBUG(11, ("RDMA_CM_EVENT_ADDR_RESOLVED\n"));
/* continuing from ibw_connect ... */
rc = rdma_resolve_route(cma_id, 2000);
if (rc) {
@@ -430,6 +431,7 @@ static void ibw_event_handler_cm(struct event_context *ev,
break;
case RDMA_CM_EVENT_ROUTE_RESOLVED:
+ DEBUG(11, ("RDMA_CM_EVENT_ROUTE_RESOLVED\n"));
/* after RDMA_CM_EVENT_ADDR_RESOLVED: */
assert(cma_id->context!=NULL);
conn = talloc_get_type(cma_id->context, struct ibw_conn);
@@ -441,6 +443,7 @@ static void ibw_event_handler_cm(struct event_context *ev,
break;
case RDMA_CM_EVENT_CONNECT_REQUEST:
+ DEBUG(11, ("RDMA_CM_EVENT_CONNECT_REQUEST\n"));
ctx->state = IBWS_CONNECT_REQUEST;
conn = ibw_conn_new(ctx);
pconn = talloc_get_type(conn->internal, struct ibw_conn_priv);
@@ -481,14 +484,23 @@ static void ibw_event_handler_cm(struct event_context *ev,
break;
case RDMA_CM_EVENT_ADDR_ERROR:
+ sprintf(ibw_lasterr, "RDMA_CM_EVENT_ADDR_ERROR, error %d\n", event->status);
+ goto error;
case RDMA_CM_EVENT_ROUTE_ERROR:
+ sprintf(ibw_lasterr, "RDMA_CM_EVENT_ROUTE_ERROR, error %d\n", event->status);
+ goto error;
case RDMA_CM_EVENT_CONNECT_ERROR:
+ sprintf(ibw_lasterr, "RDMA_CM_EVENT_CONNECT_ERROR, error %d\n", event->status);
+ goto error;
case RDMA_CM_EVENT_UNREACHABLE:
+ sprintf(ibw_lasterr, "RDMA_CM_EVENT_UNREACHABLE, error %d\n", event->status);
+ goto error;
case RDMA_CM_EVENT_REJECTED:
- sprintf(ibw_lasterr, "cma event %d, error %d\n", event->event, event->status);
+ sprintf(ibw_lasterr, "RDMA_CM_EVENT_REJECTED, error %d\n", event->status);
goto error;
case RDMA_CM_EVENT_DISCONNECTED:
+ DEBUG(11, ("RDMA_CM_EVENT_DISCONNECTED\n"));
if (cma_id!=pctx->cm_id) {
DEBUG(0, ("client DISCONNECT event cm_id=%p\n", cma_id));
conn = talloc_get_type(cma_id->context, struct ibw_conn);
@@ -944,7 +956,7 @@ int ibw_bind(struct ibw_ctx *ctx, struct sockaddr_in *my_addr)
int rc;
DEBUG(10, ("ibw_bind: addr=%s, port=%u\n",
- inet_ntoa(my_addr->sin_addr), my_addr->sin_port));
+ inet_ntoa(my_addr->sin_addr), ntohs(my_addr->sin_port)));
rc = rdma_bind_addr(pctx->cm_id, (struct sockaddr *) my_addr);
if (rc) {
sprintf(ibw_lasterr, "rdma_bind_addr error %d\n", rc);
@@ -1008,7 +1020,8 @@ int ibw_connect(struct ibw_ctx *ctx, struct sockaddr_in *serv_addr, void *conn_u
conn = ibw_conn_new(ctx);
conn->conn_userdata = conn_userdata;
pconn = talloc_get_type(conn->internal, struct ibw_conn_priv);
- DEBUG(10, ("ibw_connect: addr=%s, port=%u\n", inet_ntoa(serv_addr->sin_addr), serv_addr->sin_port));
+ DEBUG(10, ("ibw_connect: addr=%s, port=%u\n", inet_ntoa(serv_addr->sin_addr),
+ ntohs(serv_addr->sin_port)));
/* init cm */
rc = rdma_create_id(pctx->cm_channel, &pconn->cm_id, conn, RDMA_PS_TCP);
@@ -1023,6 +1036,7 @@ int ibw_connect(struct ibw_ctx *ctx, struct sockaddr_in *serv_addr, void *conn_u
if (rc) {
sprintf(ibw_lasterr, "rdma_resolve_addr error %d\n", rc);
DEBUG(0, (ibw_lasterr));
+ talloc_free(conn);
return -1;
}