4/6 - gs.c, mad.c, portid.c, register.c, resolve.c

Signed-off by: Arlin Davis <[email protected]>

diff -aur libibmad-1.2.2/src/gs.c libibmad/src/gs.c
--- libibmad-1.2.2/src/gs.c     2008-08-31 07:15:05.000000000 -0700
+++ libibmad/src/gs.c   2008-12-17 17:02:40.987157576 -0800
@@ -37,10 +37,16 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+
+#if defined(_WIN32) || defined(_WIN64)
+#include <windows.h>
+#include <winsock2.h>
+#else
 #include <unistd.h>
 #include <string.h>
 #include <pthread.h>
 #include <sys/time.h>
+#endif
 
 #include <infiniband/umad.h>
 #include "mad.h"
@@ -98,7 +104,7 @@
                             srcport);
 }
 
-uint8_t *
+MAD_EXPORT uint8_t *
 perf_classportinfo_query(void *rcvbuf, ib_portid_t *dest, int port, unsigned 
timeout)
 {
        return pma_query(rcvbuf, dest, port, timeout, CLASS_PORT_INFO);
@@ -112,7 +118,7 @@
                             IB_GSI_PORT_COUNTERS, srcport);
 }
 
-uint8_t *
+MAD_EXPORT uint8_t *
 port_performance_query(void *rcvbuf, ib_portid_t *dest, int port, unsigned 
timeout)
 {
        return pma_query(rcvbuf, dest, port, timeout, IB_GSI_PORT_COUNTERS);
@@ -175,7 +181,7 @@
                                     IB_GSI_PORT_COUNTERS, srcport);
 }
 
-uint8_t *
+MAD_EXPORT uint8_t *
 port_performance_reset(void *rcvbuf, ib_portid_t *dest, int port, unsigned 
mask,
                       unsigned timeout)
 {
@@ -190,7 +196,7 @@
                             IB_GSI_PORT_COUNTERS_EXT, srcport);
 }
 
-uint8_t *
+MAD_EXPORT uint8_t *
 port_performance_ext_query(void *rcvbuf, ib_portid_t *dest, int port, unsigned 
timeout)
 {
        return pma_query(rcvbuf, dest, port, timeout, IB_GSI_PORT_COUNTERS_EXT);
@@ -205,7 +211,7 @@
                                     IB_GSI_PORT_COUNTERS_EXT, srcport);
 }
 
-uint8_t *
+MAD_EXPORT uint8_t *
 port_performance_ext_reset(void *rcvbuf, ib_portid_t *dest, int port, unsigned 
mask,
                           unsigned timeout)
 {
@@ -220,7 +226,7 @@
                             IB_GSI_PORT_SAMPLES_CONTROL, srcport);
 }
 
-uint8_t *
+MAD_EXPORT uint8_t *
 port_samples_control_query(void *rcvbuf, ib_portid_t *dest, int port, unsigned 
timeout)
 {
        return pma_query(rcvbuf, dest, port, timeout, 
IB_GSI_PORT_SAMPLES_CONTROL);
@@ -234,7 +240,7 @@
                             IB_GSI_PORT_SAMPLES_RESULT, srcport);
 }
 
