From 0ff21f914510cf90ff48a88bee3ddf0138c60fdf Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Fri, 31 Aug 2012 14:38:14 -0700 Subject: [PATCH] Refresh of addrinfo-af-ib --- src/acm.c | 14 -------------- src/addrinfo.c | 27 ++++++++++++++++++++------- src/cma.h | 5 ++++- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/acm.c b/src/acm.c index 125d44a1..3d8c912c 100755 --- a/src/acm.c +++ b/src/acm.c @@ -123,20 +123,6 @@ void ucma_ib_cleanup(void) } } -static void ucma_set_sid(enum rdma_port_space ps, struct sockaddr *addr, - struct sockaddr_ib *sib) -{ - uint16_t port; - - port = addr ? ucma_get_port(addr) : 0; - sib->sib_sid = htonll(((uint64_t) ps << 16) + ntohs(port)); - - if (ps) - sib->sib_sid_mask = htonll(RDMA_IB_IP_PORT_MASK); - if (port) - sib->sib_sid_mask |= htonll(RDMA_IB_IP_PORT_MASK); -} - static int ucma_ib_set_addr(struct rdma_addrinfo *ib_rai, struct rdma_addrinfo *rai) { diff --git a/src/addrinfo.c b/src/addrinfo.c index 9c43043d..05829551 100755 --- a/src/addrinfo.c +++ b/src/addrinfo.c @@ -116,7 +116,21 @@ static int ucma_copy_addr(struct sockaddr **dst, socklen_t *dst_len, return 0; } -static int ucma_convert_in6(struct sockaddr_ib **dst, socklen_t *dst_len, +void ucma_set_sid(enum rdma_port_space ps, struct sockaddr *addr, + struct sockaddr_ib *sib) +{ + uint16_t port; + + port = addr ? ucma_get_port(addr) : 0; + sib->sib_sid = htonll(((uint64_t) ps << 16) + ntohs(port)); + + if (ps) + sib->sib_sid_mask = htonll(RDMA_IB_IP_PORT_MASK); + if (port) + sib->sib_sid_mask |= htonll(RDMA_IB_IP_PORT_MASK); +} + +static int ucma_convert_in6(int ps, struct sockaddr_ib **dst, socklen_t *dst_len, struct sockaddr_in6 *src, socklen_t src_len) { *dst = calloc(1, sizeof(struct sockaddr_ib)); @@ -129,10 +143,7 @@ static int ucma_convert_in6(struct sockaddr_ib **dst, socklen_t *dst_len, ib_addr_set(&(*dst)->sib_addr, src->sin6_addr.s6_addr32[0], src->sin6_addr.s6_addr32[1], src->sin6_addr.s6_addr32[2], src->sin6_addr.s6_addr32[3]); - if (src->sin6_port) { - (*dst)->sib_sid = htonll((uint64_t) ntohs(src->sin6_port)); - (*dst)->sib_sid_mask = htonll((uint64_t) 0x0000FFFF); - } + ucma_set_sid(ps, (struct sockaddr *) src, *dst); (*dst)->sib_scope_id = src->sin6_scope_id; *dst_len = sizeof(struct sockaddr_ib); @@ -178,7 +189,8 @@ static int ucma_convert_to_rai(struct rdma_addrinfo *rai, if ((hints->ai_flags & RAI_FAMILY) && (hints->ai_family == AF_IB) && (hints->ai_flags & RAI_NUMERICHOST)) { rai->ai_family = AF_IB; - ret = ucma_convert_in6((struct sockaddr_ib **) &rai->ai_src_addr, + ret = ucma_convert_in6(rai->ai_port_space, + (struct sockaddr_ib **) &rai->ai_src_addr, &rai->ai_src_len, (struct sockaddr_in6 *) ai->ai_addr, ai->ai_addrlen); @@ -194,7 +206,8 @@ static int ucma_convert_to_rai(struct rdma_addrinfo *rai, if ((hints->ai_flags & RAI_FAMILY) && (hints->ai_family == AF_IB) && (hints->ai_flags & RAI_NUMERICHOST)) { rai->ai_family = AF_IB; - ret = ucma_convert_in6((struct sockaddr_ib **) &rai->ai_dst_addr, + ret = ucma_convert_in6(rai->ai_port_space, + (struct sockaddr_ib **) &rai->ai_dst_addr, &rai->ai_dst_len, (struct sockaddr_in6 *) ai->ai_addr, ai->ai_addrlen); diff --git a/src/cma.h b/src/cma.h index 3c4388cf..6a1cd752 100644 --- a/src/cma.h +++ b/src/cma.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005-2010 Intel Corporation. All rights reserved. + * Copyright (c) 2005-2012 Intel Corporation. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU @@ -45,6 +45,7 @@ #include #include +#include #ifdef INCLUDE_VALGRIND # include @@ -138,6 +139,8 @@ typedef struct { volatile int val; } atomic_t; #define atomic_set(v, s) ((v)->val = s) uint16_t ucma_get_port(struct sockaddr *addr); +void ucma_set_sid(enum rdma_port_space ps, struct sockaddr *addr, + struct sockaddr_ib *sib); int ucma_max_qpsize(struct rdma_cm_id *id); int ucma_complete(struct rdma_cm_id *id); static inline int ERR(int err) -- 2.45.2