]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
librdmacm: Set address family for source address returned by ACM
authorSean Hefty <sean.hefty@intel.com>
Thu, 23 Aug 2012 22:48:06 +0000 (15:48 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 27 Aug 2012 23:39:51 +0000 (16:39 -0700)
Set the sa_family type when saving the source address returnd
by ACM.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
src/acm.c

index 458e23dec346aadf0e2985d47220b473c169c094..d96dbcd9aed4c4aade4ab04bbbf672183863dd6d 100755 (executable)
--- a/src/acm.c
+++ b/src/acm.c
@@ -258,6 +258,8 @@ static void ucma_ib_save_resp(struct rdma_addrinfo *rai, cma_acm_msg_t *msg)
        struct acm_ep_addr_data *ep_data;
        struct ibv_path_data *path_data = NULL;
        struct ibv_path_record *pri_path = NULL;
+       struct sockaddr_in *sin;
+       struct sockaddr_in6 *sin6;
        int i, cnt, path_cnt = 0;
 
        cnt = (msg->hdr.length - ACM_MSG_HDR_LENGTH) / ACM_MSG_EP_LENGTH;
@@ -277,25 +279,27 @@ static void ucma_ib_save_resp(struct rdma_addrinfo *rai, cma_acm_msg_t *msg)
                        if (!(ep_data->flags & ACM_EP_FLAG_SOURCE) || rai->ai_src_len)
                                break;
 
-                       rai->ai_src_addr = calloc(1, sizeof(struct sockaddr_in));
-                       if (!rai->ai_src_addr)
+                       sin = calloc(1, sizeof(*sin));
+                       if (!sin)
                                break;
 
-                       rai->ai_src_len = sizeof(struct sockaddr_in);
-                       memcpy(&((struct sockaddr_in *) rai->ai_src_addr)->sin_addr,
-                              &ep_data->info.addr, 4);
+                       sin->sin_family = AF_INET;
+                       memcpy(&sin->sin_addr, &ep_data->info.addr, 4);
+                       rai->ai_src_len = sizeof(*sin);
+                       rai->ai_src_addr = (struct sockaddr *) sin;
                        break;
                case ACM_EP_INFO_ADDRESS_IP6:
                        if (!(ep_data->flags & ACM_EP_FLAG_SOURCE) || rai->ai_src_len)
                                break;
 
-                       rai->ai_src_addr = calloc(1, sizeof(struct sockaddr_in6));
-                       if (!rai->ai_src_addr)
+                       sin6 = calloc(1, sizeof(*sin6));
+                       if (!sin6)
                                break;
 
-                       rai->ai_src_len = sizeof(struct sockaddr_in6);
-                       memcpy(&((struct sockaddr_in6 *) rai->ai_src_addr)->sin6_addr,
-                              &ep_data->info.addr, 16);
+                       sin6->sin6_family = AF_INET6;
+                       memcpy(&sin6->sin6_addr, &ep_data->info.addr, 16);
+                       rai->ai_src_len = sizeof(*sin6);
+                       rai->ai_src_addr = (struct sockaddr *) sin6;
                        break;
                default:
                        break;