Skip to contentSkip to conversation

libibverbs: Update examples for IBoE

PATCH New Eli Cohen 1 participant 1 message Feb 18, 2010 InfiniBand

lore
Share & tools
lore

Eli Cohen

author
#0 lore raw

PATCH v8 4/4 libibverbs: Update examples for IBoE

Since IBoE requires usage of GRH, update ibv_*_pinpong examples to accept GIDs. GIDs are given as an index to the local port's table and are exchanged between the client and the server through the socket connection. The examples are also modified to pass the gid index to the code that creates the address vector as a preparation to using gids other the the on in index 0.

---
 examples/devinfo.c      |   14 +++++++
 examples/pingpong.c     |   31 ++++++++++++++++
 examples/pingpong.h     |    4 ++
 examples/rc_pingpong.c  |   91 ++++++++++++++++++++++++++++++++++------------
 examples/srq_pingpong.c |   84 ++++++++++++++++++++++++++++++++-----------
 examples/uc_pingpong.c  |   82 +++++++++++++++++++++++++++++++-----------
 examples/ud_pingpong.c  |   81 ++++++++++++++++++++++++++++++------------
 7 files changed, 297 insertions(+), 90 deletions(-)
examples/devinfo.c +14 -0
index 84f95c7..393ec04 100644
@@ -184,6 +184,19 @@ static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tb
 	return rc;
 }
 
+static const char *link_layer_str(uint8_t link_layer)
+{
+	switch (link_layer) {
+	case IBV_LINK_LAYER_UNSPECIFIED:
+	case IBV_LINK_LAYER_INFINIBAND:
+		return "IB";
+	case IBV_LINK_LAYER_ETHERNET:
+		return "Ethernet";
+	default:
+		return "Unknown";
+	}
+}
+
 static int print_hca_cap(struct ibv_device *ib_dev, uint8_t ib_port)
 {
 	struct ibv_context *ctx;
@@ -284,6 +297,7 @@ static int print_hca_cap(struct ibv_device *ib_dev, uint8_t ib_port)
 		printf("\t\t\tsm_lid:\t\t\t%d\n", port_attr.sm_lid);
 		printf("\t\t\tport_lid:\t\t%d\n", port_attr.lid);
 		printf("\t\t\tport_lmc:\t\t0x%02x\n", port_attr.lmc);
+		printf("\t\t\tlink_layer:\t\t%s\n", link_layer_str(port_attr.link_layer));
 
 		if (verbose) {
 			printf("\t\t\tmax_msg_sz:\t\t0x%x\n", port_attr.max_msg_sz);
examples/pingpong.c +31 -0
index b916f59..806f446 100644
@@ -31,6 +31,10 @@
  */
 
 #include "pingpong.h"
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
 
 enum ibv_mtu pp_mtu_to_enum(int mtu)
 {
@@ -53,3 +57,30 @@ uint16_t pp_get_local_lid(struct ibv_context *context, int port)
 
 	return attr.lid;
 }
+
+int pp_get_port_info(struct ibv_context *context, int port,
+		     struct ibv_port_attr *attr)
+{
+	return ibv_query_port(context, port, attr);
+}
+
+void wire_gid_to_gid(const char *wgid, union ibv_gid *gid)
+{
+	char tmp[9];
+	uint32_t v32;
+	int i;
+
+	for (tmp[8] = 0, i = 0; i < 4; ++i) {
+		memcpy(tmp, wgid + i * 8, 8);
+		sscanf(tmp, "%x", &v32);
+		*(uint32_t *)(&gid->raw[i * 4]) = ntohl(v32);
+	}
+}
+
+void gid_to_wire_gid(const union ibv_gid *gid, char wgid[])
+{
+	int i;
+
+	for (i = 0; i < 4; ++i)
+		sprintf(&wgid[i * 8], "%08x", htonl(*(uint32_t *)(gid->raw + i * 4)));
+}
examples/pingpong.h +4 -0
index 71d7c3f..9cdc03e 100644
@@ -37,5 +37,9 @@
 
 enum ibv_mtu pp_mtu_to_enum(int mtu);
 uint16_t pp_get_local_lid(struct ibv_context *context, int port);
+int pp_get_port_info(struct ibv_context *context, int port,
+		     struct ibv_port_attr *attr);
+void wire_gid_to_gid(const char *wgid, union ibv_gid *gid);
+void gid_to_wire_gid(const union ibv_gid *gid, char wgid[]);
 
 #endif /* IBV_PINGPONG_H */
examples/rc_pingpong.c +67 -24

236 lines not on this page · raw message

examples/srq_pingpong.c +62 -22

217 lines not on this page · raw message

examples/uc_pingpong.c +61 -21

206 lines not on this page · raw message

examples/ud_pingpong.c +58 -23

206 lines not on this page · raw message

Signature · 6 lines
1.7.0

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html