-.TH "ib_acme" 7 "2013-06-15" "ib_acme" "ib_acme" ib_acme
+.TH "ib_acme" 7 "2013-06-21" "ib_acme" "ib_acme" ib_acme
.SH NAME
ib_acme \- test and configuration utility for the IB ACM
.SH SYNOPSIS
.sp
.nf
-\fIib_acme\fR [-f addr_format] [-s src_addr] -d dest_addr [-v] [-c] [-P] [-S svc_addr]
+\fIib_acme\fR [-f addr_format] [-s src_addr] -d dest_addr [-v] [-c] [-P] [-S svc_addr] [-C repetitions]
.fi
.nf
\fIib_acme\fR [-A [addr_file]] [-O [opt_file]] [-D dest_dir] [-V]
\-S svc_addr
address of ACM service, default: local service
.TP
+\-C repetitions
+number of repetitions to perform resolution. Used to measure
+performance of ACM cache lookups. Defaults to 1.
+.TP
\-A [addr_file]
With this option, the ib_acme utility automatically generates the address
configuration file ibacm_addr.cfg. The generated file is
/*
* Copyright (c) 2009-2010 Intel Corporation. All rights reserved.
+ * Copyright (c) 2013 Mellanox Technologies LTD. All rights reserved.
*
* This software is available to you under the OpenIB.org BSD license
* below:
static char addr_type = 'u';
static int verify;
static int nodelay;
+static int repetitions = 1;
enum perf_query_output {
PERF_QUERY_NONE,
printf(" [-c] - read ACM cached data only\n");
printf(" [-P] - query performance data from destination service\n");
printf(" [-S svc_addr] - address of ACM service, default: local service\n");
+ printf(" [-C repetitions] - repeat count for resolution\n");
printf("usage 2: %s\n", program);
printf("Generate default ibacm service configuration and option files\n");
printf(" -A [addr_file] - generate local address configuration file\n");
}
ret = ib_acm_resolve_ip(saddr, (struct sockaddr *) &dest,
- &paths, &count, get_resolve_flags());
+ &paths, &count, get_resolve_flags(), (repetitions == 1));
if (ret) {
printf("ib_acm_resolve_ip failed: %s\n", strerror(errno));
return ret;
struct ibv_path_data *paths;
int ret, count;
- ret = ib_acm_resolve_name(src_addr, dest_addr, &paths, &count, get_resolve_flags());
+ ret = ib_acm_resolve_name(src_addr, dest_addr, &paths, &count, get_resolve_flags(), (repetitions == 1));
if (ret) {
printf("ib_acm_resolve_name failed: %s\n", strerror(errno));
return ret;
{
char **dest_list, **src_list;
struct ibv_path_record path;
- int ret, d = 0, s = 0;
+ int ret = 0, d = 0, s = 0, i;
char dest_type;
dest_list = parse(dest_arg, NULL);
printf("Destination: %s\n", dest_addr);
if (src_addr)
printf("Source: %s\n", src_addr);
- switch (dest_type) {
- case 'i':
- ret = resolve_ip(&path);
- break;
- case 'n':
- ret = resolve_name(&path);
- break;
- case 'l':
- memset(&path, 0, sizeof path);
- ret = resolve_lid(&path);
- break;
- case 'g':
- memset(&path, 0, sizeof path);
- ret = resolve_gid(&path);
- break;
- default:
- break;
+ for (i = 0; i < repetitions; i++) {
+ switch (dest_type) {
+ case 'i':
+ ret = resolve_ip(&path);
+ break;
+ case 'n':
+ ret = resolve_name(&path);
+ break;
+ case 'l':
+ memset(&path, 0, sizeof path);
+ ret = resolve_lid(&path);
+ break;
+ case 'g':
+ memset(&path, 0, sizeof path);
+ ret = resolve_gid(&path);
+ break;
+ default:
+ break;
+ }
}
if (!ret)
if (ret)
goto out;
- while ((op = getopt(argc, argv, "f:s:d:vcA::O::D:P::S:V")) != -1) {
+ while ((op = getopt(argc, argv, "f:s:d:vcA::O::D:P::S:C:V")) != -1) {
switch (op) {
case 'f':
addr_type = optarg[0];
case 'S':
svc_arg = optarg;
break;
+ case 'C':
+ repetitions = atoi(optarg);
+ if (!repetitions)
+ repetitions = 1;
+ break;
case 'V':
verbose = 1;
break;
/*
* Copyright (c) 2009 Intel Corporation. All rights reserved.
+ * Copyright (c) 2013 Mellanox Technologies LTD. All rights reserved.
*
* This software is available to you under the OpenIB.org BSD license
* below:
}
static int acm_format_resp(struct acm_msg *msg,
- struct ibv_path_data **paths, int *count)
+ struct ibv_path_data **paths, int *count, int print)
{
struct ibv_path_data *path_data;
char addr[ACM_MAX_ADDRESS];
default:
goto err;
}
- printf("Source: %s\n", addr);
+ if (print)
+ printf("Source: %s\n", addr);
break;
}
}
}
static int acm_resolve(uint8_t *src, uint8_t *dest, uint8_t type,
- struct ibv_path_data **paths, int *count, uint32_t flags)
+ struct ibv_path_data **paths, int *count, uint32_t flags, int print)
{
struct acm_msg msg;
int ret, cnt = 0;
goto out;
}
- ret = acm_format_resp(&msg, paths, count);
+ ret = acm_format_resp(&msg, paths, count, print);
out:
lock_release(&lock);
return ret;
}
int ib_acm_resolve_name(char *src, char *dest,
- struct ibv_path_data **paths, int *count, uint32_t flags)
+ struct ibv_path_data **paths, int *count, uint32_t flags, int print)
{
return acm_resolve((uint8_t *) src, (uint8_t *) dest,
- ACM_EP_INFO_NAME, paths, count, flags);
+ ACM_EP_INFO_NAME, paths, count, flags, print);
}
int ib_acm_resolve_ip(struct sockaddr *src, struct sockaddr *dest,
- struct ibv_path_data **paths, int *count, uint32_t flags)
+ struct ibv_path_data **paths, int *count, uint32_t flags, int print)
{
if (((struct sockaddr *) dest)->sa_family == AF_INET) {
return acm_resolve((uint8_t *) src, (uint8_t *) dest,
- ACM_EP_INFO_ADDRESS_IP, paths, count, flags);
+ ACM_EP_INFO_ADDRESS_IP, paths, count, flags, print);
} else {
return acm_resolve((uint8_t *) src, (uint8_t *) dest,
- ACM_EP_INFO_ADDRESS_IP6, paths, count, flags);
+ ACM_EP_INFO_ADDRESS_IP6, paths, count, flags, print);
}
}
/*
* Copyright (c) 2009 Intel Corporation. All rights reserved.
+ * Copyright (c) 2013 Mellanox Technologies LTD. All rights reserved.
*
* This software is available to you under the OpenIB.org BSD license
* below:
void ib_acm_disconnect();
int ib_acm_resolve_name(char *src, char *dest,
- struct ibv_path_data **paths, int *count, uint32_t flags);
+ struct ibv_path_data **paths, int *count, uint32_t flags,
+ int print);
int ib_acm_resolve_ip(struct sockaddr *src, struct sockaddr *dest,
- struct ibv_path_data **paths, int *count, uint32_t flags);
+ struct ibv_path_data **paths, int *count, uint32_t flags,
+ int print);
int ib_acm_resolve_path(struct ibv_path_record *path, uint32_t flags);
#define ib_acm_free_paths(paths) free(paths)