OpenSM: Add a printable node description to osm_node_t
Also, convert memcpy's to use this rather than temporary one

Signed-off-by: Ira K. Weiny <[EMAIL PROTECTED]>
Signed-off-by: Hal Rosenstock <[EMAIL PROTECTED]>

diff --git a/osm/include/opensm/osm_node.h b/osm/include/opensm/osm_node.h
index 8417f10..6f95d5d 100644
--- a/osm/include/opensm/osm_node.h
+++ b/osm/include/opensm/osm_node.h
@@ -107,6 +107,7 @@ typedef struct _osm_node
        ib_node_desc_t  node_desc;
        uint32_t        discovery_count;
        uint32_t        physp_tbl_size;
+       char            print_desc[IB_NODE_DESCRIPTION_SIZE+1];
        osm_physp_t     physp_table[1];
 } osm_node_t;
 /*
@@ -135,6 +136,9 @@ typedef struct _osm_node
 *              than the number of ports in the node, since port numbers
 *              start with 1 for some bizzare reason.
 *
+*      print_desc
+*              A printable version of the node description.
+*
 *      phsyp_table
 *              Array of physical port objects belonging to this node.
 *              Index is contiguous by local port number.
diff --git a/osm/opensm/osm_drop_mgr.c b/osm/opensm/osm_drop_mgr.c
index 6c5939e..0d08ff6 100644
--- a/osm/opensm/osm_drop_mgr.c
+++ b/osm/opensm/osm_drop_mgr.c
@@ -367,19 +367,12 @@ __osm_drop_mgr_remove_port(
 
   if (osm_log_is_active( p_mgr->p_log, OSM_LOG_INFO ))
   {
-    char desc[IB_NODE_DESCRIPTION_SIZE + 1];
-
-    if (p_node)
-    {
-      memcpy(desc, p_node->node_desc.description, IB_NODE_DESCRIPTION_SIZE);
-      desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
-    }
     osm_log( p_mgr->p_log, OSM_LOG_INFO,
              "__osm_drop_mgr_remove_port: "
              "Removed port with GUID:0x%016" PRIx64
              " LID range [0x%X,0x%X] of node:%s\n",
              cl_ntoh64( port_gid.unicast.interface_id ),
-             min_lid_ho, max_lid_ho, p_node ? desc : "UNKNOWN" );
+             min_lid_ho, max_lid_ho, p_node ? p_node->print_desc : "UNKNOWN" );
   }
 
  Exit:
diff --git a/osm/opensm/osm_node_desc_rcv.c b/osm/opensm/osm_node_desc_rcv.c
index 13c5a93..fc96c12 100644
--- a/osm/opensm/osm_node_desc_rcv.c
+++ b/osm/opensm/osm_node_desc_rcv.c
@@ -69,23 +69,23 @@ __osm_nd_rcv_process_nd(
   IN osm_node_t* const p_node,
   IN const ib_node_desc_t* const p_nd )
 {
-  char desc[IB_NODE_DESCRIPTION_SIZE + 1];
   OSM_LOG_ENTER( p_rcv->p_log, __osm_nd_rcv_process_nd );
 
+  memcpy( &p_node->node_desc.description, p_nd, sizeof(*p_nd) );
+
+  /* also set up a printable version */
+  memcpy( &p_node->print_desc, p_nd, sizeof(*p_nd) );
+  p_node->print_desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
+
   if( osm_log_is_active( p_rcv->p_log, OSM_LOG_VERBOSE ) )
   {
-    memcpy( desc, p_nd, sizeof(*p_nd) );
-    /* Guarantee null termination before printing. */
-    desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
-
     osm_log( p_rcv->p_log, OSM_LOG_VERBOSE,
              "__osm_nd_rcv_process_nd: "
              "Node 0x%" PRIx64 "\n\t\t\t\tDescription = %s\n",
-             cl_ntoh64( osm_node_get_node_guid( p_node )), desc );
+             cl_ntoh64( osm_node_get_node_guid( p_node )),
+             p_node->print_desc);
   }
 
-  memcpy( &p_node->node_desc.description, p_nd, sizeof(*p_nd) );
-
   OSM_LOG_EXIT( p_rcv->p_log );
 }
 
