[ofa-general] PATCH[4/6] Windows port of libibmad - gs.c, mad.c, portid.c, register.c, resolve.c
Davis, Arlin R
arlin.r.davis at intel.com
Thu Dec 18 15:38:30 PST 2008
4/6 - gs.c, mad.c, portid.c, register.c, resolve.c
Signed-off by: Arlin Davis <ardavis at ichips.intel.com>
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);
More information about the general
mailing list