Hi Hal, I am re-sending the patch with another fix. Please ignore this patch. Thanks, Yael
-----Original Message----- From: Yael Kalka Sent: Wednesday, February 15, 2006 12:07 PM To: [EMAIL PROTECTED] Cc: openib-general@openib.org; Eitan Zahavi; Yael Kalka Subject: [PATCH] Opensm - osmt_service.c fixes Hi Hal, The following patch fixes some problems in osmt_service.c flow, along with cosmetic cleanups of the code. Thanks, Yael Signed-off-by: Yael Kalka <[EMAIL PROTECTED]> Index: osmtest/osmt_service.c =================================================================== --- osmtest/osmt_service.c (revision 5403) +++ osmtest/osmt_service.c (working copy) @@ -80,7 +80,7 @@ osmt_register_service( IN osmtest_t * co osm_log( &p_osmt->log, OSM_LOG_INFO, "osmt_register_service: " - "Registering Service: name:%s id:0x%" PRIx64 ".\n", + "Registering service: name:%s id:0x%" PRIx64 "\n", service_name, cl_ntoh64(service_id)); cl_memclr( &req, sizeof( req ) ); @@ -140,8 +140,8 @@ osmt_register_service( IN osmtest_t * co if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_register_service: ERR 0303: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_register_service: ERR 4A01: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } @@ -150,14 +150,14 @@ osmt_register_service( IN osmtest_t * co if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_register_service: ERR 0364: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_register_service: ERR 4A02: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); if( status == IB_REMOTE_ERROR ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_register_service: " - "Remote error = %s.\n", + "Remote error = %s\n", ib_get_mad_status_str( osm_madw_get_mad_ptr ( context.result. p_result_madw ) ) ); @@ -195,7 +195,7 @@ osmt_register_service_with_full_key ( IN osm_log( &p_osmt->log, OSM_LOG_INFO, "osmt_register_service_with_full_key: " - "Registering Service: name:%s id:0x%" PRIx64 ".\n", + "Registering service: name:%s id:0x%" PRIx64 "\n", service_name, cl_ntoh64(service_id)); cl_memclr( &req, sizeof( req ) ); @@ -256,8 +256,8 @@ osmt_register_service_with_full_key ( IN if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_register_service_with_full_key: ERR 0303: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_register_service_with_full_key: ERR 4A03: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } @@ -280,7 +280,7 @@ osmt_register_service_with_full_key ( IN status = IB_REMOTE_ERROR; osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_register_service_with_full_key:" - "Data mismatch in service_key.\n" + "Data mismatch in service_key\n" ); goto Exit; } @@ -288,14 +288,14 @@ osmt_register_service_with_full_key ( IN if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_register_service_with_full_key: ERR 0364: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_register_service_with_full_key: ERR 4A04: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); if( status == IB_REMOTE_ERROR ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_register_service_with_full_key: " - "Remote error = %s.\n", + "Remote error = %s\n", ib_get_mad_status_str( osm_madw_get_mad_ptr ( context.result. p_result_madw ) ) ); @@ -337,7 +337,7 @@ osmt_register_service_with_data( IN osmt osm_log( &p_osmt->log, OSM_LOG_INFO, "osmt_register_service_with_data: " - "Registering Service: name:%s id:0x%" PRIx64 ".\n", + "Registering service: name:%s id:0x%" PRIx64 "\n", service_name, cl_ntoh64(service_id)); cl_memclr( &req, sizeof( req ) ); @@ -426,8 +426,8 @@ osmt_register_service_with_data( IN osmt if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_register_service_with_data: ERR 0303: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_register_service_with_data: ERR 4A05: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } @@ -436,14 +436,14 @@ osmt_register_service_with_data( IN osmt if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_register_service_with_data: ERR 0364: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_register_service_with_data: ERR 4A06: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); if( status == IB_REMOTE_ERROR ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_register_service_with_data: " - "Remote error = %s.\n", + "Remote error = %s\n", ib_get_mad_status_str( osm_madw_get_mad_ptr ( context.result. p_result_madw ) ) ); @@ -464,7 +464,7 @@ osmt_register_service_with_data( IN osmt status = IB_REMOTE_ERROR; osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_register_service_with_data: " - "Data mismatch in service_data8.\n" + "Data mismatch in service_data8\n" ); goto Exit; } @@ -499,7 +499,7 @@ osmt_get_service_by_id_and_name ( IN osm if( osm_log_is_active( &p_osmt->log, OSM_LOG_VERBOSE ) ) osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_id_and_name: " - "Getting Service Record by id 0x%016" PRIx64 " and name : %s\n", + "Getting service record: id:0x%016" PRIx64 " and name:%s\n", cl_ntoh64(sid),sr_name); /* @@ -509,26 +509,29 @@ osmt_get_service_by_id_and_name ( IN osm * * The query structures are locals. */ - cl_memclr( &svc_rec, sizeof( svc_rec ) ); cl_memclr( &req, sizeof( req ) ); cl_memclr( &context, sizeof( context ) ); - cl_memclr( &user, sizeof( user ) ); - /* set the new service record fields */ - cl_memclr(svc_rec.service_name, sizeof(svc_rec.service_name)); - cl_memcpy(svc_rec.service_name, sr_name, - (strlen(sr_name)+1)*sizeof(char)); - svc_rec.service_id = sid; - /* prepare the data used for this query */ + context.p_osmt = p_osmt; + + /* prepare the data used for this query */ req.query_type = OSMV_QUERY_USER_DEFINED; req.timeout_ms = p_osmt->opt.transaction_timeout; req.retry_cnt = p_osmt->opt.retry_count; req.flags = OSM_SA_FLAGS_SYNC; req.query_context = &context; req.pfn_query_cb = osmtest_query_res_cb; - req.p_query_input = &user; req.sm_key = 0; + cl_memclr( &svc_rec, sizeof( svc_rec ) ); + cl_memclr( &user, sizeof( user ) ); + /* set the new service record fields */ + cl_memclr(svc_rec.service_name, sizeof(svc_rec.service_name)); + cl_memcpy(svc_rec.service_name, sr_name, + (strlen(sr_name)+1)*sizeof(char)); + svc_rec.service_id = sid; + req.p_query_input = &user; + user.method = IB_MAD_METHOD_GET; user.attr_id = IB_MAD_ATTR_SERVICE_RECORD; user.comp_mask = IB_SR_COMPMASK_SID | IB_SR_COMPMASK_SNAME; @@ -539,62 +542,73 @@ osmt_get_service_by_id_and_name ( IN osm if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_id_and_name: ERR 0365: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_get_service_by_id_and_name: ERR 4A07: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } status = context.result.status; + num_recs = context.result.result_cnt; if( status != IB_SUCCESS ) { - num_recs = 0; - if (status != IB_INVALID_PARAMETER) - { - osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_id_and_name: ERR 0370: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); - } + char mad_stat_err[256]; + /* If the failure is due to IB_SA_MAD_STATUS_NO_RECORDS and rec_num is 0, + then this is fine. */ if( status == IB_REMOTE_ERROR ) + strcpy(mad_stat_err, ib_get_mad_status_str( + osm_madw_get_mad_ptr(context.result.p_result_madw) ) ); + else + strcpy(mad_stat_err, ib_get_err_str(status) ); + if( status == IB_REMOTE_ERROR && + !strcmp(mad_stat_err, "IB_SA_MAD_STATUS_NO_RECORDS") && + rec_num == 0 ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_get_service_by_id_and_name: " - "Remote error = %s.\n", - ib_get_mad_status_str( osm_madw_get_mad_ptr - ( context.result. - p_result_madw ) ) ); - } - goto Exit; + "IS EXPECTED ERROR ^^^^\n"); + status = IB_SUCCESS; } else { - num_recs = context.result.result_cnt; + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_get_service_by_id_and_name: ERR 4A08: " + "Query failed:%s (%s)\n", + ib_get_err_str(status), + mad_stat_err ); + goto Exit; + } } if ( num_recs != rec_num ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_get_service_by_id_and_name: " - "Unmatched record number, Expeceted : %d, Got : %d.\n", + "Unmatched number of records: expeceted:%d, received:%d\n", rec_num, num_recs); status = IB_REMOTE_ERROR; goto Exit; } p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, 0 ); + *p_out_rec = *p_rec; + + if (num_recs) + { osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_id_and_name: " - "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n", + "Found service record: name:%s id:0x%016" PRIx64 "\n", p_rec->service_name, cl_ntoh64(p_rec->service_id)); osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_DEBUG); - *p_out_rec = *p_rec; + } Exit: osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_id_and_name: " - "Expected num of records is : %d, Found number of records : %d\n", - rec_num,num_recs); + "Expected and found $d records\n", + rec_num ); + if( context.result.p_result_madw != NULL ) { osm_mad_pool_put( &p_osmt->mad_pool, context.result.p_result_madw ); @@ -623,7 +637,7 @@ osmt_get_service_by_id ( IN osmtest_t * if( osm_log_is_active( &p_osmt->log, OSM_LOG_VERBOSE ) ) osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_id: " - "Getting Service Record by id 0x%016" PRIx64 "\n", + "Getting service record: id:0x%016" PRIx64 "\n", cl_ntoh64(sid)); /* @@ -633,23 +647,26 @@ osmt_get_service_by_id ( IN osmtest_t * * * The query structures are locals. */ - cl_memclr( &svc_rec, sizeof( svc_rec ) ); cl_memclr( &req, sizeof( req ) ); cl_memclr( &context, sizeof( context ) ); - cl_memclr( &user, sizeof( user ) ); - /* set the new service record fields */ - svc_rec.service_id = sid; - /* prepare the data used for this query */ + context.p_osmt = p_osmt; + + /* prepare the data used for this query */ req.query_type = OSMV_QUERY_USER_DEFINED; req.timeout_ms = p_osmt->opt.transaction_timeout; req.retry_cnt = p_osmt->opt.retry_count; req.flags = OSM_SA_FLAGS_SYNC; req.query_context = &context; req.pfn_query_cb = osmtest_query_res_cb; - req.p_query_input = &user; req.sm_key = 0; + cl_memclr( &svc_rec, sizeof( svc_rec ) ); + cl_memclr( &user, sizeof( user ) ); + /* set the new service record fields */ + svc_rec.service_id = sid; + req.p_query_input = &user; + user.method = IB_MAD_METHOD_GET; user.attr_id = IB_MAD_ATTR_SERVICE_RECORD; user.comp_mask = IB_SR_COMPMASK_SID; @@ -660,62 +677,74 @@ osmt_get_service_by_id ( IN osmtest_t * if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_id: ERR 0365: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_get_service_by_id: ERR 4A09: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } status = context.result.status; + num_recs = context.result.result_cnt; if( status != IB_SUCCESS ) { - num_recs = 0; - if (status != IB_INVALID_PARAMETER) - { - osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_id: ERR 0370: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); - } + char mad_stat_err[256]; + /* If the failure is due to IB_SA_MAD_STATUS_NO_RECORDS and rec_num is 0, + then this is fine. */ if( status == IB_REMOTE_ERROR ) + strcpy(mad_stat_err, ib_get_mad_status_str( + osm_madw_get_mad_ptr(context.result.p_result_madw) ) ); + else + strcpy(mad_stat_err, ib_get_err_str(status) ); + + if( status == IB_REMOTE_ERROR && + !strcmp(mad_stat_err, "IB_SA_MAD_STATUS_NO_RECORDS") && + rec_num == 0 ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_get_service_by_id: " - "Remote error = %s.\n", - ib_get_mad_status_str( osm_madw_get_mad_ptr - ( context.result. - p_result_madw ) ) ); - } - goto Exit; + "IS EXPECTED ERROR ^^^^\n"); + status = IB_SUCCESS; } else { - num_recs = context.result.result_cnt; + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_get_service_by_id: ERR 4A0A: " + "Query failed:%s (%s)\n", + ib_get_err_str(status), + mad_stat_err ); + goto Exit; + } } if ( num_recs != rec_num ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_id: " - "Unmatched record number; Expected : %d, Got : %d.\n", + "osmt_get_service_by_id: ERR 4A0B: " + "Unmatched number of records: expected:%d received:%d\n", rec_num, num_recs); status = IB_REMOTE_ERROR; goto Exit; } p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, 0 ); + *p_out_rec = *p_rec; + + if (num_recs) + { osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_id: " - "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n", + "Found service record: name:%s id:0x%016" PRIx64 "\n", p_rec->service_name, cl_ntoh64(p_rec->service_id)); osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_DEBUG); - *p_out_rec = *p_rec; + } Exit: osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_id: " - "Expected num of records is : %d, Found number of records : %d\n", - rec_num,num_recs); + "Expected and found %d records\n", + rec_num ); + if( context.result.p_result_madw != NULL ) { osm_mad_pool_put( &p_osmt->mad_pool, context.result.p_result_madw ); @@ -737,22 +766,25 @@ osmt_get_service_by_name_and_key ( IN os osmtest_req_context_t context; osmv_query_req_t req; ib_service_record_t svc_rec,*p_rec; - uint32_t num_recs = 0; + uint32_t num_recs = 0, i; osmv_user_query_t user; OSM_LOG_ENTER( &p_osmt->log, osmt_get_service_by_name_and_key ); if( osm_log_is_active( &p_osmt->log, OSM_LOG_VERBOSE ) ) { - uint8_t i; + char buf_service_key[33]; + + sprintf(buf_service_key, + "0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + skey[0], skey[1], skey[2], skey[3], skey[4], skey[5], skey[6], skey[7], + skey[8], skey[9], skey[10], skey[11], skey[12], skey[13], skey[14], + skey[15]); + osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_name_and_key: " - "Getting Service Record by Name and Key :%s.\n", - sr_name); - for (i=0 ; i<=15 ; i++) - osm_log( &p_osmt->log, OSM_LOG_VERBOSE, - "Service Key[%u] = %u\n", - i,skey[i]); + "Getting service record: name:%s and key:%s\n", + sr_name, buf_service_key ); } /* @@ -762,92 +794,108 @@ osmt_get_service_by_name_and_key ( IN os * * The query structures are locals. */ - cl_memclr( &svc_rec, sizeof( svc_rec ) ); cl_memclr( &req, sizeof( req ) ); cl_memclr( &context, sizeof( context ) ); - cl_memclr( &user, sizeof( user ) ); - /* set the new service record fields */ - cl_memclr(svc_rec.service_name, sizeof(svc_rec.service_name)); - cl_memcpy(svc_rec.service_name, sr_name, - (strlen(sr_name)+1)*sizeof(char)); - /* prepare the data used for this query */ context.p_osmt = p_osmt; + + /* prepare the data used for this query */ req.query_type = OSMV_QUERY_USER_DEFINED; req.timeout_ms = p_osmt->opt.transaction_timeout; req.retry_cnt = p_osmt->opt.retry_count; req.flags = OSM_SA_FLAGS_SYNC; req.query_context = &context; req.pfn_query_cb = osmtest_query_res_cb; - req.p_query_input = &user; req.sm_key = 0; + cl_memclr( &svc_rec, sizeof( svc_rec ) ); + cl_memclr( &user, sizeof( user ) ); + /* set the new service record fields */ + cl_memclr(svc_rec.service_name, sizeof(svc_rec.service_name)); + cl_memcpy(svc_rec.service_name, sr_name, + (strlen(sr_name)+1)*sizeof(char)); + for (i=0 ; i<=15 ; i++) + svc_rec.service_key[i] = skey[i]; + + req.p_query_input = &user; + user.method = IB_MAD_METHOD_GET; user.attr_id = IB_MAD_ATTR_SERVICE_RECORD; user.comp_mask = IB_SR_COMPMASK_SNAME | IB_SR_COMPMASK_SKEY; user.attr_offset = ib_get_attr_offset( sizeof( ib_service_record_t ) ); user.p_attr = &svc_rec; - status = osmv_query_sa( p_osmt->h_bind, &req ); if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_name_and_key: ERR 0365: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_get_service_by_name_and_key: ERR 4A0C: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } status = context.result.status; + num_recs = context.result.result_cnt; if( status != IB_SUCCESS ) { - num_recs = 0; - if (status != IB_INVALID_PARAMETER) - { - osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_name_and_key: ERR 0370: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); - } + char mad_stat_err[256]; + /* If the failure is due to IB_SA_MAD_STATUS_NO_RECORDS and rec_num is 0, + then this is fine. */ if( status == IB_REMOTE_ERROR ) + strcpy(mad_stat_err, ib_get_mad_status_str( + osm_madw_get_mad_ptr(context.result.p_result_madw) ) ); + else + strcpy(mad_stat_err, ib_get_err_str(status) ); + + if( status == IB_REMOTE_ERROR && + !strcmp(mad_stat_err, "IB_SA_MAD_STATUS_NO_RECORDS") && + rec_num == 0 ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_get_service_by_name_and_key: " - "Remote error = %s.\n", - ib_get_mad_status_str( osm_madw_get_mad_ptr - ( context.result. - p_result_madw ) ) ); - } - goto Exit; + "IS EXPECTED ERROR ^^^^\n"); + status = IB_SUCCESS; } else { - num_recs = context.result.result_cnt; + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_get_service_by_name_and_key: ERR 4A0D: " + "Query failed:%s (%s)\n", + ib_get_err_str(status), + mad_stat_err ); + goto Exit; + } } if ( num_recs != rec_num ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_get_service_by_name_and_key: " - "Unmatched record number, Expected : %d, Got : %d.\n", + "Unmatched number of records: expected:%d, received:%d\n", rec_num, num_recs); status = IB_REMOTE_ERROR; goto Exit; } p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, 0 ); + *p_out_rec = *p_rec; + + if ( num_recs ) + { osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_name_and_key: " - "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n", + "Found service record: name:%s id:0x%016" PRIx64 "\n", sr_name, cl_ntoh64(p_rec->service_id)); osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_DEBUG); - *p_out_rec = *p_rec; + } Exit: osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_name_and_key: " - "Expected num of records is : %d, Found number of records : %d\n", - rec_num,num_recs); + "Expected and found %d records\n", + rec_num ); + if( context.result.p_result_madw != NULL ) { osm_mad_pool_put( &p_osmt->mad_pool, context.result.p_result_madw ); @@ -874,12 +922,10 @@ osmt_get_service_by_name( IN osmtest_t * OSM_LOG_ENTER( &p_osmt->log, osmt_get_service_by_name ); if( osm_log_is_active( &p_osmt->log, OSM_LOG_VERBOSE ) ) - { osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_name: " - "Getting Service Record by Name:%s.\n", + "Getting service record: name:%s\n", sr_name); - } /* * Do a blocking query for this record in the subnet. @@ -893,78 +939,90 @@ osmt_get_service_by_name( IN osmtest_t * context.p_osmt = p_osmt; + /* prepare the data used for this query */ req.query_type = OSMV_QUERY_SVC_REC_BY_NAME; req.timeout_ms = p_osmt->opt.transaction_timeout; req.retry_cnt = p_osmt->opt.retry_count; req.flags = OSM_SA_FLAGS_SYNC; req.query_context = &context; req.pfn_query_cb = osmtest_query_res_cb; + req.sm_key = 0; + cl_memclr(service_name, sizeof(service_name)); cl_memcpy(service_name, sr_name, (strlen(sr_name)+1)*sizeof(char)); req.p_query_input = service_name; - req.sm_key = 0; status = osmv_query_sa( p_osmt->h_bind, &req ); if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_name: ERR 0365: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_get_service_by_name: ERR 4A0E: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } status = context.result.status; + num_recs = context.result.result_cnt; if( status != IB_SUCCESS ) { - /* The context struct is not init OR result with illegal number of records */ - num_recs = 0; - if (status != IB_INVALID_PARAMETER) - { - osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_name: ERR 0370: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); - } + char mad_stat_err[256]; + /* If the failure is due to IB_SA_MAD_STATUS_NO_RECORDS and rec_num is 0, + then this is fine. */ if( status == IB_REMOTE_ERROR ) + strcpy(mad_stat_err, ib_get_mad_status_str( + osm_madw_get_mad_ptr(context.result.p_result_madw) ) ); + else + strcpy(mad_stat_err, ib_get_err_str(status) ); + + if( status == IB_REMOTE_ERROR && + !strcmp(mad_stat_err, "IB_SA_MAD_STATUS_NO_RECORDS") && + rec_num == 0 ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_get_service_by_name: " - "Remote error = %s.\n", - ib_get_mad_status_str( osm_madw_get_mad_ptr - ( context.result. - p_result_madw ) ) ); - } - goto Exit; + "IS EXPECTED ERROR ^^^^\n"); + status = IB_SUCCESS; } else { - num_recs = context.result.result_cnt; + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_get_service_by_name: ERR 4A0F: " + "Query failed:%s (%s)\n", + ib_get_err_str(status), + mad_stat_err ); + goto Exit; + } } if ( num_recs != rec_num ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_service_by_name: " - "Unmatched record number, Expeceted : %d, Got : %u.\n", + "osmt_get_service_by_name: ERR 4A10: " + "Unmatched number of records: expected:%d, received:%u\n", rec_num, num_recs); status = IB_REMOTE_ERROR; goto Exit; } p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, 0 ); + *p_out_rec = *p_rec; + + if (num_recs) + { osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_name: " - "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n", + "Found service record: name:%s id:0x%016" PRIx64 "\n", sr_name, cl_ntoh64(p_rec->service_id)); osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_DEBUG); - *p_out_rec = *p_rec; + } Exit: osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_service_by_name: " - "Expected num of records is : %d, Found number of records : %u\n", - rec_num,num_recs); + "Expected and found %d records\n", + rec_num ); if( context.result.p_result_madw != NULL ) { @@ -1002,7 +1060,7 @@ osmt_get_all_services_and_check_names( I { osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_all_services_and_check_names: " - "Getting All Service Records\n"); + "Getting all service records\n"); } /* * Do a blocking query for this record in the subnet. @@ -1028,8 +1086,8 @@ osmt_get_all_services_and_check_names( I if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_all_services_and_check_names: ERR 0371: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_get_all_services_and_check_names: ERR 4A12: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } @@ -1040,14 +1098,14 @@ osmt_get_all_services_and_check_names( I if (status != IB_INVALID_PARAMETER) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_all_services_and_check_names: ERR 0372: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_get_all_services_and_check_names: ERR 4A13: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); } if( status == IB_REMOTE_ERROR ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, "osmt_get_all_services_and_check_names: " - "Remote error = %s.\n", + "Remote error = %s\n", ib_get_mad_status_str( osm_madw_get_mad_ptr ( context.result. p_result_madw ) ) ); @@ -1058,14 +1116,14 @@ osmt_get_all_services_and_check_names( I num_recs = context.result.result_cnt; osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_all_services_and_check_names: " - "Received %u records.\n", num_recs ); + "Received %u records\n", num_recs ); for( i = 0; i < num_recs; i++ ) { p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, i ); osm_log( &p_osmt->log, OSM_LOG_VERBOSE, "osmt_get_all_services_and_check_names: " - "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n", + "Found service record: name:%s id:0x%016" PRIx64 "\n", p_rec->service_name, cl_ntoh64(p_rec->service_id)); osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_VERBOSE); for ( j = 0; j < num_of_valid_names; j++) @@ -1091,8 +1149,8 @@ osmt_get_all_services_and_check_names( I if (p_checked_names[j] == 0) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_get_all_services_and_check_names: ERR 0377: " - "Missing Valid Service Name:%s\n",p_valid_service_names_arr[j]); + "osmt_get_all_services_and_check_names: ERR 4A14: " + "Missing valid service: name:%s\n",p_valid_service_names_arr[j]); status = IB_ERROR; goto Exit; } @@ -1124,7 +1182,7 @@ osmt_delete_service_by_name(IN osmtest_t osm_log( &p_osmt->log, OSM_LOG_INFO, "osmt_delete_service_by_name: " - "Trying to Delete Service: Name:%s.\n", + "Trying to Delete service name:%s\n", sr_name); cl_memclr( &svc_rec, sizeof( svc_rec ) ); @@ -1132,17 +1190,10 @@ osmt_delete_service_by_name(IN osmtest_t status = osmt_get_service_by_name(p_osmt, sr_name,rec_num, &svc_rec); if (status != IB_SUCCESS) { - if (IsServiceExist) osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_delete_service_by_name: ERR 001 " - "Nothing to delete - failed to find service by name: %s \n", sr_name); - else - { - osm_log( &p_osmt->log, OSM_LOG_INFO, - "osmt_delete_service_by_name: " - "Record should not exist, i.e. BAD flow\n"); - status = IB_SUCCESS; - } + "osmt_delete_service_by_name: ERR 4A15: " + "Failed to get service: name:%s\n", + sr_name ); goto ExitNoDel; } @@ -1175,29 +1226,57 @@ osmt_delete_service_by_name(IN osmtest_t if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_delete_service_by_name: ERR 0373: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_delete_service_by_name: ERR 4A16: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); goto Exit; } status = context.result.status; - + if ( IsServiceExist ) + { + /* If IsServiceExist = 1 then we should succeed here */ if( status != IB_SUCCESS ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_delete_service_by_name: ERR 0374: " - "ib_query failed (%s).\n", ib_get_err_str( status ) ); + "osmt_delete_service_by_name: ERR 4A17: " + "ib_query failed (%s)\n", ib_get_err_str( status ) ); if( status == IB_REMOTE_ERROR ) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_delete_service_by_name: " - "Remote error = %s.\n", + "osmt_delete_service_by_name: ERR 4A18: " + "Remote error = %s\n", ib_get_mad_status_str( osm_madw_get_mad_ptr ( context.result. p_result_madw ) ) ); } - goto Exit; + } + } + else + { + /* If IsServiceExist = 0 then we should fail here */ + if ( status == IB_SUCCESS ) + { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_delete_service_by_name: ERR 4A19: " + "Succeeded to delete service:%s which " + "shouldn't exist", + sr_name ); + status = IB_ERROR; + } + else + { + /* The deletion should have failed, since the service_name + shouldn't exist. */ + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: " + "IS EXPECTED ERROR ^^^^\n"); + osm_log( &p_osmt->log, OSM_LOG_INFO, + "osmt_delete_service_by_name: " + "Failed to delete service_name:%s\n", + sr_name ); + status = IB_SUCCESS; + } } Exit: @@ -1362,144 +1441,256 @@ osmt_run_service_records_flow( IN osmtes /* Let OpenSM handle it */ usleep(100); + /* Make sure service_name[0] exists */ status = osmt_get_service_by_name(p_osmt, (char*)service_name[0],1, &srv_rec); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A1A: " + "Fail to find service: name:%s\n", + (char*)service_name[0] ); + status = IB_ERROR; goto Exit; } + /* Make sure service_name[1] exists */ status = osmt_get_service_by_name(p_osmt, (char*)service_name[1],1, &srv_rec); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A1B: " + "Fail to find service: name:%s\n", + (char*)service_name[1] ); + status = IB_ERROR; goto Exit; } + /* Make sure service_name[2] exists */ status = osmt_get_service_by_name(p_osmt, (char*)service_name[2],1, &srv_rec); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A1C: " + "Fail to find service: name:%s\n", + (char*)service_name[2] ); + status = IB_ERROR; goto Exit; } - /* Try to get osmt.srvc.4 b4 (there should be 1 record) and after 10 sec - It should be deleted */ + /* Make sure service_name[3] exists. */ + /* After 10 seconds the service should not exist: service_lease = 10 */ status = osmt_get_service_by_name(p_osmt, (char*)service_name[3],1, &srv_rec); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A1D: " + "Fail to find service: name:%s\n", + (char*)service_name[3] ); + status = IB_ERROR; goto Exit; } + sleep(10); + status = osmt_get_service_by_name(p_osmt, (char*)service_name[3],0, &srv_rec); - if (status == IB_SUCCESS) + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A1E: " + "Found service: name:%s that should have been " + "deleted due to service lease expiring\n", + (char*)service_name[3] ); + status = IB_ERROR; goto Exit; } - /* Check that for the current Service ID only one record exists */ + + /* Check that for service: id[5] only one record exists */ status = osmt_get_service_by_id(p_osmt, 1, cl_ntoh64(id[5]),&srv_rec); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A1F: " + "Found number of records!=1 for " + "service: id:0x%016" PRIx64 "\n", + id[5] ); + status = IB_ERROR; goto Exit; } - /* Bad Flow of Get with invalid Service ID */ + /* Bad Flow of Get with invalid Service ID: id[7] */ status = osmt_get_service_by_id(p_osmt, 0,cl_ntoh64(id[7]),&srv_rec); - if (status == IB_SUCCESS) + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A20: " + "Found service: id:0x%016 " PRIx64 + "that is invalid\n", + id[7] ); + status = IB_ERROR; goto Exit; } - /* Check that for correct name and ID we get record set b4 */ + + /* Check by both id and service name: id[0], service_name[0] */ status = osmt_get_service_by_id_and_name(p_osmt, 1, cl_ntoh64(id[0]), (char*)service_name[0], &srv_rec); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A21: " + "Fail to find service: id:0x%016 " PRIx64 + "name:%s\n", + id[0], + (char*)service_name[0] ); + status = IB_ERROR; goto Exit; } + + /* Check by both id and service name: id[5], service_name[6] */ status = osmt_get_service_by_id_and_name(p_osmt, 1, cl_ntoh64(id[5]), (char*)service_name[6], &srv_rec); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A22: " + "Fail to find service: id:0x%016 " PRIx64 + "name:%s\n", + id[5], + (char*)service_name[6] ); + status = IB_ERROR; goto Exit; } - /* Bad Flow of Get with valid name and invalid ID */ + /* Bad Flow of Get with invalid name(service_name[3]) and valid ID(id[0]) */ status = osmt_get_service_by_id_and_name(p_osmt, 0, cl_ntoh64(id[0]), (char*)service_name[3], &srv_rec); - if (status == IB_SUCCESS) + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A23: " + "Found service: id:0x%016" PRIx64 + "name:%s which is an invalid service\n", + id[0], + (char*)service_name[3] ); + status = IB_ERROR; goto Exit; } - /* Bad Flow of Get with unmatched name (exists but not with the following ID) and valid ID */ + + /* Bad Flow of Get with unmatched name(service_name[5]) and id(id[3]) (both valid) */ status = osmt_get_service_by_id_and_name(p_osmt, 0, cl_ntoh64(id[3]), (char*)service_name[5], &srv_rec); - if (status == IB_SUCCESS) + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A24: " + "Found service: id:0x%016" PRIx64 + "name:%s which is an invalid service\n", + id[3], + (char*)service_name[5] ); + status = IB_ERROR; goto Exit; } + /* Bad Flow of Get with service name that doesn't exist (service_name[4]) */ status = osmt_get_service_by_name(p_osmt, (char*)service_name[4],0, &srv_rec); - if (status == IB_SUCCESS) + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A25: " + "Found service: name:%s that shouldn't exist\n", + (char*)service_name[4] ); + status = IB_ERROR; goto Exit; } - /* Bad Flow : Check that getting osmt.srvc.6 brings no records since another service has been updated with the same ID - osmt.srvc.7 */ + + /* Bad Flow : Check that getting service_name[5] brings no records since another service + has been updated with the same ID (service_name[6] */ status = osmt_get_service_by_name(p_osmt, (char*)service_name[5],0, &srv_rec); - if (status == IB_SUCCESS) + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A26: " + "Found service: name:%s which is an " + "invalid service\n", + (char*)service_name[5] ); + status = IB_ERROR; goto Exit; } - /* Check that getting osmt.srvc.7 by name ONLY is valid since we do not support key&name association, also trusted queries */ + + /* Check that getting service_name[6] by name ONLY is valid, + since we do not support key&name association, also trusted queries */ status = osmt_get_service_by_name(p_osmt, (char*)service_name[6],1, &srv_rec); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A27: " + "Fail to find service: name:%s\n", + (char*)service_name[6] ); + status = IB_ERROR; goto Exit; } /* Test Service Key */ cl_memclr(service_key,16*sizeof(uint8_t)); + + /* Check for service_name[5] with service_key=0 - the service shouldn't + exist with this name. */ status = osmt_get_service_by_name_and_key (p_osmt, (char*)service_name[5], 0, service_key,&srv_rec); - if (status == IB_SUCCESS) + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A28: " + "Found service: name:%s key:0 which is an " + "invalid service (wrong name)\n", + (char*)service_name[5] ); + status = IB_ERROR; goto Exit; } - else - { - status = IB_SUCCESS; - } + + /* Check for service_name[6] with service_key=0 - the service should + exist with different key. */ status = osmt_get_service_by_name_and_key (p_osmt, (char*)service_name[6], 0, service_key,&srv_rec); - if (status == IB_SUCCESS) + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A29: " + "Found service: name:%s key:0 which is an " + "invalid service (wrong service_key)\n", + (char*)service_name[6] ); + status = IB_ERROR; goto Exit; } - else - { - status = IB_SUCCESS; - } + /* check for service_name[6] with the correct service_key */ for (i=0;i <= 15;i++) service_key[i]=i + 1; status = osmt_get_service_by_name_and_key (p_osmt, (char*)service_name[6], - 0, service_key,&srv_rec); - if (status == IB_SUCCESS) + 1, service_key, &srv_rec); + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A2A: " + "Fail to find service: name:%s with " + "correct service key\n", + (char*)service_name[6] ); + status = IB_ERROR; goto Exit; } - else - { - status = IB_SUCCESS; - } #ifdef VENDOR_RMPP_SUPPORT + /* These ar the only service_names which are valid */ cl_memcpy(&service_valid_names[0],&service_name[0],sizeof(uint8_t)*64); cl_memcpy(&service_valid_names[1],&service_name[2],sizeof(uint8_t)*64); cl_memcpy(&service_valid_names[2],&service_name[6],sizeof(uint8_t)*64); @@ -1507,79 +1698,101 @@ osmt_run_service_records_flow( IN osmtes status = osmt_get_all_services_and_check_names(p_osmt,service_valid_names,3, &num_recs); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A2B: " + "Fail to find all services that should exist\n" ); + status = IB_ERROR; goto Exit; } #endif + /* Delete service_name[0] */ status = osmt_delete_service_by_name(p_osmt,1, (char*)service_name[0],1); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A2C: " + "Fail to delete service: name:%s\n", + (char*)service_name[0] ); + status = IB_ERROR; goto Exit; } + /* Make sure deletion of service_name[0] succeeded */ status = osmt_get_service_by_name(p_osmt, - (char*)service_name[0],1, &srv_rec); - if (status == IB_SUCCESS) + (char*)service_name[0],0, &srv_rec); + if (status != IB_SUCCESS) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_run_service_records_flow: ERR 001 " - "Expected not to find osmt.srvc.1 \n"); + "osmt_run_service_records_flow: ERR 4A2D: " + "Found service: name:%s that was deleted\n", + (char*)service_name[0] ); status = IB_ERROR; goto Exit; } - osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_run_service_records_flow: " - "IS EXPECTED ERR ^^^^\n"); - - sleep(3); + /* Make sure service_name[1] doesn't exist (expired service lease) */ status = osmt_get_service_by_name(p_osmt, - (char*)service_name[1],1, &srv_rec); - if (status == IB_SUCCESS) + (char*)service_name[1],0, &srv_rec); + if (status != IB_SUCCESS) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_run_service_records_flow: ERR 001 " - "Expected not to find osmt.srvc.2 \n"); + "osmt_run_service_records_flow: ERR 4A2E: " + "Found service: name:%s that should have expired\n", + (char*)service_name[1] ); status = IB_ERROR; goto Exit; } - else - { - osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_run_service_records_flow: " - "IS EXPECTED ERR ^^^^\n"); - status = IB_SUCCESS; - } + /* Make sure service_name[2] exists */ status = osmt_get_service_by_name(p_osmt, (char*)service_name[2],1, &srv_rec); if (status != IB_SUCCESS) { osm_log( &p_osmt->log, OSM_LOG_ERROR, - "osmt_run_service_records_flow: ERR 001 " - "Expected to find service osmt.srvc.3\n" ); + "osmt_run_service_records_flow: ERR 4A2F: " + "Fail to find service: name:%s\n", + (char*)service_name[2] ); + status = IB_ERROR; goto Exit; } - status = osmt_delete_service_by_name(p_osmt,1, - (char*)service_name[6],1); + + /* Bad Flow - try to delete non-existent service_name[5] */ + status = osmt_delete_service_by_name(p_osmt,0, + (char*)service_name[5],0); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A30: " + "Succeed to delete non-existent service: name:%s\n", + (char*)service_name[5] ); + status = IB_ERROR; goto Exit; } - /* Bad Flow */ - status = osmt_delete_service_by_name(p_osmt,0, - (char*)service_name[5],1); - if (status == IB_SUCCESS) + /* Delete service_name[2] */ + status = osmt_delete_service_by_name(p_osmt,1, + (char*)service_name[2],1); + if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A31: " + "Fail to delete service: name:%s\n", + (char*)service_name[2] ); + status = IB_ERROR; goto Exit; } + /* Delete service_name[6] */ status = osmt_delete_service_by_name(p_osmt,1, - (char*)service_name[2],1); + (char*)service_name[6],1); if (status != IB_SUCCESS) { + osm_log( &p_osmt->log, OSM_LOG_ERROR, + "osmt_run_service_records_flow: ERR 4A32: " + "Failed to delete service name:%s\n", + (char*)service_name[6] ); goto Exit; } Index: opensm/osm_sa_service_record.c =================================================================== --- opensm/osm_sa_service_record.c (revision 5403) +++ opensm/osm_sa_service_record.c (working copy) @@ -798,6 +798,13 @@ osm_sr_rcv_process_get_method( p_recvd_service_rec = (ib_service_record_t*)ib_sa_mad_get_payload_ptr( p_sa_mad ); + if( osm_log_is_active( p_rcv->p_log, OSM_LOG_DEBUG ) ) + { + osm_dump_service_record( p_rcv->p_log, + p_recvd_service_rec, + OSM_LOG_DEBUG ); + } + cl_qlist_init(&sr_match_item.sr_list); sr_match_item.p_service_rec = p_recvd_service_rec; sr_match_item.comp_mask = p_sa_mad->comp_mask; _______________________________________________ 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