diff --git a/osm/opensm/osm_state_mgr.c b/osm/opensm/osm_state_mgr.c
index 16297c9..2905857 100644
--- a/osm/opensm/osm_state_mgr.c
+++ b/osm/opensm/osm_state_mgr.c
@@ -1076,7 +1076,6 @@ __osm_topology_file_create(
    const osm_node_t *p_node;
    char *file_name;
    FILE *rc;
-   char desc[IB_NODE_DESCRIPTION_SIZE + 1];
 
    OSM_LOG_ENTER( p_mgr->p_log, __osm_topology_file_create );
 
@@ -1139,10 +1138,6 @@ __osm_topology_file_create(
                p_default_physp = p_physp;
             }
 
-            memcpy(desc, p_node->node_desc.description,
-                   IB_NODE_DESCRIPTION_SIZE);
-            desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
-
             fprintf( rc, "{ %s%s Ports:%02X"
                      " SystemGUID:%016" PRIx64
                      " NodeGUID:%016" PRIx64
@@ -1165,7 +1160,7 @@ __osm_topology_file_create(
                                 ( &p_node->node_info ) ),
                      cl_ntoh16( p_node->node_info.device_id ),
                      cl_ntoh32( p_node->node_info.revision ),
-                     desc,
+                     p_node->print_desc,
                      cl_ntoh16( p_default_physp->port_info.base_lid ),
                      cPort );
 
@@ -1180,10 +1175,6 @@ __osm_topology_file_create(
                p_default_physp = p_rphysp;
             }
 
-            memcpy(desc, p_nbnode->node_desc.description,
-                   IB_NODE_DESCRIPTION_SIZE);
-            desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
-
             fprintf( rc, "{ %s%s Ports:%02X"
                      " SystemGUID:%016" PRIx64
                      " NodeGUID:%016" PRIx64
@@ -1206,7 +1197,7 @@ __osm_topology_file_create(
                                 ( &p_nbnode->node_info ) ),
                      cl_ntoh32( p_nbnode->node_info.device_id ),
                      cl_ntoh32( p_nbnode->node_info.revision ),
-                     desc,
+                     p_nbnode->print_desc,
                      cl_ntoh16( p_default_physp->port_info.base_lid ),
                      p_rphysp->port_num );
 
@@ -1662,7 +1653,6 @@ __osm_state_mgr_report_new_ports(
    ib_net64_t port_guid;
    uint16_t min_lid_ho;
    uint16_t max_lid_ho;
-   char desc[IB_NODE_DESCRIPTION_SIZE + 1];
 
    OSM_LOG_ENTER( p_mgr->p_log, __osm_state_mgr_report_new_ports );
 
@@ -1704,19 +1694,13 @@ __osm_state_mgr_report_new_ports(
                   ib_get_err_str( status ) );
       }
       osm_port_get_lid_range_ho( p_port, &min_lid_ho, &max_lid_ho );
-      if (p_port->p_node)
-      {
-         memcpy(desc, p_port->p_node->node_desc.description,
-                IB_NODE_DESCRIPTION_SIZE);
-         desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
-      }
       osm_log( p_mgr->p_log, OSM_LOG_INFO,
                "__osm_state_mgr_report_new_ports: "
                "Discovered new port with GUID:0x%016" PRIx64
                " LID range [0x%X,0x%X] of node:%s\n",
                cl_ntoh64( port_gid.unicast.interface_id ),
                min_lid_ho, max_lid_ho,
-               p_port->p_node ? desc : "UNKNOWN" );
+               p_port->p_node ? p_port->p_node->print_desc : "UNKNOWN" );
 
       p_port =
          ( osm_port_t
diff --git a/osm/opensm/osm_ucast_ftree.c b/osm/opensm/osm_ucast_ftree.c
index cb40ab6..21aa4a8 100644
--- a/osm/opensm/osm_ucast_ftree.c
+++ b/osm/opensm/osm_ucast_ftree.c
@@ -1251,7 +1251,6 @@ __osm_ftree_fabric_dump_hca_ordering(
    uint32_t             i;
    uint32_t             j;
 
-   char desc[IB_NODE_DESCRIPTION_SIZE + 1];
    char path[1024];
    FILE * p_hca_ordering_file;
    char * filename = "osm-ftree-ca-order.dump";
@@ -1278,11 +1277,10 @@ __osm_ftree_fabric_dump_hca_ordering(
       {
          p_group = p_sw->down_port_groups[j];
          p_hca = p_group->remote_hca_or_sw.remote_hca;
-         
memcpy(desc,p_hca->p_osm_node->node_desc.description,IB_NODE_DESCRIPTION_SIZE);
-         desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
 
          fprintf(p_hca_ordering_file,"0x%x\t%s\n", 
-                 cl_ntoh16(p_group->remote_base_lid), desc);
+                 cl_ntoh16(p_group->remote_base_lid),
+                 p_hca->p_osm_node->print_desc);
       }
 
       /* now print dummy HCAs */
diff --git a/osm/opensm/osm_ucast_mgr.c b/osm/opensm/osm_ucast_mgr.c
index ded3880..3564ba7 100644
--- a/osm/opensm/osm_ucast_mgr.c
+++ b/osm/opensm/osm_ucast_mgr.c
@@ -361,14 +361,12 @@ ucast_mgr_dump_lfts(cl_map_item_t *p_map
        unsigned max_port = osm_switch_get_num_ports(p_sw);
        uint16_t lid;
        uint8_t port;
-       char desc[IB_NODE_DESCRIPTION_SIZE + 1];
 
-       memcpy(desc, p_node->node_desc.description, IB_NODE_DESCRIPTION_SIZE);
-       desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
        fprintf(file, "Unicast lids [0x0-0x%x] of switch Lid %u guid 0x%016"
                PRIx64 " (\'%s\'):\n",
                max_lid, osm_node_get_base_lid(p_node, 0),
-               cl_ntoh64(osm_node_get_node_guid(p_node)), desc);
+               cl_ntoh64(osm_node_get_node_guid(p_node)),
+               p_node->print_desc);
        for (lid = 0; lid <= max_lid; lid++) {
                osm_port_t *p_port;
                port = osm_switch_get_port_by_lid(p_sw, lid);
@@ -381,12 +379,10 @@ ucast_mgr_dump_lfts(cl_map_item_t *p_map
                p_port = cl_ptr_vector_get(&p_mgr->p_subn->port_lid_tbl, lid);
                if (p_port) {
                        p_node = osm_port_get_parent_node(p_port);
-                       memcpy(desc, p_node->node_desc.description,
-                              IB_NODE_DESCRIPTION_SIZE);
-                       desc[IB_NODE_DESCRIPTION_SIZE] = '\0';
                        fprintf(file, "%s portguid 0x016%" PRIx64 ": \'%s\'",
                                ib_get_node_type_str(osm_node_get_type(p_node)),
-                               cl_ntoh64(osm_port_get_guid(p_port)), desc);
+                               cl_ntoh64(osm_port_get_guid(p_port)),
+                               p_node->print_desc);
                }
                else
                        fprintf(file, "unknown node and type");




_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to