]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
librdmacm: Support older acm.h header files
authorSean Hefty <sean.hefty@intel.com>
Fri, 18 May 2012 17:00:58 +0000 (10:00 -0700)
committerSean Hefty <sean.hefty@intel.com>
Fri, 18 May 2012 22:34:07 +0000 (15:34 -0700)
Older versions of acm.h do not include the resolve_data or
perf_data fields in struct acm_msg.  If we're using an older
version of the acm.h header file, use an internal definition
of struct acm_msg.

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

index fa90fcba2ac550e3ef202ce8b0d516fec4acae68..dec6064cc3e1351080b802638fc8bd15daf709d9 100644 (file)
@@ -73,6 +73,11 @@ fi
 AC_CHECK_HEADER(infiniband/acm.h, 
        AC_DEFINE([USE_IB_ACM], 1, [setting IBACM support]), [])
 
+AC_CHECK_HEADER(infiniband/acm.h,
+       AC_CHECK_MEMBER(struct acm_msg.resolve_data, [],
+               AC_DEFINE(DEFINE_ACM_MSG, 1, [adding ACM message definition]),
+                       [#include <infiniband/acm.h>]), [])
+
 AC_CACHE_CHECK(whether ld accepts --version-script, ac_cv_version_script,
     if test -n "`$LD --help < /dev/null 2>/dev/null | grep version-script`"; then
         ac_cv_version_script=yes
index 7911b4159821091def2f074e5425eec21c1587ff..bcf11dadbb1f81533b3324452880caf0259a4f66 100755 (executable)
--- a/src/acm.c
+++ b/src/acm.c
 #ifdef USE_IB_ACM
 #include <infiniband/acm.h>
 
+#if DEFINE_ACM_MSG
+typedef struct cma_acm_msg {
+       struct acm_hdr                  hdr;
+       union{
+               uint8_t                 data[ACM_MSG_DATA_LENGTH];
+               struct acm_ep_addr_data resolve_data[0];
+       };
+} cma_acm_msg_t;
+#else
+typedef struct acm_msg cma_acm_msg_t;
+#endif
+
 static pthread_mutex_t acm_lock = PTHREAD_MUTEX_INITIALIZER;
 static int sock;
 static short server_port = 6125;
@@ -237,7 +249,7 @@ err:
        rdma_freeaddrinfo(ib_rai);
 }
 
-static void ucma_ib_save_resp(struct rdma_addrinfo *rai, struct acm_msg *msg)
+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;
@@ -306,7 +318,7 @@ static void ucma_copy_rai_addr(struct acm_ep_addr_data *data, struct sockaddr *a
 
 void ucma_ib_resolve(struct rdma_addrinfo **rai, struct rdma_addrinfo *hints)
 {
-       struct acm_msg msg;
+       cma_acm_msg_t msg;
        struct acm_ep_addr_data *data;
        int ret;