+++ /dev/null
-Bottom: caa30f6e0c510b4add867f1d87a2133c5a4d0bc1
-Top: faec08412cb2aabd5d7db2480156545271ba0926
-Author: Sean Hefty <sean.hefty@intel.com>
-Date: 2010-12-02 15:30:44 -0800
-
-ib_acme: Hide output for -A -O options unless verbose
-
-Do not display the contents of generated config files by
-default. Add a verbose option to ib_acme and only display
-the contents if verbose is enabled. This reduces the amount
-of noise using ib_acme to configuring address information
-across a large cluster.
-
-Signed-off-by: Sean Hefty <sean.hefty@intel.com>
-
-
----
-
-diff --git a/linux/acme_linux.c b/linux/acme_linux.c
-index 2cb422a..cf23581 100644
---- a/linux/acme_linux.c
-+++ b/linux/acme_linux.c
-@@ -43,6 +43,8 @@
-
- extern struct ibv_context **verbs;
- extern int dev_cnt;
-+extern FILE *errf;
-+extern FILE *outf;
-
-
- static int
-@@ -55,7 +57,7 @@ get_pkey(struct ifreq *ifreq, uint16_t *pkey)
- sprintf(buf, "//sys//class//net//%s//pkey", ifreq->ifr_name);
- f = fopen(buf, "r");
- if (!f) {
-- printf("failed to open %s\n", buf);
-+ fprintf(errf, "failed to open %s\n", buf);
- return -1;
- }
-
-@@ -63,7 +65,7 @@ get_pkey(struct ifreq *ifreq, uint16_t *pkey)
- *pkey = strtol(buf, &end, 16);
- ret = 0;
- } else {
-- printf("failed to read pkey\n");
-+ fprintf(errf, "failed to read pkey\n");
- ret = -1;
- }
-
-@@ -81,7 +83,7 @@ get_sgid(struct ifreq *ifr, union ibv_gid *sgid)
- sprintf(buf, "//sys//class//net//%s//address", ifr->ifr_name);
- f = fopen(buf, "r");
- if (!f) {
-- printf("failed to open %s\n", buf);
-+ fprintf(errf, "failed to open %s\n", buf);
- return -1;
- }
-
-@@ -92,7 +94,7 @@ get_sgid(struct ifreq *ifr, union ibv_gid *sgid)
- }
- ret = 0;
- } else {
-- printf("failed to read sgid\n");
-+ fprintf(errf, "failed to read sgid\n");
- ret = -1;
- }
-
-@@ -111,13 +113,13 @@ get_devaddr(int s, struct ifreq *ifr,
-
- ret = get_sgid(ifr, &sgid);
- if (ret) {
-- printf("unable to get sgid\n");
-+ fprintf(errf, "unable to get sgid\n");
- return ret;
- }
-
- ret = get_pkey(ifr, pkey);
- if (ret) {
-- printf("unable to get pkey\n");
-+ fprintf(errf, "unable to get pkey\n");
- return ret;
- }
-
-@@ -170,7 +172,7 @@ int gen_addr_ip(FILE *f)
-
- ret = ioctl(s, SIOCGIFCONF, ifc);
- if (ret < 0) {
-- printf("ioctl ifconf error %d\n", ret);
-+ fprintf(errf, "ioctl ifconf error %d\n", ret);
- goto out2;
- }
-
-@@ -191,7 +193,7 @@ int gen_addr_ip(FILE *f)
-
- ret = ioctl(s, SIOCGIFHWADDR, &ifr[i]);
- if (ret) {
-- printf("failed to get hw address %d\n", ret);
-+ fprintf(errf, "failed to get hw address %d\n", ret);
- continue;
- }
-
-@@ -202,8 +204,10 @@ int gen_addr_ip(FILE *f)
- if (ret)
- continue;
-
-- printf("%s %s %d 0x%x\n", ip, verbs[dev_index]->device->name, port, pkey);
-- fprintf(f, "%s %s %d 0x%x\n", ip, verbs[dev_index]->device->name, port, pkey);
-+ fprintf(outf, "%s %s %d 0x%x\n",
-+ ip, verbs[dev_index]->device->name, port, pkey);
-+ fprintf(f, "%s %s %d 0x%x\n",
-+ ip, verbs[dev_index]->device->name, port, pkey);
- }
- ret = 0;
-
-diff --git a/src/acm.c b/src/acm.c
-index 3a5404a..dfc6e48 100644
---- a/src/acm.c
-+++ b/src/acm.c
-@@ -34,6 +34,7 @@
- #include <stdio.h>
- #include <stdarg.h>
- #include <string.h>
-+#include <fcntl.h>
- #include <osd.h>
- #include <arpa/inet.h>
- #include <sys/stat.h>
-diff --git a/src/acme.c b/src/acme.c
-index 552f42a..0e3c7a9 100644
---- a/src/acme.c
-+++ b/src/acme.c
-@@ -47,17 +47,21 @@ static char *dest_dir = ACM_DEST_DIR;
- static char *addr_file = ACM_ADDR_FILE;
- static char *opts_file = ACM_OPTS_FILE;
-
-+FILE *errf = stderr;
-+FILE *outf = stdout;
-+
- static char *dest_addr;
- static char *src_addr;
- static char addr_type = 'i';
- static int verify;
-+static int verbose;
- static int make_addr;
- static int make_opts;
-
- struct ibv_context **verbs;
- int dev_cnt;
-
--extern int gen_addr_ip(FILE *f);
-+extern int gen_addr_ip(FILE *addr_file, FILE *out_file);
-
- static void show_usage(char *program)
- {
-@@ -74,6 +78,7 @@ static void show_usage(char *program)
- printf(" (default is %s)\n", ACM_OPTS_FILE);
- printf(" -D dest_dir - specify destination directory for output files\n");
- printf(" (default is %s)\n", ACM_DEST_DIR);
-+ printf(" -V - enable verbose output\n");
- }
-
- static void gen_opts_temp(FILE *f)
-@@ -214,7 +219,7 @@ static int open_dir(void)
- {
- mkdir(dest_dir, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
- if (chdir(dest_dir)) {
-- printf("Failed to open directory %s: %s\n", dest_dir, strerror(errno));
-+ fprintf(errf, "Failed to open directory %s: %s\n", dest_dir, strerror(errno));
- return -1;
- }
- return 0;
-@@ -224,9 +229,9 @@ static int gen_opts(void)
- {
- FILE *f;
-
-- printf("Generating %s/%s\n", dest_dir, opts_file);
-+ fprintf(outf, "Generating %s/%s\n", dest_dir, opts_file);
- if (open_dir() || !(f = fopen(opts_file, "w"))) {
-- printf("Failed to open option configuration file: %s\n", strerror(errno));
-+ fprintf(errf, "Failed to open option configuration file: %s\n", strerror(errno));
- return -1;
- }
-
-@@ -270,7 +275,7 @@ static int open_verbs(void)
-
- dev_array = ibv_get_device_list(&dev_cnt);
- if (!dev_array) {
-- printf("ibv_get_device_list - no devices present?\n");
-+ fprintf(errf, "ibv_get_device_list - no devices present?\n");
- return -1;
- }
-
-@@ -283,7 +288,7 @@ static int open_verbs(void)
- for (i = 0; i < dev_cnt; i++) {
- verbs[i] = ibv_open_device(dev_array[i]);
- if (!verbs) {
-- printf("ibv_open_device - failed to open device\n");
-+ fprintf(errf, "ibv_open_device - failed to open device\n");
- ret = -1;
- goto err2;
- }
-@@ -320,7 +325,7 @@ static int gen_addr_names(FILE *f)
-
- ret = gethostname(host_name, sizeof host_name);
- if (ret) {
-- printf("gethostname error: %d\n", ret);
-+ fprintf(errf, "gethostname error: %d\n", ret);
- return ret;
- }
- strtok(host_name, ".");
-@@ -336,7 +341,7 @@ static int gen_addr_names(FILE *f)
- if (!found_active) {
- ret = ibv_query_port(verbs[i], p, &port_attr);
- if (!ret && port_attr.state == IBV_PORT_ACTIVE) {
-- printf("%s %s %d default\n",
-+ fprintf(outf, "%s %s %d default\n",
- host_name, verbs[i]->device->name, p);
- fprintf(f, "%s %s %d default\n",
- host_name, verbs[i]->device->name, p);
-@@ -344,7 +349,7 @@ static int gen_addr_names(FILE *f)
- }
- }
-
-- printf("%s-%d %s %d default\n",
-+ fprintf(outf, "%s-%d %s %d default\n",
- host_name, index, verbs[i]->device->name, p);
- fprintf(f, "%s-%d %s %d default\n",
- host_name, index++, verbs[i]->device->name, p);
-@@ -359,9 +364,9 @@ static int gen_addr(void)
- FILE *f;
- int ret;
-
-- printf("Generating %s/%s\n", dest_dir, addr_file);
-+ fprintf(outf, "Generating %s/%s\n", dest_dir, addr_file);
- if (open_dir() || !(f = fopen(addr_file, "w"))) {
-- printf("Failed to open address configuration file: %s\n", strerror(errno));
-+ fprintf(errf, "Failed to open address configuration file: %s\n", strerror(errno));
- return -1;
- }
-
-@@ -373,13 +378,13 @@ static int gen_addr(void)
- gen_addr_temp(f);
- ret = gen_addr_names(f);
- if (ret) {
-- printf("Failed to auto generate host names in config file\n");
-+ fprintf(errf, "Failed to auto generate host names in config file\n");
- goto out2;
- }
-
- ret = gen_addr_ip(f);
- if (ret) {
-- printf("Failed to auto generate IP addresses in config file\n");
-+ fprintf(errf, "Failed to auto generate IP addresses in config file\n");
- goto out2;
- }
-
-@@ -395,23 +400,23 @@ static void show_path(struct ibv_path_record *path)
- char gid[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"];
- uint32_t fl_hop;
-
-- printf("Path information\n");
-+ fprintf(outf, "Path information\n");
- inet_ntop(AF_INET6, path->dgid.raw, gid, sizeof gid);
-- printf(" dgid: %s\n", gid);
-+ fprintf(outf, " dgid: %s\n", gid);
- inet_ntop(AF_INET6, path->sgid.raw, gid, sizeof gid);
-- printf(" sgid: %s\n", gid);
-- printf(" dlid: 0x%x\n", ntohs(path->dlid));
-- printf(" slid: 0x%x\n", ntohs(path->slid));
-+ fprintf(outf, " sgid: %s\n", gid);
-+ fprintf(outf, " dlid: 0x%x\n", ntohs(path->dlid));
-+ fprintf(outf, " slid: 0x%x\n", ntohs(path->slid));
- fl_hop = ntohl(path->flowlabel_hoplimit);
-- printf(" flow label: 0x%x\n", fl_hop >> 8);
-- printf(" hop limit: %d\n", (uint8_t) fl_hop);
-- printf(" tclass: %d\n", path->tclass);
-- printf(" reverisible: %d\n", path->reversible_numpath >> 7);
-- printf(" pkey: 0x%x\n", ntohs(path->pkey));
-- printf(" sl: %d\n", ntohs(path->qosclass_sl) & 0xF);
-- printf(" mtu: %d\n", path->mtu & 0x1F);
-- printf(" rate: %d\n", path->rate & 0x1F);
-- printf(" packet lifetime: %d\n", path->packetlifetime & 0x1F);
-+ fprintf(outf, " flow label: 0x%x\n", fl_hop >> 8);
-+ fprintf(outf, " hop limit: %d\n", (uint8_t) fl_hop);
-+ fprintf(outf, " tclass: %d\n", path->tclass);
-+ fprintf(outf, " reverisible: %d\n", path->reversible_numpath >> 7);
-+ fprintf(outf, " pkey: 0x%x\n", ntohs(path->pkey));
-+ fprintf(outf, " sl: %d\n", ntohs(path->qosclass_sl) & 0xF);
-+ fprintf(outf, " mtu: %d\n", path->mtu & 0x1F);
-+ fprintf(outf, " rate: %d\n", path->rate & 0x1F);
-+ fprintf(outf, " packet lifetime: %d\n", path->packetlifetime & 0x1F);
- }
-
- static int resolve_ip(struct ibv_path_record *path)
-@@ -423,21 +428,21 @@ static int resolve_ip(struct ibv_path_record *path)
- src.sin_family = AF_INET;
- ret = inet_pton(AF_INET, src_addr, &src.sin_addr);
- if (ret <= 0) {
-- printf("inet_pton error on source address (%s): 0x%x\n", src_addr, ret);
-+ fprintf(ferr, "inet_pton error on source address (%s): 0x%x\n", src_addr, ret);
- return ret;
- }
-
- dest.sin_family = AF_INET;
- ret = inet_pton(AF_INET, dest_addr, &dest.sin_addr);
- if (ret <= 0) {
-- printf("inet_pton error on destination address (%s): 0x%x\n", dest_addr, ret);
-+ fprintf(errf, "inet_pton error on destination address (%s): 0x%x\n", dest_addr, ret);
- return ret;
- }
-
- ret = ib_acm_resolve_ip((struct sockaddr *) &src, (struct sockaddr *) &dest,
- &paths, &count);
- if (ret) {
-- printf("ib_acm_resolve_ip failed: 0x%x\n", ret);
-+ fprintf(errf, "ib_acm_resolve_ip failed: 0x%x\n", ret);
- return ret;
- }
-
-@@ -453,7 +458,7 @@ static int resolve_name(struct ibv_path_record *path)
-
- ret = ib_acm_resolve_name(src_addr, dest_addr, &paths, &count);
- if (ret) {
-- printf("ib_acm_resolve_name failed: 0x%x\n", ret);
-+ fprintf(errf, "ib_acm_resolve_name failed: 0x%x\n", ret);
- return ret;
- }
-
-@@ -472,7 +477,7 @@ static int resolve_lid(struct ibv_path_record *path)
-
- ret = ib_acm_resolve_path(path, 0);
- if (ret)
-- printf("ib_acm_resolve_path failed: 0x%x\n", ret);
-+ fprintf(errf, "ib_acm_resolve_path failed: 0x%x\n", ret);
-
- return ret;
- }
-@@ -483,9 +488,9 @@ static int verify_resolve(struct ibv_path_record *path)
-
- ret = ib_acm_resolve_path(path, ACM_FLAGS_QUERY_SA);
- if (ret)
-- printf("SA verification: failed 0x%x\n", ret);
-+ fprintf(errf, "SA verification: failed 0x%x\n", ret);
- else
-- printf("SA verification: success\n");
-+ fprintf(outf, "SA verification: success\n");
-
- return ret;
- }
-@@ -497,7 +502,7 @@ static int resolve(char *program)
-
- ret = libacm_init();
- if (ret) {
-- printf("Unable to contact ib_acm service\n");
-+ fprintf(errf, "Unable to contact ib_acm service\n");
- return ret;
- }
-
-@@ -546,7 +551,7 @@ int CDECL_FUNC main(int argc, char **argv)
- if (ret)
- goto out;
-
-- while ((op = getopt(argc, argv, "f:s:d:vA::O::D:")) != -1) {
-+ while ((op = getopt(argc, argv, "f:s:d:vA::O::D:V")) != -1) {
- switch (op) {
- case 'f':
- addr_type = optarg[0];
-@@ -573,6 +578,9 @@ int CDECL_FUNC main(int argc, char **argv)
- case 'D':
- dest_dir = optarg;
- break;
-+ case 'V':
-+ verbose = 1;
-+ break;
- default:
- show_usage(argv[0]);
- exit(1);
-@@ -580,11 +588,13 @@ int CDECL_FUNC main(int argc, char **argv)
- }
-
- if ((src_addr && !dest_addr) || (dest_addr && !src_addr) ||
-- (!src_addr && !dest_addr && !make_addr && !make_opts)) {
-+ (!src_addr && !dest_addr && !make_addr && !make_opts)) {
- show_usage(argv[0]);
- exit(1);
- }
-
-+ open_output_file();
-+
- if (src_addr)
- ret = resolve(argv[0]);
-
-@@ -595,6 +605,7 @@ int CDECL_FUNC main(int argc, char **argv)
- ret = gen_opts();
-
- out:
-- printf("return status 0x%x\n", ret);
-+ if (verbose || !(make_addr || make_opts) || ret)
-+ fprintf(outf, "return status 0x%x\n", ret);
- return ret;
- }