-uint8_t *
+MAD_EXPORT uint8_t *
 port_samples_result_query(void *rcvbuf, ib_portid_t *dest, int port,  unsigned 
timeout)
 {
        return pma_query(rcvbuf, dest, port, timeout, 
IB_GSI_PORT_SAMPLES_RESULT);
diff -aur libibmad-1.2.2/src/mad.c libibmad/src/mad.c
--- libibmad-1.2.2/src/mad.c    2008-01-15 11:21:52.000000000 -0800
+++ libibmad/src/mad.c  2008-12-17 17:02:41.004154992 -0800
@@ -37,19 +37,63 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+
+#if defined(_WIN32) || defined(_WIN64)
+#include <windows.h>
+#include <winsock2.h>
+#include <time.h>
+#define getpid GetCurrentProcessId
+#else
 #include <unistd.h>
 #include <string.h>
 #include <pthread.h>
 #include <sys/time.h>
+#endif
 
-#include <infiniband/common.h>
 #include <infiniband/umad.h>
 #include <mad.h>
 
 #undef DEBUG
 #define DEBUG  if (ibdebug)    IBWARN
 
-void
+MAD_EXPORT uint32_t
+mad_get_field(void *buf, int base_offs, int field)
+{
+       return _get_field(buf, base_offs, ib_mad_f + field);
+}
+
+MAD_EXPORT void
+mad_set_field(void *buf, int base_offs, int field, uint32_t val)
+{
+       _set_field(buf, base_offs, ib_mad_f + field, val);
+}
+
+/* field must be byte aligned */
+MAD_EXPORT uint64_t
+mad_get_field64(void *buf, int base_offs, int field)
+{
+       return _get_field64(buf, base_offs, ib_mad_f + field);
+}
+
+MAD_EXPORT void
+mad_set_field64(void *buf, int base_offs, int field, uint64_t val)
+{
+       _set_field64(buf, base_offs, ib_mad_f + field, val);
+}
+
+MAD_EXPORT void
+mad_set_array(void *buf, int base_offs, int field, void *val)
+{
+       _set_array(buf, base_offs, ib_mad_f + field, val);
+}
+
+MAD_EXPORT void
+mad_get_array(void *buf, int base_offs, int field, void *val)
+{
+       _get_array(buf, base_offs, ib_mad_f + field, val);
+}
+
+MAD_EXPORT void
 mad_decode_field(uint8_t *buf, int field, void *val)
 {
        ib_field_t *f = ib_mad_f + field;
@@ -69,7 +113,7 @@
        _get_array(buf, 0, f, val);
 }
 
-void
+MAD_EXPORT void
 mad_encode_field(uint8_t *buf, int field, void *val)
 {
        ib_field_t *f = ib_mad_f + field;
@@ -89,7 +133,7 @@
        _set_array(buf, 0, f, val);
 }
 
-uint64_t
+MAD_EXPORT uint64_t
 mad_trid(void)
 {
        static uint64_t base;
@@ -97,15 +141,15 @@
        uint64_t next;
 
        if (!base) {
-               srandom(time(0)*getpid());
-               base = random();
-               trid = random();
+               srand((int)time(0)*getpid());
+               base = rand();
+               trid = rand();
        }
        next = ++trid | (base << 32);
        return next;
 }
 
-void *
+MAD_EXPORT void *
 mad_encode(void *buf, ib_rpc_t *rpc, ib_dr_path_t *drpath, void *data)
 {
        int is_resp = rpc->method & IB_MAD_RESPONSE;
@@ -139,8 +183,8 @@
        mad_set_field(buf, 0, IB_MAD_ATTRMOD_F, rpc->attr.mod);
 
        /* words 7,8 */
-       mad_set_field(buf, 0, IB_MAD_MKEY_F, rpc->mkey >> 32);
-       mad_set_field(buf, 4, IB_MAD_MKEY_F, rpc->mkey & 0xffffffff);
+       mad_set_field(buf, 0, IB_MAD_MKEY_F, (uint32_t)(rpc->mkey >> 32));
+       mad_set_field(buf, 4, IB_MAD_MKEY_F, (uint32_t)(rpc->mkey & 
0xffffffff));
 
        if (rpc->mgtclass == IB_SMI_DIRECT_CLASS) {
                /* word 9 */
@@ -167,7 +211,7 @@
        return (uint8_t *)buf + IB_MAD_SIZE;
 }
 
-int
+MAD_EXPORT int
 mad_build_pkt(void *umad, ib_rpc_t *rpc, ib_portid_t *dport,
              ib_rmpp_hdr_t *rmpp, void *data)
 {
@@ -211,5 +255,5 @@
                mad_set_field(mad, 0, IB_SA_RMPP_D2_F, rmpp->d2.u);
        }
 
-       return p - mad;
+       return ((int)(p - mad));
 }
diff -aur libibmad-1.2.2/src/portid.c libibmad/src/portid.c
--- libibmad-1.2.2/src/portid.c 2008-10-19 11:34:41.000000000 -0700
+++ libibmad/src/portid.c       2008-12-17 17:02:41.022152256 -0800
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2004-2008 Voltaire Inc.  All rights reserved.
+ * Copyright (c) 2008 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
@@ -37,20 +38,72 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+
+#if defined(_WIN32) || defined(_WIN64)
+#include <windows.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#define snprintf _snprintf
+#else
 #include <unistd.h>
 #include <pthread.h>
 #include <sys/time.h>
 #include <string.h>
 #include <inttypes.h>
 #include <arpa/inet.h>
+#endif
 
 #include <mad.h>
-#include <infiniband/common.h>
 
 #undef DEBUG
 #define DEBUG  if (ibdebug)    IBWARN
 
-int
+#if defined(_WIN32) || defined(_WIN64)  
+const char * _inet_ntop(int family, const void *addr, char *dst, size_t len)
+{
+       if (family == AF_INET)
+       {
+               struct sockaddr_in in;
+               in.sin_family = AF_INET;
+               memcpy(&in.sin_addr, addr, 4);
+               if (getnameinfo((struct sockaddr *)&in,
+                               (socklen_t) (sizeof(struct sockaddr_in)),
+                               dst, len, NULL, 0, NI_NUMERICHOST))
+                       return NULL;
+       }
+       else if (family == AF_INET6)
+       {
+               struct sockaddr_in6 in6;
+               memset(&in6, 0, sizeof in6);
+               in6.sin6_family = AF_INET6;
+               memcpy(&in6.sin6_addr, addr, sizeof(struct in_addr6));
+
+               /* if no ipv6 support return simple IPv6 format rule:
+                * A series of "0's in a 16bit block can be represented by "0" 
+                */
+               if (getnameinfo((struct sockaddr *)&in6, (socklen_t) (sizeof 
in6),
+                                dst, len, NULL, 0, NI_NUMERICHOST)) 
+               {
+                       char tmp[sizeof 
"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"];
+                       int i, n=0;
+                                       
+                       if (len < sizeof(tmp))
+                               return NULL;
+
+                       for (i = 0; i < 8; i++) 
+                               n += sprintf(tmp+n, "%s%x", 
+                                            i?":":"",
+                                            ntohs(((unsigned short*)addr)[i]));
+                       tmp[n]='\0';
+                       strcpy(dst, tmp);
+               }
+       }
+       return dst;
+}
+#define inet_ntop _inet_ntop
+#endif
+
+MAD_EXPORT int
 portid2portnum(ib_portid_t *portid)
 {
        if (portid->lid > 0)
@@ -62,7 +115,7 @@
        return portid->drpath.p[(portid->drpath.cnt-1)];
 }
 
-char *
+MAD_EXPORT char *
 portid2str(ib_portid_t *portid)
 {
        static char buf[1024] = "local";
@@ -86,7 +139,7 @@
        return buf;
 }
 
-int
+MAD_EXPORT int
 str2drpath(ib_dr_path_t *path, char *routepath, int drslid, int drdlid)
 {
        char *s, *str = routepath;
@@ -97,7 +150,7 @@
        while (str && *str) {
                if ((s = strchr(str, ',')))
                        *s = 0;
-               path->p[++path->cnt] = atoi(str);
+               path->p[++path->cnt] = (uint8_t)atoi(str);
                if (!s)
                        break;
                str = s+1;
@@ -109,17 +162,17 @@
        return path->cnt;
 }
 
-char *
+MAD_EXPORT char *
 drpath2str(ib_dr_path_t *path, char *dstr, size_t dstr_size)
 {
        int i = 0;
        int rc = snprintf(dstr, dstr_size, "slid %d; dlid %d; %d",
                path->drslid, path->drdlid, path->p[0]);
-       if (rc >= dstr_size)
+       if (rc >= (int) dstr_size)
                return dstr;
        for (i = 1; i <= path->cnt; i++) {
                rc += snprintf(dstr+rc, dstr_size-rc, ",%d", path->p[i]);
-               if (rc >= dstr_size)
+               if (rc >= (int) dstr_size)
                        break;
        }
        return (dstr);
diff -aur libibmad-1.2.2/src/register.c libibmad/src/register.c
--- libibmad-1.2.2/src/register.c       2008-08-31 07:15:05.000000000 -0700
+++ libibmad/src/register.c     2008-12-17 17:02:41.040149520 -0800
@@ -37,11 +37,16 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+
+#if defined(_WIN32) || defined(_WIN64)
+#include <windows.h>
+#else
 #include <unistd.h>
 #include <pthread.h>
 #include <sys/time.h>
 #include <string.h>
 #include <errno.h>
+#endif
 
 #include <infiniband/umad.h>
 #include "mad.h"
@@ -104,7 +109,7 @@
        return 0;
 }
 
-int
+MAD_EXPORT int
 mad_class_agent(int mgmt)
 {
        if (mgmt < 1 || mgmt > MAX_CLASS)
@@ -112,7 +117,7 @@
        return class_agent[mgmt];
 }
 
-int
+MAD_EXPORT int
 mad_agent_class(int agent)
 {
        if (agent < 1 || agent > MAX_AGENTS)
@@ -120,7 +125,7 @@
        return agent_class[agent];
 }
 
-int
+MAD_EXPORT int
 mad_register_port_client(int port_id, int mgmt, uint8_t rmpp_version)
 {
        int vers, agent;
@@ -143,7 +148,7 @@
        return agent;
 }
 
-int
+MAD_EXPORT int
 mad_register_client(int mgmt, uint8_t rmpp_version)
 {
        int agent;
@@ -155,7 +160,7 @@
        return register_agent(agent, mgmt);
 }
 
-int
+MAD_EXPORT int
 mad_register_server(int mgmt, uint8_t rmpp_version,
                    long method_mask[], uint32_t class_oui)
 {
diff -aur libibmad-1.2.2/src/resolve.c libibmad/src/resolve.c
--- libibmad-1.2.2/src/resolve.c        2008-08-31 07:15:05.000000000 -0700
+++ libibmad/src/resolve.c      2008-12-17 17:02:41.058146784 -0800
@@ -37,12 +37,17 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+
+#if defined(_WIN32) || defined(_WIN64)
+#include <windows.h>
+#define strtoull _strtoui64
+#else
 #include <unistd.h>
 #include <pthread.h>
 #include <string.h>
 #include <sys/time.h>
+#endif
 
-#include <infiniband/common.h>
 #include <infiniband/umad.h>
 #include <mad.h>
 
@@ -67,7 +72,7 @@
        return ib_portid_set(sm_id, lid, 0, 0);
 }
 
-int
+MAD_EXPORT int
 ib_resolve_smlid(ib_portid_t *sm_id, int timeout)
 {
        return ib_resolve_smlid_via(sm_id, timeout, NULL);
@@ -95,6 +100,12 @@
        return 0;
 }
 
+MAD_EXPORT int
+ib_resolve_guid(ib_portid_t *portid, uint64_t *guid, ib_portid_t *sm_id, int 
timeout)
+{
+       return ib_resolve_guid_via(portid, guid, sm_id, timeout, NULL);
+}
+
 int
 ib_resolve_portid_str_via(ib_portid_t *portid, char *addr_str, int dest_type, 
ib_portid_t *sm_id, const void *srcport)
 {
@@ -144,7 +155,7 @@
        return -1;
 }
 
-int
+MAD_EXPORT int
 ib_resolve_portid_str(ib_portid_t *portid, char *addr_str, int dest_type, 
ib_portid_t *sm_id)
 {
        return ib_resolve_portid_str_via(portid, addr_str, dest_type,
@@ -179,7 +190,7 @@
        return 0;
 }
 
-int
+MAD_EXPORT int
 ib_resolve_self(ib_portid_t *portid, int *portnum, ibmad_gid_t *gid)
 {
        return ib_resolve_self_via (portid, portnum, gid, NULL);
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to