Date: Mon, 3 Jan 2011 06:35:40 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r216914 - in projects/ofed/head/contrib/ofed: libibverbs libibverbs/examples libibverbs/fixes libibverbs/include/infiniband libibverbs/man libibverbs/src libmlx4 libmlx4/fixes libmlx4/s... Message-ID: <201101030635.p036Ze56077404@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jeff Date: Mon Jan 3 06:35:40 2011 New Revision: 216914 URL: http://svn.freebsd.org/changeset/base/216914 Log: - Merge in updated verbs userland and management from base. Sponsored by: Isilon Systems, iX Systems, and Panasas. Added: projects/ofed/head/contrib/ofed/libibverbs/man/ibv_create_xrc_rcv_qp.3 - copied unchanged from r216913, projects/ofed/base/contrib/ofed/libibverbs/man/ibv_create_xrc_rcv_qp.3 projects/ofed/head/contrib/ofed/libibverbs/man/ibv_modify_xrc_rcv_qp.3 - copied unchanged from r216913, projects/ofed/base/contrib/ofed/libibverbs/man/ibv_modify_xrc_rcv_qp.3 projects/ofed/head/contrib/ofed/libibverbs/man/ibv_open_xrc_domain.3 - copied unchanged from r216913, projects/ofed/base/contrib/ofed/libibverbs/man/ibv_open_xrc_domain.3 projects/ofed/head/contrib/ofed/libibverbs/man/ibv_query_xrc_rcv_qp.3 - copied unchanged from r216913, projects/ofed/base/contrib/ofed/libibverbs/man/ibv_query_xrc_rcv_qp.3 projects/ofed/head/contrib/ofed/libibverbs/man/ibv_reg_xrc_rcv_qp.3 - copied unchanged from r216913, projects/ofed/base/contrib/ofed/libibverbs/man/ibv_reg_xrc_rcv_qp.3 projects/ofed/head/contrib/ofed/libibverbs/man/verbs.7 - copied unchanged from r216913, projects/ofed/base/contrib/ofed/libibverbs/man/verbs.7 projects/ofed/head/contrib/ofed/libmlx4/fixes/fix_inline_size.patch - copied unchanged from r216913, projects/ofed/base/contrib/ofed/libmlx4/fixes/fix_inline_size.patch Modified: projects/ofed/head/contrib/ofed/libibverbs/Makefile.am projects/ofed/head/contrib/ofed/libibverbs/configure.in projects/ofed/head/contrib/ofed/libibverbs/examples/asyncwatch.c projects/ofed/head/contrib/ofed/libibverbs/examples/devinfo.c projects/ofed/head/contrib/ofed/libibverbs/examples/pingpong.c projects/ofed/head/contrib/ofed/libibverbs/examples/pingpong.h projects/ofed/head/contrib/ofed/libibverbs/examples/rc_pingpong.c projects/ofed/head/contrib/ofed/libibverbs/examples/srq_pingpong.c projects/ofed/head/contrib/ofed/libibverbs/examples/uc_pingpong.c projects/ofed/head/contrib/ofed/libibverbs/examples/ud_pingpong.c projects/ofed/head/contrib/ofed/libibverbs/fixes/qpt_raw_eth.patch projects/ofed/head/contrib/ofed/libibverbs/fixes/series projects/ofed/head/contrib/ofed/libibverbs/include/infiniband/driver.h projects/ofed/head/contrib/ofed/libibverbs/include/infiniband/kern-abi.h projects/ofed/head/contrib/ofed/libibverbs/include/infiniband/verbs.h projects/ofed/head/contrib/ofed/libibverbs/libibverbs.spec.in projects/ofed/head/contrib/ofed/libibverbs/man/ibv_create_qp.3 projects/ofed/head/contrib/ofed/libibverbs/man/ibv_create_srq.3 projects/ofed/head/contrib/ofed/libibverbs/man/ibv_post_send.3 projects/ofed/head/contrib/ofed/libibverbs/man/ibv_query_port.3 projects/ofed/head/contrib/ofed/libibverbs/src/cmd.c projects/ofed/head/contrib/ofed/libibverbs/src/device.c projects/ofed/head/contrib/ofed/libibverbs/src/libibverbs.map projects/ofed/head/contrib/ofed/libibverbs/src/verbs.c projects/ofed/head/contrib/ofed/libmlx4/configure.in projects/ofed/head/contrib/ofed/libmlx4/fixes/rocee_add_support.patch projects/ofed/head/contrib/ofed/libmlx4/fixes/series projects/ofed/head/contrib/ofed/libmlx4/src/cq.c projects/ofed/head/contrib/ofed/libmlx4/src/mlx4-abi.h projects/ofed/head/contrib/ofed/libmlx4/src/mlx4.c projects/ofed/head/contrib/ofed/libmlx4/src/mlx4.h projects/ofed/head/contrib/ofed/libmlx4/src/qp.c projects/ofed/head/contrib/ofed/libmlx4/src/srq.c projects/ofed/head/contrib/ofed/libmlx4/src/verbs.c projects/ofed/head/contrib/ofed/libmlx4/src/wqe.h projects/ofed/head/contrib/ofed/management/infiniband-diags/configure.in projects/ofed/head/contrib/ofed/management/infiniband-diags/man/saquery.8 projects/ofed/head/contrib/ofed/management/infiniband-diags/src/ibping.c projects/ofed/head/contrib/ofed/management/infiniband-diags/src/saquery.c projects/ofed/head/contrib/ofed/management/infiniband-diags/src/sminfo.c projects/ofed/head/contrib/ofed/management/infiniband-diags/src/smpquery.c projects/ofed/head/contrib/ofed/management/libibcommon/configure.in projects/ofed/head/contrib/ofed/management/libibmad/configure.in projects/ofed/head/contrib/ofed/management/libibumad/configure.in projects/ofed/head/contrib/ofed/management/opensm/configure.in projects/ofed/head/contrib/ofed/management/opensm/include/opensm/osm_pkey.h projects/ofed/head/contrib/ofed/management/opensm/opensm/Makefile.am projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_console.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_node_info_rcv.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_pkey.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_pkey_mgr.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_port_info_rcv.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_sa_mcmember_record.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_sa_pkey_record.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_sa_slvl_record.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_sa_vlarb_record.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_sm.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_state_mgr.c projects/ofed/head/contrib/ofed/management/opensm/opensm/osm_ucast_mgr.c Directory Properties: projects/ofed/head/contrib/ofed/ (props changed) Modified: projects/ofed/head/contrib/ofed/libibverbs/Makefile.am ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/Makefile.am Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/Makefile.am Mon Jan 3 06:35:40 2011 (r216914) @@ -44,16 +44,19 @@ man_MANS = man/ibv_asyncwatch.1 man/ibv_ man/ibv_srq_pingpong.1 man/ibv_alloc_pd.3 man/ibv_attach_mcast.3 \ man/ibv_create_ah.3 man/ibv_create_ah_from_wc.3 \ man/ibv_create_comp_channel.3 man/ibv_create_cq.3 \ - man/ibv_create_qp.3 man/ibv_create_srq.3 man/ibv_event_type_str.3 \ + man/ibv_create_qp.3 man/ibv_create_srq.3 \ + man/ibv_create_xrc_rcv_qp.3 man/ibv_event_type_str.3 \ man/ibv_fork_init.3 man/ibv_get_async_event.3 \ man/ibv_get_cq_event.3 man/ibv_get_device_guid.3 \ man/ibv_get_device_list.3 man/ibv_get_device_name.3 \ - man/ibv_modify_qp.3 man/ibv_modify_srq.3 man/ibv_open_device.3 \ + man/ibv_modify_qp.3 man/ibv_modify_srq.3 man/ibv_modify_xrc_rcv_qp.3 \ + man/ibv_open_device.3 man/ibv_open_xrc_domain.3 \ man/ibv_poll_cq.3 man/ibv_post_recv.3 man/ibv_post_send.3 \ man/ibv_post_srq_recv.3 man/ibv_query_device.3 man/ibv_query_gid.3 \ man/ibv_query_pkey.3 man/ibv_query_port.3 man/ibv_query_qp.3 \ - man/ibv_query_srq.3 man/ibv_rate_to_mult.3 man/ibv_reg_mr.3 \ - man/ibv_req_notify_cq.3 man/ibv_resize_cq.3 + man/ibv_query_srq.3 man/ibv_query_xrc_rcv_qp.3 \ + man/ibv_rate_to_mult.3 man/ibv_reg_mr.3 man/ibv_reg_xrc_rcv_qp.3 \ + man/ibv_req_notify_cq.3 man/ibv_resize_cq.3 man/verbs.7 DEBIAN = debian/changelog debian/compat debian/control debian/copyright \ debian/ibverbs-utils.install debian/libibverbs1.install \ @@ -74,6 +77,8 @@ install-data-hook: $(RM) ibv_ack_async_event.3 && \ $(RM) ibv_ack_cq_events.3 && \ $(RM) ibv_close_device.3 && \ + $(RM) ibv_close_xrc_domain.3 && \ + $(RM) ibv_create_xrc_srq.3 && \ $(RM) ibv_dealloc_pd.3 && \ $(RM) ibv_dereg_mr.3 && \ $(RM) ibv_destroy_ah.3 && \ @@ -84,12 +89,15 @@ install-data-hook: $(RM) ibv_detach_mcast.3 && \ $(RM) ibv_free_device_list.3 && \ $(RM) ibv_init_ah_from_wc.3 && \ + $(RM) ibv_unreg_xrc_rcv_qp.3 && \ $(RM) mult_to_ibv_rate.3 && \ $(RM) ibv_node_type_str.3 && \ $(RM) ibv_port_state_str.3 && \ $(LN_S) ibv_get_async_event.3 ibv_ack_async_event.3 && \ $(LN_S) ibv_get_cq_event.3 ibv_ack_cq_events.3 && \ $(LN_S) ibv_open_device.3 ibv_close_device.3 && \ + $(LN_S) ibv_open_xrc_domain.3 ibv_close_xrc_domain.3 && \ + $(LN_S) ibv_create_srq.3 ibv_create_xrc_srq.3 && \ $(LN_S) ibv_alloc_pd.3 ibv_dealloc_pd.3 && \ $(LN_S) ibv_reg_mr.3 ibv_dereg_mr.3 && \ $(LN_S) ibv_create_ah.3 ibv_destroy_ah.3 && \ @@ -100,6 +108,7 @@ install-data-hook: $(LN_S) ibv_attach_mcast.3 ibv_detach_mcast.3 && \ $(LN_S) ibv_get_device_list.3 ibv_free_device_list.3 && \ $(LN_S) ibv_create_ah_from_wc.3 ibv_init_ah_from_wc.3 && \ + $(LN_S) ibv_reg_xrc_rcv_qp.3 ibv_unreg_xrc_rcv_qp.3 && \ $(LN_S) ibv_rate_to_mult.3 mult_to_ibv_rate.3 && \ $(LN_S) ibv_event_type_str.3 ibv_node_type_str.3 && \ $(LN_S) ibv_event_type_str.3 ibv_port_state_str.3 Modified: projects/ofed/head/contrib/ofed/libibverbs/configure.in ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/configure.in Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/configure.in Mon Jan 3 06:35:40 2011 (r216914) @@ -13,6 +13,7 @@ AC_PROG_CC AC_GNU_SOURCE AC_PROG_LN_S +AC_PROG_LIBTOOL LT_INIT AC_ARG_WITH([valgrind], Modified: projects/ofed/head/contrib/ofed/libibverbs/examples/asyncwatch.c ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/examples/asyncwatch.c Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/examples/asyncwatch.c Mon Jan 3 06:35:40 2011 (r216914) @@ -57,6 +57,8 @@ static const char *event_name_str(enum i return "IBV_EVENT_SM_CHANGE"; case IBV_EVENT_CLIENT_REREGISTER: return "IBV_EVENT_CLIENT_REREGISTER"; + case IBV_EVENT_GID_CHANGE: + return "IBV_EVENT_GID_CHANGE"; case IBV_EVENT_CQ_ERR: case IBV_EVENT_QP_FATAL: Modified: projects/ofed/head/contrib/ofed/libibverbs/examples/devinfo.c ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/examples/devinfo.c Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/examples/devinfo.c Mon Jan 3 06:35:40 2011 (r216914) @@ -184,6 +184,19 @@ static int print_all_port_gids(struct ib 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_devi 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); Modified: projects/ofed/head/contrib/ofed/libibverbs/examples/pingpong.c ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/examples/pingpong.c Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/examples/pingpong.c Mon Jan 3 06:35:40 2011 (r216914) @@ -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_con 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))); +} Modified: projects/ofed/head/contrib/ofed/libibverbs/examples/pingpong.h ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/examples/pingpong.h Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/examples/pingpong.h Mon Jan 3 06:35:40 2011 (r216914) @@ -39,5 +39,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 */ Modified: projects/ofed/head/contrib/ofed/libibverbs/examples/rc_pingpong.c ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/examples/rc_pingpong.c Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/examples/rc_pingpong.c Mon Jan 3 06:35:40 2011 (r216914) @@ -67,17 +67,19 @@ struct pingpong_context { int size; int rx_depth; int pending; + struct ibv_port_attr portinfo; }; struct pingpong_dest { int lid; int qpn; int psn; + union ibv_gid gid; }; static int pp_connect_ctx(struct pingpong_context *ctx, int port, int my_psn, enum ibv_mtu mtu, int sl, - struct pingpong_dest *dest) + struct pingpong_dest *dest, int sgid_idx) { struct ibv_qp_attr attr = { .qp_state = IBV_QPS_RTR, @@ -94,6 +96,13 @@ static int pp_connect_ctx(struct pingpon .port_num = port } }; + + if (dest->gid.global.interface_id) { + attr.ah_attr.is_global = 1; + attr.ah_attr.grh.hop_limit = 1; + attr.ah_attr.grh.dgid = dest->gid; + attr.ah_attr.grh.sgid_index = sgid_idx; + } if (ibv_modify_qp(ctx->qp, &attr, IBV_QP_STATE | IBV_QP_AV | @@ -135,10 +144,11 @@ static struct pingpong_dest *pp_client_e .ai_socktype = SOCK_STREAM }; char *service; - char msg[sizeof "0000:000000:000000"]; + char msg[sizeof "0000:000000:000000:00000000000000000000000000000000"]; int n; int sockfd = -1; struct pingpong_dest *rem_dest = NULL; + char gid[33]; if (asprintf(&service, "%d", port) < 0) return NULL; @@ -169,7 +179,8 @@ static struct pingpong_dest *pp_client_e return NULL; } - sprintf(msg, "%04x:%06x:%06x", my_dest->lid, my_dest->qpn, my_dest->psn); + gid_to_wire_gid(&my_dest->gid, gid); + sprintf(msg, "%04x:%06x:%06x:%s", my_dest->lid, my_dest->qpn, my_dest->psn, gid); if (write(sockfd, msg, sizeof msg) != sizeof msg) { fprintf(stderr, "Couldn't send local address\n"); goto out; @@ -187,7 +198,8 @@ static struct pingpong_dest *pp_client_e if (!rem_dest) goto out; - sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); + sscanf(msg, "%x:%x:%x:%s", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn, gid); + wire_gid_to_gid(gid, &rem_dest->gid); out: close(sockfd); @@ -197,7 +209,8 @@ out: static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, int ib_port, enum ibv_mtu mtu, int port, int sl, - const struct pingpong_dest *my_dest) + const struct pingpong_dest *my_dest, + int sgid_idx) { struct addrinfo *res, *t; struct addrinfo hints = { @@ -206,10 +219,11 @@ static struct pingpong_dest *pp_server_e .ai_socktype = SOCK_STREAM }; char *service; - char msg[sizeof "0000:000000:000000"]; + char msg[sizeof "0000:000000:000000:00000000000000000000000000000000"]; int n; int sockfd = -1, connfd; struct pingpong_dest *rem_dest = NULL; + char gid[33]; if (asprintf(&service, "%d", port) < 0) return NULL; @@ -263,16 +277,19 @@ static struct pingpong_dest *pp_server_e if (!rem_dest) goto out; - sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); + sscanf(msg, "%x:%x:%x:%s", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn, gid); + wire_gid_to_gid(gid, &rem_dest->gid); - if (pp_connect_ctx(ctx, ib_port, my_dest->psn, mtu, sl, rem_dest)) { + if (pp_connect_ctx(ctx, ib_port, my_dest->psn, mtu, sl, rem_dest, sgid_idx)) { fprintf(stderr, "Couldn't connect to remote QP\n"); free(rem_dest); rem_dest = NULL; goto out; } - sprintf(msg, "%04x:%06x:%06x", my_dest->lid, my_dest->qpn, my_dest->psn); + + gid_to_wire_gid(&my_dest->gid, gid); + sprintf(msg, "%04x:%06x:%06x:%s", my_dest->lid, my_dest->qpn, my_dest->psn, gid); if (write(connfd, msg, sizeof msg) != sizeof msg) { fprintf(stderr, "Couldn't send local address\n"); free(rem_dest); @@ -291,11 +308,11 @@ out: static struct pingpong_context *pp_init_ctx(struct ibv_device *ib_dev, int size, int rx_depth, int port, - int use_event) + int use_event, int is_server) { struct pingpong_context *ctx; - ctx = malloc(sizeof *ctx); + ctx = calloc(1, sizeof *ctx); if (!ctx) return NULL; @@ -308,7 +325,7 @@ static struct pingpong_context *pp_init_ return NULL; } - memset(ctx->buf, 0, size); + memset(ctx->buf, 0x7b + is_server, size); ctx->context = ibv_open_device(ib_dev); if (!ctx->context) { @@ -483,6 +500,7 @@ static void usage(const char *argv0) printf(" -n, --iters=<iters> number of exchanges (default 1000)\n"); printf(" -l, --sl=<sl> service level value\n"); printf(" -e, --events sleep on CQ events (default poll)\n"); + printf(" -g, --gid-idx=<gid index> local port gid index\n"); } int main(int argc, char *argv[]) @@ -506,6 +524,8 @@ int main(int argc, char *argv[]) int rcnt, scnt; int num_cq_events = 0; int sl = 0; + int gidx = -1; + char gid[33]; srand48(getpid() * time(NULL)); @@ -522,10 +542,11 @@ int main(int argc, char *argv[]) { .name = "iters", .has_arg = 1, .val = 'n' }, { .name = "sl", .has_arg = 1, .val = 'l' }, { .name = "events", .has_arg = 0, .val = 'e' }, + { .name = "gid-idx", .has_arg = 1, .val = 'g' }, { 0 } }; - c = getopt_long(argc, argv, "p:d:i:s:m:r:n:l:e", long_options, NULL); + c = getopt_long(argc, argv, "p:d:i:s:m:r:n:l:eg:", long_options, NULL); if (c == -1) break; @@ -578,6 +599,10 @@ int main(int argc, char *argv[]) ++use_event; break; + case 'g': + gidx = strtol(optarg, NULL, 0); + break; + default: usage(argv[0]); return 1; @@ -617,7 +642,7 @@ int main(int argc, char *argv[]) } } - ctx = pp_init_ctx(ib_dev, size, rx_depth, ib_port, use_event); + ctx = pp_init_ctx(ib_dev, size, rx_depth, ib_port, use_event, !servername); if (!ctx) return 1; @@ -633,30 +658,47 @@ int main(int argc, char *argv[]) return 1; } - my_dest.lid = pp_get_local_lid(ctx->context, ib_port); - my_dest.qpn = ctx->qp->qp_num; - my_dest.psn = lrand48() & 0xffffff; - if (!my_dest.lid) { + + if (pp_get_port_info(ctx->context, ib_port, &ctx->portinfo)) { + fprintf(stderr, "Couldn't get port info\n"); + return 1; + } + + my_dest.lid = ctx->portinfo.lid; + if (ctx->portinfo.link_layer == IBV_LINK_LAYER_INFINIBAND && !my_dest.lid) { fprintf(stderr, "Couldn't get local LID\n"); return 1; } - printf(" local address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x\n", - my_dest.lid, my_dest.qpn, my_dest.psn); + if (gidx >= 0) { + if (ibv_query_gid(ctx->context, ib_port, gidx, &my_dest.gid)) { + fprintf(stderr, "Could not get local gid for gid index %d\n", gidx); + return 1; + } + } else + memset(&my_dest.gid, 0, sizeof my_dest.gid); + + my_dest.qpn = ctx->qp->qp_num; + my_dest.psn = lrand48() & 0xffffff; + inet_ntop(AF_INET6, &my_dest.gid, gid, sizeof gid); + printf(" local address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x, GID %s\n", + my_dest.lid, my_dest.qpn, my_dest.psn, gid); + if (servername) rem_dest = pp_client_exch_dest(servername, port, &my_dest); else - rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, &my_dest); + rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, &my_dest, gidx); if (!rem_dest) return 1; - printf(" remote address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x\n", - rem_dest->lid, rem_dest->qpn, rem_dest->psn); + inet_ntop(AF_INET6, &rem_dest->gid, gid, sizeof gid); + printf(" remote address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x, GID %s\n", + rem_dest->lid, rem_dest->qpn, rem_dest->psn, gid); if (servername) - if (pp_connect_ctx(ctx, ib_port, my_dest.psn, mtu, sl, rem_dest)) + if (pp_connect_ctx(ctx, ib_port, my_dest.psn, mtu, sl, rem_dest, gidx)) return 1; ctx->pending = PINGPONG_RECV_WRID; @@ -708,6 +750,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "poll CQ failed %d\n", ne); return 1; } + } while (!use_event && ne < 1); for (i = 0; i < ne; ++i) { Modified: projects/ofed/head/contrib/ofed/libibverbs/examples/srq_pingpong.c ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/examples/srq_pingpong.c Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/examples/srq_pingpong.c Mon Jan 3 06:35:40 2011 (r216914) @@ -70,17 +70,19 @@ struct pingpong_context { int num_qp; int rx_depth; int pending[MAX_QP]; + struct ibv_port_attr portinfo; }; struct pingpong_dest { int lid; int qpn; int psn; + union ibv_gid gid; }; static int pp_connect_ctx(struct pingpong_context *ctx, int port, enum ibv_mtu mtu, int sl, const struct pingpong_dest *my_dest, - const struct pingpong_dest *dest) + const struct pingpong_dest *dest, int sgid_idx) { int i; @@ -100,6 +102,13 @@ static int pp_connect_ctx(struct pingpon .port_num = port } }; + + if (dest->gid.global.interface_id) { + attr.ah_attr.is_global = 1; + attr.ah_attr.grh.hop_limit = 1; + attr.ah_attr.grh.dgid = dest->gid; + attr.ah_attr.grh.sgid_index = sgid_idx; + } if (ibv_modify_qp(ctx->qp[i], &attr, IBV_QP_STATE | IBV_QP_AV | @@ -142,12 +151,13 @@ static struct pingpong_dest *pp_client_e .ai_socktype = SOCK_STREAM }; char *service; - char msg[sizeof "0000:000000:000000"]; + char msg[sizeof "0000:000000:000000:00000000000000000000000000000000"]; int n; int r; int i; int sockfd = -1; struct pingpong_dest *rem_dest = NULL; + char gid[33]; if (asprintf(&service, "%d", port) < 0) return NULL; @@ -179,7 +189,8 @@ static struct pingpong_dest *pp_client_e } for (i = 0; i < MAX_QP; ++i) { - sprintf(msg, "%04x:%06x:%06x", my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn); + gid_to_wire_gid(&my_dest[i].gid, gid); + sprintf(msg, "%04x:%06x:%06x:%s", my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn, gid); if (write(sockfd, msg, sizeof msg) != sizeof msg) { fprintf(stderr, "Couldn't send local address\n"); goto out; @@ -203,8 +214,9 @@ static struct pingpong_dest *pp_client_e n += r; } - sscanf(msg, "%x:%x:%x", - &rem_dest[i].lid, &rem_dest[i].qpn, &rem_dest[i].psn); + sscanf(msg, "%x:%x:%x:%s", + &rem_dest[i].lid, &rem_dest[i].qpn, &rem_dest[i].psn, gid); + wire_gid_to_gid(gid, &rem_dest[i].gid); } write(sockfd, "done", sizeof "done"); @@ -217,7 +229,8 @@ out: static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, int ib_port, enum ibv_mtu mtu, int port, int sl, - const struct pingpong_dest *my_dest) + const struct pingpong_dest *my_dest, + int sgid_idx) { struct addrinfo *res, *t; struct addrinfo hints = { @@ -226,12 +239,13 @@ static struct pingpong_dest *pp_server_e .ai_socktype = SOCK_STREAM }; char *service; - char msg[sizeof "0000:000000:000000"]; + char msg[sizeof "0000:000000:000000:00000000000000000000000000000000"]; int n; int r; int i; int sockfd = -1, connfd; struct pingpong_dest *rem_dest = NULL; + char gid[33]; if (asprintf(&service, "%d", port) < 0) return NULL; @@ -291,11 +305,12 @@ static struct pingpong_dest *pp_server_e n += r; } - sscanf(msg, "%x:%x:%x", - &rem_dest[i].lid, &rem_dest[i].qpn, &rem_dest[i].psn); + sscanf(msg, "%x:%x:%x:%s", + &rem_dest[i].lid, &rem_dest[i].qpn, &rem_dest[i].psn, gid); + wire_gid_to_gid(gid, &rem_dest[i].gid); } - if (pp_connect_ctx(ctx, ib_port, mtu, sl, my_dest, rem_dest)) { + if (pp_connect_ctx(ctx, ib_port, mtu, sl, my_dest, rem_dest, sgid_idx)) { fprintf(stderr, "Couldn't connect to remote QP\n"); free(rem_dest); rem_dest = NULL; @@ -303,7 +318,8 @@ static struct pingpong_dest *pp_server_e } for (i = 0; i < MAX_QP; ++i) { - sprintf(msg, "%04x:%06x:%06x", my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn); + gid_to_wire_gid(&my_dest[i].gid, gid); + sprintf(msg, "%04x:%06x:%06x:%s", my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn, gid); if (write(connfd, msg, sizeof msg) != sizeof msg) { fprintf(stderr, "Couldn't send local address\n"); free(rem_dest); @@ -326,7 +342,7 @@ static struct pingpong_context *pp_init_ struct pingpong_context *ctx; int i; - ctx = malloc(sizeof *ctx); + ctx = calloc(1, sizeof *ctx); if (!ctx) return NULL; @@ -550,6 +566,7 @@ static void usage(const char *argv0) printf(" -n, --iters=<iters> number of exchanges per QP(default 1000)\n"); printf(" -l, --sl=<sl> service level value\n"); printf(" -e, --events sleep on CQ events (default poll)\n"); + printf(" -g, --gid-idx=<gid index> local port gid index\n"); } int main(int argc, char *argv[]) @@ -577,6 +594,8 @@ int main(int argc, char *argv[]) int i; int num_cq_events = 0; int sl = 0; + int gidx = -1; + char gid[33]; srand48(getpid() * time(NULL)); @@ -594,10 +613,11 @@ int main(int argc, char *argv[]) { .name = "iters", .has_arg = 1, .val = 'n' }, { .name = "sl", .has_arg = 1, .val = 'l' }, { .name = "events", .has_arg = 0, .val = 'e' }, + { .name = "gid-idx", .has_arg = 1, .val = 'g' }, { 0 } }; - c = getopt_long(argc, argv, "p:d:i:s:m:q:r:n:l:e", long_options, NULL); + c = getopt_long(argc, argv, "p:d:i:s:m:q:r:n:l:eg:", long_options, NULL); if (c == -1) break; @@ -654,6 +674,10 @@ int main(int argc, char *argv[]) ++use_event; break; + case 'g': + gidx = strtol(optarg, NULL, 0); + break; + default: usage(argv[0]); return 1; @@ -721,33 +745,50 @@ int main(int argc, char *argv[]) memset(my_dest, 0, sizeof my_dest); + if (pp_get_port_info(ctx->context, ib_port, &ctx->portinfo)) { + fprintf(stderr, "Couldn't get port info\n"); + return 1; + } for (i = 0; i < num_qp; ++i) { my_dest[i].qpn = ctx->qp[i]->qp_num; my_dest[i].psn = lrand48() & 0xffffff; - my_dest[i].lid = pp_get_local_lid(ctx->context, ib_port); - if (!my_dest[i].lid) { + my_dest[i].lid = ctx->portinfo.lid; + if (ctx->portinfo.link_layer == IBV_LINK_LAYER_INFINIBAND && !my_dest[i].lid) { fprintf(stderr, "Couldn't get local LID\n"); return 1; } - printf(" local address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x\n", - my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn); + if (gidx >= 0) { + if (ibv_query_gid(ctx->context, ib_port, gidx, &my_dest[i].gid)) { + fprintf(stderr, "Could not get local gid for gid index %d\n", gidx); + return 1; + } + } else + memset(&my_dest[i].gid, 0, sizeof my_dest[i].gid); + + inet_ntop(AF_INET6, &my_dest[i].gid, gid, sizeof gid); + printf(" local address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x, GID %s\n", + my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn, gid); } if (servername) rem_dest = pp_client_exch_dest(servername, port, my_dest); else - rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, my_dest); + rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, my_dest, gidx); if (!rem_dest) return 1; - for (i = 0; i < num_qp; ++i) - printf(" remote address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x\n", - rem_dest[i].lid, rem_dest[i].qpn, rem_dest[i].psn); + inet_ntop(AF_INET6, &rem_dest->gid, gid, sizeof gid); + + for (i = 0; i < num_qp; ++i) { + inet_ntop(AF_INET6, &rem_dest[i].gid, gid, sizeof gid); + printf(" remote address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x, GID %s\n", + rem_dest[i].lid, rem_dest[i].qpn, rem_dest[i].psn, gid); + } if (servername) - if (pp_connect_ctx(ctx, ib_port, mtu, sl, my_dest, rem_dest)) + if (pp_connect_ctx(ctx, ib_port, mtu, sl, my_dest, rem_dest, gidx)) return 1; if (servername) Modified: projects/ofed/head/contrib/ofed/libibverbs/examples/uc_pingpong.c ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/examples/uc_pingpong.c Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/examples/uc_pingpong.c Mon Jan 3 06:35:40 2011 (r216914) @@ -66,17 +66,19 @@ struct pingpong_context { int size; int rx_depth; int pending; + struct ibv_port_attr portinfo; }; struct pingpong_dest { int lid; int qpn; int psn; + union ibv_gid gid; }; static int pp_connect_ctx(struct pingpong_context *ctx, int port, int my_psn, enum ibv_mtu mtu, int sl, - struct pingpong_dest *dest) + struct pingpong_dest *dest, int sgid_idx) { struct ibv_qp_attr attr = { .qp_state = IBV_QPS_RTR, @@ -91,6 +93,14 @@ static int pp_connect_ctx(struct pingpon .port_num = port } }; + + if (dest->gid.global.interface_id) { + attr.ah_attr.is_global = 1; + attr.ah_attr.grh.hop_limit = 1; + attr.ah_attr.grh.dgid = dest->gid; + attr.ah_attr.grh.sgid_index = sgid_idx; + } + if (ibv_modify_qp(ctx->qp, &attr, IBV_QP_STATE | IBV_QP_AV | @@ -122,10 +132,11 @@ static struct pingpong_dest *pp_client_e .ai_socktype = SOCK_STREAM }; char *service; - char msg[sizeof "0000:000000:000000"]; + char msg[sizeof "0000:000000:000000:00000000000000000000000000000000"]; int n; int sockfd = -1; struct pingpong_dest *rem_dest = NULL; + char gid[33]; if (asprintf(&service, "%d", port) < 0) return NULL; @@ -156,7 +167,8 @@ static struct pingpong_dest *pp_client_e return NULL; } - sprintf(msg, "%04x:%06x:%06x", my_dest->lid, my_dest->qpn, my_dest->psn); + gid_to_wire_gid(&my_dest->gid, gid); + sprintf(msg, "%04x:%06x:%06x:%s", my_dest->lid, my_dest->qpn, my_dest->psn, gid); if (write(sockfd, msg, sizeof msg) != sizeof msg) { fprintf(stderr, "Couldn't send local address\n"); goto out; @@ -174,7 +186,8 @@ static struct pingpong_dest *pp_client_e if (!rem_dest) goto out; - sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); + sscanf(msg, "%x:%x:%x:%s", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn, gid); + wire_gid_to_gid(gid, &rem_dest->gid); out: close(sockfd); @@ -184,7 +197,8 @@ out: static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, int ib_port, enum ibv_mtu mtu, int port, int sl, - const struct pingpong_dest *my_dest) + const struct pingpong_dest *my_dest, + int sgid_idx) { struct addrinfo *res, *t; struct addrinfo hints = { @@ -193,10 +207,11 @@ static struct pingpong_dest *pp_server_e .ai_socktype = SOCK_STREAM }; char *service; - char msg[sizeof "0000:000000:000000"]; + char msg[sizeof "0000:000000:000000:00000000000000000000000000000000"]; int n; int sockfd = -1, connfd; struct pingpong_dest *rem_dest = NULL; + char gid[33]; if (asprintf(&service, "%d", port) < 0) return NULL; @@ -250,16 +265,18 @@ static struct pingpong_dest *pp_server_e if (!rem_dest) goto out; - sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); + sscanf(msg, "%x:%x:%x:%s", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn, gid); + wire_gid_to_gid(gid, &rem_dest->gid); - if (pp_connect_ctx(ctx, ib_port, my_dest->psn, mtu, sl, rem_dest)) { + if (pp_connect_ctx(ctx, ib_port, my_dest->psn, mtu, sl, rem_dest, sgid_idx)) { fprintf(stderr, "Couldn't connect to remote QP\n"); free(rem_dest); rem_dest = NULL; goto out; } - sprintf(msg, "%04x:%06x:%06x", my_dest->lid, my_dest->qpn, my_dest->psn); + gid_to_wire_gid(&my_dest->gid, gid); + sprintf(msg, "%04x:%06x:%06x:%s", my_dest->lid, my_dest->qpn, my_dest->psn, gid); if (write(connfd, msg, sizeof msg) != sizeof msg) { fprintf(stderr, "Couldn't send local address\n"); free(rem_dest); @@ -280,7 +297,7 @@ static struct pingpong_context *pp_init_ { struct pingpong_context *ctx; - ctx = malloc(sizeof *ctx); + ctx = calloc(1, sizeof *ctx); if (!ctx) return NULL; @@ -468,6 +485,7 @@ static void usage(const char *argv0) printf(" -n, --iters=<iters> number of exchanges (default 1000)\n"); printf(" -l, --sl=<sl> service level value\n"); printf(" -e, --events sleep on CQ events (default poll)\n"); + printf(" -g, --gid-idx=<gid index> local port gid index\n"); } int main(int argc, char *argv[]) @@ -491,6 +509,8 @@ int main(int argc, char *argv[]) int rcnt, scnt; int num_cq_events = 0; int sl = 0; + int gidx = -1; + char gid[33]; srand48(getpid() * time(NULL)); @@ -507,10 +527,11 @@ int main(int argc, char *argv[]) { .name = "iters", .has_arg = 1, .val = 'n' }, { .name = "sl", .has_arg = 1, .val = 'l' }, { .name = "events", .has_arg = 0, .val = 'e' }, + { .name = "gid-idx", .has_arg = 1, .val = 'g' }, { 0 } }; - c = getopt_long(argc, argv, "p:d:i:s:m:r:n:l:e", long_options, NULL); + c = getopt_long(argc, argv, "p:d:i:s:m:r:n:l:eg:", long_options, NULL); if (c == -1) break; @@ -563,6 +584,10 @@ int main(int argc, char *argv[]) ++use_event; break; + case 'g': + gidx = strtol(optarg, NULL, 0); + break; + default: usage(argv[0]); return 1; @@ -618,30 +643,45 @@ int main(int argc, char *argv[]) return 1; } - my_dest.lid = pp_get_local_lid(ctx->context, ib_port); - my_dest.qpn = ctx->qp->qp_num; - my_dest.psn = lrand48() & 0xffffff; - if (!my_dest.lid) { + if (pp_get_port_info(ctx->context, ib_port, &ctx->portinfo)) { + fprintf(stderr, "Couldn't get port info\n"); + return 1; + } + + my_dest.lid = ctx->portinfo.lid; + if (ctx->portinfo.link_layer == IBV_LINK_LAYER_INFINIBAND && !my_dest.lid) { fprintf(stderr, "Couldn't get local LID\n"); return 1; } - printf(" local address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x\n", - my_dest.lid, my_dest.qpn, my_dest.psn); + if (gidx >= 0) { + if (ibv_query_gid(ctx->context, ib_port, gidx, &my_dest.gid)) { + fprintf(stderr, "Could not get local gid for gid index %d\n", gidx); + return 1; + } + } else + memset(&my_dest.gid, 0, sizeof my_dest.gid); + + my_dest.qpn = ctx->qp->qp_num; + my_dest.psn = lrand48() & 0xffffff; + inet_ntop(AF_INET6, &my_dest.gid, gid, sizeof gid); + printf(" local address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x, GID %s\n", + my_dest.lid, my_dest.qpn, my_dest.psn, gid); if (servername) rem_dest = pp_client_exch_dest(servername, port, &my_dest); else - rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, &my_dest); + rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, &my_dest, gidx); if (!rem_dest) return 1; - printf(" remote address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x\n", - rem_dest->lid, rem_dest->qpn, rem_dest->psn); + inet_ntop(AF_INET6, &rem_dest->gid, gid, sizeof gid); + printf(" remote address: LID 0x%04x, QPN 0x%06x, PSN 0x%06x, GID %s\n", + rem_dest->lid, rem_dest->qpn, rem_dest->psn, gid); if (servername) - if (pp_connect_ctx(ctx, ib_port, my_dest.psn, mtu, sl, rem_dest)) + if (pp_connect_ctx(ctx, ib_port, my_dest.psn, mtu, sl, rem_dest, gidx)) return 1; ctx->pending = PINGPONG_RECV_WRID; Modified: projects/ofed/head/contrib/ofed/libibverbs/examples/ud_pingpong.c ============================================================================== --- projects/ofed/head/contrib/ofed/libibverbs/examples/ud_pingpong.c Mon Jan 3 06:31:51 2011 (r216913) +++ projects/ofed/head/contrib/ofed/libibverbs/examples/ud_pingpong.c Mon Jan 3 06:35:40 2011 (r216914) @@ -67,16 +67,18 @@ struct pingpong_context { int size; int rx_depth; int pending; + struct ibv_port_attr portinfo; }; struct pingpong_dest { int lid; int qpn; int psn; + union ibv_gid gid; }; static int pp_connect_ctx(struct pingpong_context *ctx, int port, int my_psn, - int sl, struct pingpong_dest *dest) + int sl, struct pingpong_dest *dest, int sgid_idx) { struct ibv_ah_attr ah_attr = { .is_global = 0, @@ -104,6 +106,13 @@ static int pp_connect_ctx(struct pingpon return 1; } + if (dest->gid.global.interface_id) { + ah_attr.is_global = 1; + ah_attr.grh.hop_limit = 1; + ah_attr.grh.dgid = dest->gid; + ah_attr.grh.sgid_index = sgid_idx; + } + ctx->ah = ibv_create_ah(ctx->pd, &ah_attr); if (!ctx->ah) { fprintf(stderr, "Failed to create AH\n"); @@ -122,10 +131,11 @@ static struct pingpong_dest *pp_client_e .ai_socktype = SOCK_STREAM }; char *service; - char msg[sizeof "0000:000000:000000"]; + char msg[sizeof "0000:000000:000000:00000000000000000000000000000000"]; int n; int sockfd = -1; struct pingpong_dest *rem_dest = NULL; + char gid[33]; if (asprintf(&service, "%d", port) < 0) return NULL; @@ -156,7 +166,8 @@ static struct pingpong_dest *pp_client_e return NULL; } - sprintf(msg, "%04x:%06x:%06x", my_dest->lid, my_dest->qpn, my_dest->psn); + gid_to_wire_gid(&my_dest->gid, gid); + sprintf(msg, "%04x:%06x:%06x:%s", my_dest->lid, my_dest->qpn, my_dest->psn, gid); if (write(sockfd, msg, sizeof msg) != sizeof msg) { fprintf(stderr, "Couldn't send local address\n"); goto out; @@ -174,7 +185,8 @@ static struct pingpong_dest *pp_client_e if (!rem_dest) goto out; - sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); + sscanf(msg, "%x:%x:%x:%s", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn, gid); + wire_gid_to_gid(gid, &rem_dest->gid); out: close(sockfd); @@ -183,7 +195,8 @@ out: static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, int ib_port, int port, int sl, - const struct pingpong_dest *my_dest) + const struct pingpong_dest *my_dest, + int sgid_idx) { struct addrinfo *res, *t; struct addrinfo hints = { @@ -192,10 +205,11 @@ static struct pingpong_dest *pp_server_e .ai_socktype = SOCK_STREAM }; char *service; - char msg[sizeof "0000:000000:000000"]; + char msg[sizeof "0000:000000:000000:00000000000000000000000000000000"]; int n; int sockfd = -1, connfd; struct pingpong_dest *rem_dest = NULL; + char gid[33]; if (asprintf(&service, "%d", port) < 0) return NULL; @@ -249,16 +263,18 @@ static struct pingpong_dest *pp_server_e if (!rem_dest) goto out; - sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); + sscanf(msg, "%x:%x:%x:%s", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn, gid); + wire_gid_to_gid(gid, &rem_dest->gid); - if (pp_connect_ctx(ctx, ib_port, my_dest->psn, sl, rem_dest)) { + if (pp_connect_ctx(ctx, ib_port, my_dest->psn, sl, rem_dest, sgid_idx)) { fprintf(stderr, "Couldn't connect to remote QP\n"); free(rem_dest); rem_dest = NULL; goto out; } - sprintf(msg, "%04x:%06x:%06x", my_dest->lid, my_dest->qpn, my_dest->psn); + gid_to_wire_gid(&my_dest->gid, gid); + sprintf(msg, "%04x:%06x:%06x:%s", my_dest->lid, my_dest->qpn, my_dest->psn, gid); if (write(connfd, msg, sizeof msg) != sizeof msg) { fprintf(stderr, "Couldn't send local address\n"); free(rem_dest); @@ -473,10 +489,11 @@ static void usage(const char *argv0) printf(" -p, --port=<port> listen on/connect to port <port> (default 18515)\n"); printf(" -d, --ib-dev=<dev> use IB device <dev> (default first device found)\n"); printf(" -i, --ib-port=<port> use port <port> of IB device (default 1)\n"); - printf(" -s, --size=<size> size of message to exchange (default 2048)\n"); + printf(" -s, --size=<size> size of message to exchange (default 1024)\n"); printf(" -r, --rx-depth=<dep> number of receives to post at a time (default 500)\n"); printf(" -n, --iters=<iters> number of exchanges (default 1000)\n"); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101030635.p036Ze56077404>