Fixed a bug where the carrier connectivity point to point descriptor
was not being displayed properly when compiled on big endian machines.

Signed-off-by: Dan Gora <d...@adax.com>
---
 ipmitool/lib/ipmi_ekanalyzer.c |   39 ++++++++++++++++++++++++---------------
 1 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/ipmitool/lib/ipmi_ekanalyzer.c b/ipmitool/lib/ipmi_ekanalyzer.c
index 448b308..fb4f66a 100644
--- a/ipmitool/lib/ipmi_ekanalyzer.c
+++ b/ipmitool/lib/ipmi_ekanalyzer.c
@@ -798,7 +798,7 @@ ipmi_ek_display_carrier_connectivity( struct 
ipmi_ek_multi_header * record )
 {
    int return_value = ERROR_STATUS;
    struct fru_picmgext_carrier_p2p_record rsc_desc;
-   struct fru_picmgext_carrier_p2p_descriptor port_desc;
+   struct fru_picmgext_carrier_p2p_descriptor *port_desc;
 
    if ( record == NULL ){
       lprintf(LOG_ERR, "P2P connectivity record is invalid\n");
@@ -843,20 +843,29 @@ ipmi_ek_display_carrier_connectivity( struct 
ipmi_ek_multi_header * record )
                         (rsc_desc.resource_id & 0x0f));
          }
          while ( rsc_desc.p2p_count > 0 ){
-            memcpy ( &port_desc, &record->data[offset],
-                     sizeof ( struct fru_picmgext_carrier_p2p_descriptor ) );
-            offset += sizeof ( struct fru_picmgext_carrier_p2p_descriptor );
-            if ( (port_desc.remote_resource_id & AMC_MODULE) == AMC_MODULE ){
-               printf("\tPort %d =====> %s, Port %d\n", port_desc.local_port,
-                        val2str( (port_desc.remote_resource_id & 0x0f),
-                        ipmi_ekanalyzer_module_type), port_desc.remote_port );
-            }
-            else{
-               printf("\tPort %d =====> On Carrier Device ID %d, Port %d\n",
-                     port_desc.local_port,(port_desc.remote_resource_id & 
0x0f),
-                     port_desc.remote_port );
-            }
-            rsc_desc.p2p_count--;
+               unsigned char data[3];
+#ifndef WORDS_BIGENDIAN
+               data[0] = record->data[offset+0];
+               data[1] = record->data[offset+1];
+               data[2] = record->data[offset+2];
+#else
+               data[0] = record->data[offset+2];
+               data[1] = record->data[offset+1];
+               data[2] = record->data[offset+0];
+#endif         
+               port_desc = (struct fru_picmgext_carrier_p2p_descriptor*) data;
+               offset += sizeof ( struct fru_picmgext_carrier_p2p_descriptor );
+               if ( (port_desc->remote_resource_id & AMC_MODULE) == AMC_MODULE 
){
+                       printf("\tPort %d =====> %s, Port %d\n", 
port_desc->local_port,
+                       val2str( (port_desc->remote_resource_id & 0x0f),
+                       ipmi_ekanalyzer_module_type), port_desc->remote_port );
+               }
+               else {
+                       printf("\tPort %d =====> On Carrier Device ID %d, Port 
%d\n",
+                       port_desc->local_port,(port_desc->remote_resource_id & 
0x0f),
+                       port_desc->remote_port );
+               }
+               rsc_desc.p2p_count--;
          }
       }
       return_value = OK_STATUS;
-- 
1.7.7


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel

Reply via email to