[infiniband-diags] [3/4] Add lid and node description diff options for --diffcheck in iblinkinfo [REPOST]

2010-07-14 Thread Albert Chu
Hi Sasha,

This patch supports additional lid and node description diffing options
in iblinkinfo.  This is similar to the lid and nodescription --diffcheck
options in ibnetdiscover.

Al

-- 
Albert Chu
ch...@llnl.gov
Computer Scientist
High Performance Systems Division
Lawrence Livermore National Laboratory
---BeginMessage---

Signed-off-by: Albert Chu ch...@llnl.gov
---
 infiniband-diags/man/iblinkinfo.8 |7 +++-
 infiniband-diags/src/iblinkinfo.c |   53 -
 2 files changed, 51 insertions(+), 9 deletions(-)

diff --git a/infiniband-diags/man/iblinkinfo.8 
b/infiniband-diags/man/iblinkinfo.8
index 431ab0e..65ea919 100644
--- a/infiniband-diags/man/iblinkinfo.8
+++ b/infiniband-diags/man/iblinkinfo.8
@@ -55,14 +55,17 @@ for information on caching ibnetdiscover output.
 Load cached ibnetdiscover data and do a diff comparison to the current
 network or another cache.  A special diff output for iblinkinfo
 output will be displayed showing differences between the old and current
-fabric links.  See
+fabric links.  Be default, the following are compared for differences:
+port connections and port state.  See
 .B ibnetdiscover
 for information on caching ibnetdiscover output.
 .TP
 \fB\-\-diffcheck\fR key(s)
 Specify what diff checks should be done in the \fB\-\-diff\fR option above.
 Comma separate multiple diff check key(s).  The available diff checks
-are:\fIport\fR = port connections, \fIstate\fR = port state.
+are:\fIport\fR = port connections, \fIstate\fR = port state, \fIlid\fR = lids,
+\fInodedesc\fR = node descriptions.  If \fIport\fR is specified alongside 
\fIlid\fR
+or \fInodedesc\fR, remote port lids and node descriptions will also be 
compared.
 
 .SH AUTHOR
 .TP
diff --git a/infiniband-diags/src/iblinkinfo.c 
b/infiniband-diags/src/iblinkinfo.c
index b9c1c32..ae7bbf3 100644
--- a/infiniband-diags/src/iblinkinfo.c
+++ b/infiniband-diags/src/iblinkinfo.c
@@ -55,6 +55,8 @@
 
 #define DIFF_FLAG_PORT_CONNECTION  0x01
 #define DIFF_FLAG_PORT_STATE   0x02
+#define DIFF_FLAG_LID  0x04
+#define DIFF_FLAG_NODE_DESCRIPTION 0x08
 
 #define DIFF_FLAG_DEFAULT (DIFF_FLAG_PORT_CONNECTION | DIFF_FLAG_PORT_STATE)
 
