@@ -6,7 +6,7 @@ iblinkinfo \- report link info for all links in the fabric
.SH SYNOPSIS
.B iblinkinfo
[-hcdl -C <ca_name> -P <ca_port> -v <lt,hoq,vlstall> -S <guid>
--D <direct_route>]
+-D <direct_route> \-\-load\-cache <filename>]
.SH DESCRIPTION
.PP
@@ -42,7 +42,14 @@ Print port capabilities (enabled and supported values)
\fB\-P <ca_port>\fR use the specified ca_port for the search.
.TP
\fB\-R\fR (This option is obsolete and does nothing)
-
+.TP
+\fB\-\-load\-cache\fR <filename>
+Load and use the cached ibnetdiscover data stored in the specified
+filename. May be useful for outputting and learning about other
+fabrics or a previous state of a fabric. Cannot be used if user
+specifies a directo route path. See
+.B ibnetdiscover
+for information on caching ibnetdiscover output.
.SH AUTHOR
.TP
@@ -6,7 +6,7 @@ ibqueryerrors \- query and report non-zero IB port counters
.SH SYNOPSIS
.B ibqueryerrors
[-s <err1,err2,...> -c -r -C <ca_name> -P <ca_port> -G <node_guid>
--D <direct_route> -d -k -K]
+-D <direct_route> -d -k -K \-\-load\-cache <filename>]
.SH DESCRIPTION
.PP
@@ -60,6 +60,14 @@ specified the data counters will be cleared without any printed output.
.TP
\fB\-\-details\fR include transmit discard details
.TP
+\fB\-\-load\-cache\fR <filename>
+Load and use the cached ibnetdiscover data stored in the specified
+filename. May be useful for outputting and learning about other
+fabrics or a previous state of a fabric. Cannot be used if user
+specifies a directo route path. See
+.B ibnetdiscover
+for information on caching ibnetdiscover output.
+.TP
\fB\-R\fR (This option is obsolete and does nothing)
.SH COMMON OPTIONS
@@ -55,6 +55,7 @@
static char *node_name_map_file = NULL;
static nn_map_t *node_name_map = NULL;
+static char *load_cache_file = NULL;
static uint64_t guid = 0;
static char *guid_str = NULL;
@@ -230,6 +231,9 @@ static int process_opt(void *context, int ch, char *optarg)
case 1:
node_name_map_file = strdup(optarg);
break;
+ case 2:
+ load_cache_file = strdup(optarg);
+ break;
case 'S':
guid_str = optarg;
guid = (uint64_t) strtoull(guid_str, 0, 0);
@@ -291,6 +295,7 @@ int main(int argc, char **argv)
"print additional switch settings (PktLifeTime, HoqLife, VLStallCount)"},
{"portguids", 'g', 0, NULL,
"print port guids instead of node guids"},
+ {"load-cache", 2, 1, "<file>", "filename of ibnetdiscover cache to load"},
{"GNDN", 'R', 0, NULL,
"(This option is obsolete and does nothing)"},
{0}
@@ -317,6 +322,11 @@ int main(int argc, char **argv)
mad_rpc_set_timeout(ibmad_port, ibd_timeout);
node_name_map = open_node_name_map(node_name_map_file);
+
+ if (dr_path && load_cache_file) {
+ fprintf(stderr, "Cannot specify cache and direct route path\n");
+ exit(1);
+ }
if (dr_path) {
/* only scan part of the fabric */
@@ -334,19 +344,37 @@ int main(int argc, char **argv)
guid_str);
}
- if (resolved >= 0)
- if ((fabric = ibnd_discover_fabric(ibmad_port, &port_id,
- hops)) == NULL)
- IBWARN
- ("Single node discover failed; attempting full scan\n");
-
- if (!fabric)
- if ((fabric =
- ibnd_discover_fabric(ibmad_port, NULL, -1)) == NULL) {
- fprintf(stderr, "discover failed\n");
- rc = 1;
- goto close_port;
+ if (resolved >= 0) {
+ if (load_cache_file) {
+ if ((fabric = ibnd_load_fabric(load_cache_file, 0)) == NULL) {
+ fprintf(stderr, "loading cached fabric failed\n");
+ exit(1);
+ }
+ }
+ else {
+ if ((fabric = ibnd_discover_fabric(ibmad_port, &port_id,
+ hops)) == NULL)
+ IBWARN
+ ("Single node discover failed; attempting full scan\n");
+ }
+ }
+
+ if (!fabric) {
+ if (load_cache_file) {
+ if ((fabric = ibnd_load_fabric(load_cache_file, 0)) == NULL) {
+ fprintf(stderr, "loading cached fabric failed\n");
+ exit(1);
+ }
}
+ else {
+ if ((fabric =
+ ibnd_discover_fabric(ibmad_port, NULL, -1)) == NULL) {
+ fprintf(stderr, "discover failed\n");
+ rc = 1;
+ goto close_port;
+ }
+ }
+ }
if (!all && guid_str) {
ibnd_node_t *sw = ibnd_find_node_guid(fabric, guid);
@@ -58,6 +58,8 @@
struct ibmad_port *ibmad_port;
static char *node_name_map_file = NULL;
static nn_map_t *node_name_map = NULL;
+static char *load_cache_file = NULL;
+
int data_counters = 0;
int port_config = 0;
uint64_t node_guid = 0;
@@ -481,6 +483,9 @@ static int process_opt(void *context, int ch, char *optarg)
case 6:
details = 1;
break;
+ case 7:
+ load_cache_file = strdup(optarg);
+ break;
case 'G':
case 'S':
node_guid_str = optarg;
@@ -542,6 +547,7 @@ int main(int argc, char **argv)
"Clear error counters after read"},
{"clear-counts", 'K', 0, NULL,
"Clear data counters after read"},
+ {"load-cache", 7, 1, "<file>", "filename of ibnetdiscover cache to load"},
{0}
};
char usage_args[] = "";
@@ -568,6 +574,11 @@ int main(int argc, char **argv)
node_name_map = open_node_name_map(node_name_map_file);
+ if (dr_path && load_cache_file) {
+ fprintf(stderr, "Cannot specify cache and direct route path\n");
+ exit(1);
+ }
+
/* limit the scan the fabric around the target */
if (dr_path) {
if ((resolved =
@@ -584,19 +595,37 @@ int main(int argc, char **argv)
node_guid_str);
}
- if (resolved >= 0)
- if ((fabric = ibnd_discover_fabric(ibmad_port, &portid,
- 0)) == NULL)
- IBWARN
- ("Single node discover failed; attempting full scan");
-
- if (!fabric) /* do a full scan */
- if ((fabric =
- ibnd_discover_fabric(ibmad_port, NULL, -1)) == NULL) {
- fprintf(stderr, "discover failed\n");
- rc = 1;
- goto close_port;
+ if (resolved >= 0) {
+ if (load_cache_file) {
+ if ((fabric = ibnd_load_fabric(load_cache_file, 0)) == NULL) {
+ fprintf(stderr, "loading cached fabric failed\n");
+ exit(1);
+ }
+ }
+ else {
+ if ((fabric = ibnd_discover_fabric(ibmad_port, &portid,
+ 0)) == NULL)
+ IBWARN
+ ("Single node discover failed; attempting full scan");
}
+ }
+
+ if (!fabric) { /* do a full scan */
+ if (load_cache_file) {
+ if ((fabric = ibnd_load_fabric(load_cache_file, 0)) == NULL) {
+ fprintf(stderr, "loading cached fabric failed\n");
+ exit(1);
+ }
+ }
+ else {
+ if ((fabric =
+ ibnd_discover_fabric(ibmad_port, NULL, -1)) == NULL) {
+ fprintf(stderr, "discover failed\n");
+ rc = 1;
+ goto close_port;
+ }
+ }
+ }
report_suppressed();