[openib-general] [PATCH] OpenSM/osm_node_info_rcv.c: Consolidate IB router handling with CA handling
Sasha Khapyorsky
sashak at voltaire.com
Tue Nov 7 10:38:37 PST 2006
On 12:56 Tue 07 Nov , Hal Rosenstock wrote:
> OpenSM/osm_node_info_rcv.c: Consolidate IB router handling with CA
> handling
>
> From: Rolf Manderscheid <rvm at obsidianresearch.com>
> Signed-off-by: Hal Rosenstock <halr at voltaire.com>
Good stuff. The patch looks good too.
Sasha
>
> Index: opensm/osm_node_info_rcv.c
> ===================================================================
> --- opensm/osm_node_info_rcv.c (revision 10056)
> +++ opensm/osm_node_info_rcv.c (working copy)
> @@ -408,12 +408,12 @@ __osm_ni_rcv_get_node_desc(
> The plock must be held before calling this function.
> **********************************************************************/
> static void
> -__osm_ni_rcv_process_new_ca(
> +__osm_ni_rcv_process_new_ca_or_router(
> IN const osm_ni_rcv_t* const p_rcv,
> IN osm_node_t* const p_node,
> IN const osm_madw_t* const p_madw )
> {
> - OSM_LOG_ENTER( p_rcv->p_log, __osm_ni_rcv_process_new_ca );
> + OSM_LOG_ENTER( p_rcv->p_log, __osm_ni_rcv_process_new_ca_or_router );
>
> __osm_ni_rcv_process_new_node( p_rcv, p_node, p_madw );
>
> @@ -434,7 +434,7 @@ __osm_ni_rcv_process_new_ca(
> The plock must be held before calling this function.
> **********************************************************************/
> static void
> -__osm_ni_rcv_process_existing_ca(
> +__osm_ni_rcv_process_existing_ca_or_router(
> IN const osm_ni_rcv_t* const p_rcv,
> IN osm_node_t* const p_node,
> IN const osm_madw_t* const p_madw )
> @@ -452,7 +452,7 @@ __osm_ni_rcv_process_existing_ca(
> osm_bind_handle_t h_bind;
> cl_status_t cl_status;
>
> - OSM_LOG_ENTER( p_rcv->p_log, __osm_ni_rcv_process_existing_ca );
> + OSM_LOG_ENTER( p_rcv->p_log, __osm_ni_rcv_process_existing_ca_or_router );
>
> p_smp = osm_madw_get_smp_ptr( p_madw );
> p_ni = (ib_node_info_t*)ib_smp_get_payload_ptr( p_smp );
> @@ -470,7 +470,7 @@ __osm_ni_rcv_process_existing_ca(
> if( p_port == (osm_port_t*)cl_qmap_end( p_guid_tbl ) )
> {
> osm_log( p_rcv->p_log, OSM_LOG_VERBOSE,
> - "__osm_ni_rcv_process_existing_ca: "
> + "__osm_ni_rcv_process_existing_ca_or_router: "
> "Creating new port object with GUID = 0x%" PRIx64 "\n",
> cl_ntoh64( p_ni->port_guid ) );
>
> @@ -480,7 +480,7 @@ __osm_ni_rcv_process_existing_ca(
> if( p_port == NULL )
> {
> osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_ca: ERR 0D04: "
> + "__osm_ni_rcv_process_existing_ca_or_router: ERR 0D04: "
> "Unable to create new port object\n" );
> goto Exit;
> }
> @@ -497,7 +497,7 @@ __osm_ni_rcv_process_existing_ca(
> Somehow, this port GUID already exists in the table.
> */
> osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_ca: ERR 0D12: "
> + "__osm_ni_rcv_process_existing_ca_or_router: ERR 0D12: "
> "Port 0x%" PRIx64 " already in the database!\n",
> cl_ntoh64( p_ni->port_guid ) );
>
> @@ -518,7 +518,7 @@ __osm_ni_rcv_process_existing_ca(
> if( cl_status != CL_SUCCESS )
> {
> osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_ca: ERR 0D08: "
> + "__osm_ni_rcv_process_existing_ca_or_router: ERR 0D08: "
> "Error %s adding to list\n",
> CL_STATUS_MSG( cl_status ) );
> osm_port_delete( &p_port );
> @@ -527,7 +527,7 @@ __osm_ni_rcv_process_existing_ca(
> else
> {
> osm_log( p_rcv->p_log, OSM_LOG_DEBUG,
> - "__osm_ni_rcv_process_existing_ca: "
> + "__osm_ni_rcv_process_existing_ca_or_router: "
> "Adding port GUID:0x%016" PRIx64 " to new_ports_list\n",
> cl_ntoh64(osm_node_get_node_guid( p_port->p_node )) );
> }
> @@ -544,7 +544,7 @@ __osm_ni_rcv_process_existing_ca(
> if ( !osm_physp_is_valid( p_physp ) )
> {
> osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_ca: ERR 0D19: "
> + "__osm_ni_rcv_process_existing_ca_or_router: ERR 0D19: "
> "Invalid physical port. Aborting discovery\n");
> goto Exit;
> }
> @@ -576,189 +576,7 @@ __osm_ni_rcv_process_existing_ca(
> if( status != IB_SUCCESS )
> {
> osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_ca: ERR 0D13: "
> - "Failure initiating PortInfo request (%s)\n",
> - ib_get_err_str(status));
> - }
> -
> - Exit:
> - OSM_LOG_EXIT( p_rcv->p_log );
> -}
> -
> -/**********************************************************************
> - The plock must be held before calling this function.
> -**********************************************************************/
> -static void
> -__osm_ni_rcv_process_new_router(
> - IN const osm_ni_rcv_t* const p_rcv,
> - IN osm_node_t* const p_node,
> - IN const osm_madw_t* const p_madw )
> -{
> - OSM_LOG_ENTER( p_rcv->p_log, __osm_ni_rcv_process_new_router );
> -
> - __osm_ni_rcv_process_new_node( p_rcv, p_node, p_madw );
> -
> - /*
> - A node guid of 0 is the corner case that indicates
> - we discovered our own node. Initialize the subnet
> - object with the SM's own port guid.
> - */
> - if( osm_madw_get_ni_context_ptr( p_madw )->node_guid == 0 )
> - {
> - p_rcv->p_subn->sm_port_guid = p_node->node_info.port_guid;
> - }
> -
> - OSM_LOG_EXIT( p_rcv->p_log );
> -}
> -
> -/**********************************************************************
> - The plock must be held before calling this function.
> -**********************************************************************/
> -static void
> -__osm_ni_rcv_process_existing_router(
> - IN const osm_ni_rcv_t* const p_rcv,
> - IN osm_node_t* const p_node,
> - IN const osm_madw_t* const p_madw )
> -{
> - ib_node_info_t *p_ni;
> - ib_smp_t *p_smp;
> - osm_port_t *p_port;
> - osm_port_t *p_port_check;
> - cl_qmap_t *p_guid_tbl;
> - osm_madw_context_t context;
> - uint8_t port_num;
> - osm_physp_t *p_physp;
> - ib_api_status_t status;
> - osm_dr_path_t *p_dr_path;
> - osm_bind_handle_t h_bind;
> - cl_status_t cl_status;
> -
> - OSM_LOG_ENTER( p_rcv->p_log, __osm_ni_rcv_process_existing_router );
> -
> - p_smp = osm_madw_get_smp_ptr( p_madw );
> - p_ni = (ib_node_info_t*)ib_smp_get_payload_ptr( p_smp );
> - port_num = ib_node_info_get_local_port_num( p_ni );
> - p_guid_tbl = &p_rcv->p_subn->port_guid_tbl;
> - h_bind = osm_madw_get_bind_handle( p_madw );
> -
> - /*
> - Determine if we have encountered this node through a
> - previously undiscovered port. If so, build the new
> - port object.
> - */
> - p_port = (osm_port_t*)cl_qmap_get( p_guid_tbl, p_ni->port_guid );
> -
> - if( p_port == (osm_port_t*)cl_qmap_end( p_guid_tbl ) )
> - {
> - osm_log( p_rcv->p_log, OSM_LOG_VERBOSE,
> - "__osm_ni_rcv_process_existing_router: "
> - "Creating new port object with GUID = 0x%" PRIx64 "\n",
> - cl_ntoh64( p_ni->port_guid ) );
> -
> - osm_node_init_physp( p_node, p_madw );
> -
> - p_port = osm_port_new( p_ni, p_node );
> - if( p_port == NULL )
> - {
> - osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_router: ERR 0D24: "
> - "Unable to create new port object\n" );
> - goto Exit;
> - }
> -
> - /*
> - Add the new port object to the database.
> - */
> - p_port_check = (osm_port_t*)cl_qmap_insert( p_guid_tbl,
> - p_ni->port_guid, &p_port->map_item );
> - if( p_port_check != p_port )
> - {
> - /*
> - We should never be here!
> - Somehow, this port GUID already exists in the table.
> - */
> - osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_router: ERR 0D22: "
> - "Port 0x%" PRIx64 " already in the database!\n",
> - cl_ntoh64( p_ni->port_guid ) );
> -
> - osm_port_delete( &p_port );
> -
> - goto Exit;
> - }
> -
> - /* If we are a master, then this means the port is new on the subnet.
> - Add it to the new_ports_list - need to send trap 64 on these ports.
> - The condition that we are master is true, since if we are in discovering
> - state (meaning we woke up from standby or we are just initializing),
> - then these ports may be new to us, but are not new on the subnet.
> - If we are master, then the subnet as we know it is the updated one,
> - and any new ports we encounter should cause trap 64. C14-72.1.1 */
> - if ( p_rcv->p_subn->sm_state == IB_SMINFO_STATE_MASTER )
> - {
> - cl_status = cl_list_insert_tail( &p_rcv->p_subn->new_ports_list, p_port );
> - if( cl_status != CL_SUCCESS )
> - {
> - osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_router: ERR 0D28: "
> - "Error %s adding to list\n",
> - CL_STATUS_MSG( cl_status ) );
> - osm_port_delete( &p_port );
> - goto Exit;
> - }
> - else
> - {
> - osm_log( p_rcv->p_log, OSM_LOG_DEBUG,
> - "__osm_ni_rcv_process_existing_router: "
> - "Adding port GUID:0x%016" PRIx64 " to new_ports_list\n",
> - cl_ntoh64(osm_node_get_node_guid( p_port->p_node )) );
> - }
> - }
> -
> - p_physp = osm_node_get_physp_ptr( p_node, port_num );
> - }
> - else
> - {
> - p_physp = osm_node_get_physp_ptr( p_node, port_num );
> -
> - CL_ASSERT( p_physp );
> -
> - if ( !osm_physp_is_valid( p_physp ) )
> - {
> - osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_router: ERR 0D29: "
> - "Invalid physical port. Aborting discovery\n");
> - goto Exit;
> - }
> -
> - /*
> - Update the DR Path to the port,
> - in case the old one is no longer available.
> - */
> - p_dr_path = osm_physp_get_dr_path_ptr( p_physp );
> -
> - osm_dr_path_init( p_dr_path, h_bind, p_smp->hop_count,
> - p_smp->initial_path );
> - }
> -
> - context.pi_context.node_guid = p_ni->node_guid;
> - context.pi_context.port_guid = p_ni->port_guid;
> - context.pi_context.set_method = FALSE;
> - context.pi_context.update_master_sm_base_lid = FALSE;
> - context.pi_context.ignore_errors = FALSE;
> - context.pi_context.light_sweep = FALSE;
> -
> - status = osm_req_get( p_rcv->p_gen_req,
> - osm_physp_get_dr_path_ptr( p_physp ),
> - IB_MAD_ATTR_PORT_INFO,
> - cl_hton32( port_num ),
> - CL_DISP_MSGID_NONE,
> - &context );
> -
> - if( status != IB_SUCCESS )
> - {
> - osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> - "__osm_ni_rcv_process_existing_router: ERR 0D23: "
> + "__osm_ni_rcv_process_existing_ca_or_router: ERR 0D13: "
> "Failure initiating PortInfo request (%s)\n",
> ib_get_err_str(status));
> }
> @@ -1037,14 +855,12 @@ __osm_ni_rcv_process_new(
> switch( p_ni->node_type )
> {
> case IB_NODE_TYPE_CA:
> - __osm_ni_rcv_process_new_ca( p_rcv, p_node, p_madw );
> + case IB_NODE_TYPE_ROUTER:
> + __osm_ni_rcv_process_new_ca_or_router( p_rcv, p_node, p_madw );
> break;
> case IB_NODE_TYPE_SWITCH:
> __osm_ni_rcv_process_new_switch( p_rcv, p_node, p_madw );
> break;
> - case IB_NODE_TYPE_ROUTER:
> - __osm_ni_rcv_process_new_router( p_rcv, p_node, p_madw );
> - break;
> default:
> osm_log( p_rcv->p_log, OSM_LOG_ERROR,
> "__osm_ni_rcv_process_new: ERR 0D16: "
> @@ -1099,12 +915,9 @@ __osm_ni_rcv_process_existing(
>
> switch( p_ni->node_type )
> {
> - case IB_NODE_TYPE_ROUTER:
> - __osm_ni_rcv_process_existing_router( p_rcv, p_node, p_madw );
> - break;
> -
> case IB_NODE_TYPE_CA:
> - __osm_ni_rcv_process_existing_ca( p_rcv, p_node, p_madw );
> + case IB_NODE_TYPE_ROUTER:
> + __osm_ni_rcv_process_existing_ca_or_router( p_rcv, p_node, p_madw );
> break;
>
> case IB_NODE_TYPE_SWITCH:
>
>
>
>
> _______________________________________________
> openib-general mailing list
> openib-general at openib.org
> http://openib.org/mailman/listinfo/openib-general
>
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
>
More information about the general
mailing list