@@ -224,7 +226,7 @@ void print_port(ibnd_node_t * node, ibnd_port_t * port, 
char *out_prefix)
 
 void print_switch_header(ibnd_node_t *node, int *out_header_flag, char 
*out_prefix)
 {
-   if (!(*out_header_flag)  !line_mode) {
+   if ((!out_header_flag || !(*out_header_flag))  !line_mode) {
char *remap =
remap_node_name(node_name_map, node-guid, 
node-nodedesc);
printf(%sSwitch 0x%016 PRIx64  %s:\n,
@@ -308,9 +310,25 @@ void diff_switch_ports(ibnd_node_t * fabric1_node, 
ibnd_node_t * fabric2_node,
output_diff++;
}
 
+   if (data-diff_flags  DIFF_FLAG_PORT_CONNECTION
+data-diff_flags  DIFF_FLAG_LID
+fabric1_port  fabric2_port
+fabric1_port-remoteport  fabric2_port-remoteport
+fabric1_port-remoteport-base_lid != 
fabric2_port-remoteport-base_lid)
+   output_diff++;
+
+   if (data-diff_flags  DIFF_FLAG_PORT_CONNECTION
+data-diff_flags  DIFF_FLAG_NODE_DESCRIPTION
+fabric1_port  fabric2_port
+fabric1_port-remoteport  fabric2_port-remoteport
+memcmp(fabric1_port-remoteport-node-nodedesc,
+ fabric2_port-remoteport-node-nodedesc,
+ IB_SMP_DATA_SIZE))
+   output_diff++;
+
if (output_diff  fabric1_port) {
print_switch_header(fabric1_node,
-   head_print,
+   head_print,
NULL);
print_port(fabric1_node,
   fabric1_port,
@@ -319,7 +337,7 @@ void diff_switch_ports(ibnd_node_t * fabric1_node, 
ibnd_node_t * fabric2_node,
 
if (output_diff  fabric2_port) {
print_switch_header(fabric1_node,
-   head_print,
+   head_print,
NULL);
print_port(fabric2_node,
   fabric2_port,
@@ -340,7 +358,22 @@ void diff_switch_iter(ibnd_node_t * fabric1_node, void 
*iter_user_data)
if (!fabric2_node)
print_switch(fabric1_node, data-fabric1_prefix);
else if (data-diff_flags 
-(DIFF_FLAG_PORT_CONNECTION | DIFF_FLAG_PORT_STATE)) {
+(DIFF_FLAG_PORT_CONNECTION | DIFF_FLAG_PORT_STATE
+ | DIFF_FLAG_LID | DIFF_FLAG_NODE_DESCRIPTION)) {
+
+   if ((data-diff_flags  DIFF_FLAG_LID
+ 

[infiniband-diags] [3/4] Add lid and node description diff options for --diffcheck in iblinkinfo

2010-04-26 Thread Al Chu
Hi Sasha,

This patch supports additional lid and node description diffing options
in iblinkinfo.  This is similar to the lid and nodescription --diffcheck
options in ibnetdiscover.

Al

-- 
Albert Chu
ch...@llnl.gov
Computer Scientist
High Performance Systems Division
Lawrence Livermore National Laboratory
---BeginMessage---

Signed-off-by: Albert Chu ch...@llnl.gov
---
 infiniband-diags/man/iblinkinfo.8 |7 +++-
 infiniband-diags/src/iblinkinfo.c |   53 -
 2 files changed, 51 insertions(+), 9 deletions(-)

diff --git a/infiniband-diags/man/iblinkinfo.8 
b/infiniband-diags/man/iblinkinfo.8
index 431ab0e..65ea919 100644
--- a/infiniband-diags/man/iblinkinfo.8
+++ b/infiniband-diags/man/iblinkinfo.8
@@ -55,14 +55,17 @@ for information on caching ibnetdiscover output.
 Load cached ibnetdiscover data and do a diff comparison to the current
 network or another cache.  A special diff output for iblinkinfo
 output will be displayed showing differences between the old and current
-fabric links.  See
+fabric links.  Be default, the following are compared for differences:
+port connections and port state.  See
 .B ibnetdiscover
 for information on caching ibnetdiscover output.
 .TP
 \fB\-\-diffcheck\fR key(s)
 Specify what diff checks should be done in the \fB\-\-diff\fR option above.
 Comma separate multiple diff check key(s).  The available diff checks
-are:\fIport\fR = port connections, \fIstate\fR = port state.
+are:\fIport\fR = port connections, \fIstate\fR = port state, \fIlid\fR = lids,
+\fInodedesc\fR = node descriptions.  If \fIport\fR is specified alongside 
\fIlid\fR
+or \fInodedesc\fR, remote port lids and node descriptions will also be 
compared.
 
 .SH AUTHOR
 .TP
diff --git a/infiniband-diags/src/iblinkinfo.c 
b/infiniband-diags/src/iblinkinfo.c
index a4a8e49..19adc20 100644
--- a/infiniband-diags/src/iblinkinfo.c
+++ b/infiniband-diags/src/iblinkinfo.c
@@ -55,6 +55,8 @@
 
 #define DIFF_FLAG_PORT_CONNECTION  0x01
 #define DIFF_FLAG_PORT_STATE   0x02
+#define DIFF_FLAG_LID  0x04
+#define DIFF_FLAG_NODE_DESCRIPTION 0x08
 
 #define DIFF_FLAG_DEFAULT (DIFF_FLAG_PORT_CONNECTION | DIFF_FLAG_PORT_STATE)
 
@@ -224,7 +226,7 @@ void print_port(ibnd_node_t * node, ibnd_port_t * port, 
char *out_prefix)
 
 void print_switch_header(ibnd_node_t *node, int *out_header_flag, char 
*out_prefix)
 {
-   if (!(*out_header_flag)  !line_mode) {
+   if ((!out_header_flag || !(*out_header_flag))  !line_mode) {
char *remap =
remap_node_name(node_name_map, node-guid, 
node-nodedesc);
printf(%sSwitch 0x%016 PRIx64  %s:\n,
@@ -308,9 +310,25 @@ void diff_switch_ports(ibnd_node_t * fabric1_node, 
ibnd_node_t * fabric2_node,
output_diff++;
}
 
+   if (data-diff_flags  DIFF_FLAG_PORT_CONNECTION
+data-diff_flags  DIFF_FLAG_LID
+fabric1_port  fabric2_port
+fabric1_port-remoteport  fabric2_port-remoteport
+fabric1_port-remoteport-base_lid != 
fabric2_port-remoteport-base_lid)
+   output_diff++;
+
+   if (data-diff_flags  DIFF_FLAG_PORT_CONNECTION
+data-diff_flags  DIFF_FLAG_NODE_DESCRIPTION
+fabric1_port  fabric2_port
+fabric1_port-remoteport  fabric2_port-remoteport
+memcmp(fabric1_port-remoteport-node-nodedesc,
+ fabric2_port-remoteport-node-nodedesc,
+ IB_SMP_DATA_SIZE))
+   output_diff++;
+
if (output_diff  fabric1_port) {
print_switch_header(fabric1_node,
-   head_print,
+   head_print,
NULL);
print_port(fabric1_node,
   fabric1_port,
@@ -319,7 +337,7 @@ void diff_switch_ports(ibnd_node_t * fabric1_node, 
ibnd_node_t * fabric2_node,
 
if (output_diff  fabric2_port) {
print_switch_header(fabric1_node,
-   head_print,
+   head_print,
NULL);
print_port(fabric2_node,
   fabric2_port,
@@ -340,7 +358,22 @@ void diff_switch_iter(ibnd_node_t * fabric1_node, void 
*iter_user_data)
if (!fabric2_node)
print_switch(fabric1_node, data-fabric1_prefix);
else if (data-diff_flags 
-(DIFF_FLAG_PORT_CONNECTION | DIFF_FLAG_PORT_STATE)) {
+(DIFF_FLAG_PORT_CONNECTION | DIFF_FLAG_PORT_STATE
+ | DIFF_FLAG_LID | DIFF_FLAG_NODE_DESCRIPTION)) {
+
+   if ((data-diff_flags  DIFF_FLAG_LID
+